当前位置:首页 » 安卓系统 » opencv人脸识别android

opencv人脸识别android

发布时间: 2023-05-16 21:21:31

❶ 怎样使用OpenCV进行人脸识别

网上帖子不是很多么,这个是我自己简单写的,注释的部分删了吧,就可以简单识别人脸了

#include<opencv2corecore.hpp>
#include<opencv2imgprocimgproc.hpp>
#include<opencv2highguihighgui.hpp>
#include<opencv2videoackground_segm.hpp>
#include<opencv2/objdetect/objdetect.hpp>
#include<iostream>

usingnamespacecv;
voiddetectAndDraw(Mat&img,CascadeClassifier&cascade,
CascadeClassifier&nestedCascade,
doublescale,booltryflip);
//Matimageresize(Mat&image,Sizesize);

/*intmain(){
//VideoCapturecap(0);//打开默认摄像头
VideoCapturecap("F:/nihao.mp4");
if(!cap.isOpened())
{
return-1;
}
Matframe;
Matedges;

CascadeClassifier滚昌卜cascade,nestedCascade;
boolstop=false;
//训练好的文件名称,放置在可执行文件同目录下
cascade.load("haarcascade_frontalface_alt.xml");
nestedCascade.load("haarcascade_eye_tree_eyeglasses.xml");
while(!stop)
{
cap>>frame;
detectAndDraw(frame,cascade,nestedCascade,2,0);
if(waitKey(30)>=0)
stop=true;
}
return0;
}
*/
intmain(){
Matimage=imread("F:/quanjiafu.jpg");
CascadeClassifiercascade,nestedcascade;
cascade.load("F:/Opencv2.4.9/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml");
nestedcascade.load("F:/Opencv2.4.9/opencv/sources/data/haarcascades/haarcascade_eye_tree_eyeglasses.xml");
detectAndDraw(image,cascade,nestedcascade,2,0);
waitKey(0);
return0;
}
voiddetectAndDraw(Mat&img,CascadeClassifier&cascade,
CascadeClassifier&nestedCascade,
doublescale,booltryflip)
{
inti=0;
doublet=0;
//建立用于存放人脸的向量容器
vector<Rect>faces,faces2;
//定义一些颜色,用来标示不同的人脸
conststaticScalarcolors[]={
CV_RGB(0,0,255),
CV_RGB(0,128,255),
CV_RGB(0,255,255),
CV_RGB(0,255,0),
CV_RGB(255,128,0),
CV_RGB(255,255,0),
CV_RGB(255,0,0),
CV_RGB(255,0,255)};
//建立缩小的图片,加快检测速度
//ntcvRound(doublevalue)对一个double型的数进行四舍五入,并返回一个整型数!
Matgray,smallImg(cvRound(img.rows/scale),cvRound(img.cols/scale),CV_8UC1);
//转成灰度图像,Harr特征基于灰度图
cvtColor(img,gray,CV_BGR2GRAY);
迅圆//改变图像大小,使用双线性差值
resize(gray,smallImg,smallImg.size(),0,0,INTER_LINEAR);
大穗//变换后的图像进行直方图均值化处理
equalizeHist(smallImg,smallImg);

//程序开始和结束插入此函数获取时间,经过计算求得算法执行时间
t=(double)cvGetTickCount();
//检测人脸
//detectMultiScale函数中smallImg表示的是要检测的输入图像为smallImg,faces表示检测到的人脸目标序列,1.1表示
//每次图像尺寸减小的比例为1.1,2表示每一个目标至少要被检测到3次才算是真的目标(因为周围的像素和不同的窗口大
//小都可以检测到人脸),CV_HAAR_SCALE_IMAGE表示不是缩放分类器来检测,而是缩放图像,Size(30,30)为目标的
//最小最大尺寸
cascade.detectMultiScale(smallImg,faces,
1.1,2,0
//|CV_HAAR_FIND_BIGGEST_OBJECT
//|CV_HAAR_DO_ROUGH_SEARCH
|CV_HAAR_SCALE_IMAGE
,
Size(30,30));
//如果使能,翻转图像继续检测
if(tryflip)
{
flip(smallImg,smallImg,1);
cascade.detectMultiScale(smallImg,faces2,
1.1,2,0
//|CV_HAAR_FIND_BIGGEST_OBJECT
//|CV_HAAR_DO_ROUGH_SEARCH
|CV_HAAR_SCALE_IMAGE
,
Size(30,30));
for(vector<Rect>::const_iteratorr=faces2.begin();r!=faces2.end();r++)
{
faces.push_back(Rect(smallImg.cols-r->x-r->width,r->y,r->width,r->height));
}
}
t=(double)cvGetTickCount()-t;
//qDebug("detectiontime=%gms ",t/((double)cvGetTickFrequency()*1000.));
for(vector<Rect>::const_iteratorr=faces.begin();r!=faces.end();r++,i++)
{
MatsmallImgROI;
vector<Rect>nestedObjects;
Pointcenter;
Scalarcolor=colors[i%8];
intradius;

doubleaspect_ratio=(double)r->width/r->height;
if(0.75<aspect_ratio&&aspect_ratio<1.3)
{
//标示人脸时在缩小之前的图像上标示,所以这里根据缩放比例换算回去
center.x=cvRound((r->x+r->width*0.5)*scale);
center.y=cvRound((r->y+r->height*0.5)*scale);
//Sizes=Size(cvRound((r->width+r->height)*0.25*scale)*2,cvRound((r->width+r->height)*0.25*scale)*2);
//Matimage=imread("F:/yaoming1.jpg");
//Matnimage=imageresize(image,s);
//MatimageROI=img(Rect(center.x-s.width/2,center.y-s.height/2,nimage.cols,nimage.rows));
//addWeighted(imageROI,0.1,nimage,3,0.,imageROI);
radius=cvRound((r->width+r->height)*0.25*scale);
circle(img,center,radius,color,2,8,0);
}
else
rectangle(img,cvPoint(cvRound(r->x*scale),cvRound(r->y*scale)),
cvPoint(cvRound((r->x+r->width-1)*scale),cvRound((r->y+r->height-1)*scale)),
color,3,8,0);
if(nestedCascade.empty())
continue;
smallImgROI=smallImg(*r);
//同样方法检测人眼
nestedCascade.detectMultiScale(smallImgROI,nestedObjects,
1.1,2,0
//|CV_HAAR_FIND_BIGGEST_OBJECT
//|CV_HAAR_DO_ROUGH_SEARCH
//|CV_HAAR_DO_CANNY_PRUNING
|CV_HAAR_SCALE_IMAGE
,
Size(30,30));
for(vector<Rect>::const_iteratornr=nestedObjects.begin();nr!=nestedObjects.end();nr++)
{
center.x=cvRound((r->x+nr->x+nr->width*0.5)*scale);
center.y=cvRound((r->y+nr->y+nr->height*0.5)*scale);
radius=cvRound((nr->width+nr->height)*0.25*scale);
circle(img,center,radius,color,3,8,0);
}
}
cv::imshow("result",img);
}
//Matimageresize(Mat&image,Sizesize){
//Matnimage=Mat(size,CV_32S);
//resize(image,nimage,size);
//returnnimage;

❷ android 使用opencv人脸识别

恩,不错,加油

❸ 用OpenCV开发人脸识别软件,用java好还是用C/C++好

我去年就用opencv开发的android手机端的关于人脸识别的增强现实应用。我可以很明确的告诉你,java的opencv顶多调用摄像头用,图像处理都用c++的opencv。对于opencv的开发,不管从开发效率还是执行效率,绝对是c++。java版的opencv想都不要想。

❹ 怎样使用OpenCV进行人脸识别

1.介绍Introction

从OpenCV2.4开始,加入了新的类FaceRecognizer,我们可以使用它便捷地进行人脸识别实验。本文既介绍代码使用,又介绍算法原理。(他写的源代码,我们可以在OpenCV的opencv\moles\contrib\doc\facerec\src下找到,当然也可以在他的github中找到,如果你想研究源码,自然可以去看看,不复杂)

目前支持的算法有

Eigenfaces特征脸createEigenFaceRecognizer()

Fisherfaces createFisherFaceRecognizer()

LocalBinary Patterns Histograms局部二值直方图 createLBPHFaceRecognizer()

下面所有的例子中的代码在OpenCV安装目录下的samples/cpp下面都能找到,所有的代码商用或者学习都是免费的。

1.2.人脸识别Face
Recognition

对人类来说,人脸识别很容易。文献[Tu06]告诉我们,仅仅是才三天的婴儿已经可以区分周围熟悉的人脸了。那么对于计算机来说,到底有多难?其实,迄今为止,我们对于人类自己为何可以区分不同的人所知甚少。是人脸内部特征(眼睛、鼻子、嘴巴)还是外部特征(头型、发际线)对于人类识别更有效?我们怎么分析一张图像,大脑是如何对它编码的?David Hubel和TorstenWiesel向我们展示,我们的大脑针对不同的场景,如线、边、角或者运动这些局部特征有专门的神经细胞作出反应。显然我们没有把世界看成零散的块块,我们的视觉皮层必须以某种方式把不同的信息来源转化成有用的模式。自动人脸识别就是如何从一幅图像中提取有意义的特征,把它们放入一种有用的表示方式,然后对他们进行一些分类。基于几何特征的人脸的人脸识别可能是最直观的方法来识别人脸。第一个自动人脸识别系统在[Kanade73]中又描述:标记点(眼睛、耳朵、鼻子等的位置)用来构造一个特征向量(点与点之间的距离、角度等)。通过计算测试和训练图像的特征向量的欧氏距离来进行识别。这样的方法对于光照变化很稳健,但也有巨大的缺点:标记点的确定是很复杂的,即使是使用最先进的算法。一些几何特征人脸识别近期工作在文献[Bru92]中有描述。一个22维的特征向量被用在一个大数据库上,单靠几何特征不能提供足够的信息用于人脸识别。

特征脸方法在文献[TP91]中有描述,他描述了一个全面的方法来识别人脸:面部图像是一个点,这个点是从高维图像空间找到它在低维空间的表示,这样分类变得很简单。低维子空间低维是使用主元分析(Principal
Component
Analysis,PCA)找到的,它可以找拥有最大方差的那个轴。虽然这样的转换是从最佳重建角度考虑的,但是他没有把标签问题考虑进去。[gm:读懂这段需要一些机器学习知识]。想象一个情况,如果变化是基于外部来源,比如光照。轴的最大方差不一定包含任何有鉴别性的信息,因此此时的分类是不可能的。因此,一个使用线性鉴别(Linear
Discriminant Analysis,LDA)的特定类投影方法被提出来解决人脸识别问题[BHK97]。其中一个基本的想法就是,使类内方差最小的同时,使类外方差最大。

近年来,各种局部特征提取方法出现。为了避免输入的图像的高维数据,仅仅使用的局部特征描述图像的方法被提出,提取的特征(很有希望的)对于局部遮挡、光照变化、小样本等情况更强健。有关局部特征提取的方法有盖伯小波(Gabor
Waelets)([Wiskott97]),离散傅立叶变换(DiscreteCosinus
Transform,DCT)([Messer06]),局部二值模式(LocalBinary
Patterns,LBP)([AHP04])。使用什么方法来提取时域空间的局部特征依旧是一个开放性的研究问题,因为空间信息是潜在有用的信息。

1.3.人脸库Face
Database

我们先获取一些数据来进行实验吧。我不想在这里做一个幼稚的例子。我们在研究人脸识别,所以我们需要一个真的人脸图像!你可以自己创建自己的数据集,也可以从这里(http://face-rec.org/databases/)下载一个。

AT&TFacedatabase又称ORL人脸数据库,40个人,每人10张照片。照片在不同时间、不同光照、不同表情(睁眼闭眼、笑或者不笑)、不同人脸细节(戴眼镜或者不戴眼镜)下采集。所有的图像都在一个黑暗均匀的背景下采集的,正面竖直人脸(有些有有轻微旋转)。

YaleFacedatabase
A ORL数据库对于初始化测试比较适合,但它是一个简单的数据库,特征脸已经可以达到97%的识别率,所以你使用其他方法很难得到更好的提升。Yale人脸数据库是一个对于初始实验更好的数据库,因为识别问题更复杂。这个数据库包括15个人(14个男人,1个女人),每一个都有11个灰度图像,大小是320*243像素。数据库中有光照变化(中心光照、左侧光照、右侧光照)、表情变化(开心、正常、悲伤、瞌睡、惊讶、眨眼)、眼镜(戴眼镜或者没戴)。

坏消息是它不可以公开下载,可能因为原来的服务器坏了。但我们可以找到一些镜像(比如 theMIT)但我不能保证它的完整性。如果你需要自己剪裁和校准图像,可以阅读我的笔记(bytefish.de/blog/fisherfaces)。

ExtendedYale
Facedatabase
B 此数据库包含38个人的2414张图片,并且是剪裁好的。这个数据库重点是测试特征提取是否对光照变化强健,因为图像的表情、遮挡等都没变化。我认为这个数据库太大,不适合这篇文章的实验,我建议使用ORL数据库。

1.3.1. 准备数据

我们从网上下了数据,下了我们需要在程序中读取它,我决定使用CSV文件读取它。一个CSV文件包含文件名,紧跟一个标签。

/path/to/image.ext;0

假设/path/to/image.ext是图像,就像你在windows下的c:/faces/person0/image0.jpg。最后我们给它一个标签0。这个标签类似代表这个人的名字,所以同一个人的照片的标签都一样。我们对下载的ORL数据库进行标识,可以获取到如下结果:
./at/s1/1.pgm;0
./at/s1/2.pgm;0
...
./at/s2/1.pgm;1
./at/s2/2.pgm;1
...
./at/s40/1.pgm;39
./at/s40/2.pgm;39

想象我已经把图像解压缩在D:/data/at下面,而CSV文件在D:/data/at.txt。下面你根据自己的情况修改替换即可。一旦你成功建立CSV文件,就可以像这样运行示例程序:
facerec_demo.exe D:/data/at.txt

1.3.2 Creating the CSV File

你不需要手工来创建一个CSV文件,我已经写了一个Python程序来做这事。

[gm:说一个我实现的方法

如果你会cmd命令,或者称DOS命令,那么你打开命令控制台。假设我们的图片放在J:下的Faces文件夹下,可以输入如下语句:
J:\Faces\ORL>dir /b/s *.bmp > at.txt

然后你打开at.txt文件可能看到如下内容(后面的0,1..标签是自己加的):
。。。。
J:\Faces\ORL\s1\1.bmp;0
J:\Faces\ORL\s1\10.bmp;0
J:\Faces\ORL\s1\2.bmp;0
J:\Faces\ORL\s1\3.bmp;0
J:\Faces\ORL\s1\4.bmp;0
J:\Faces\ORL\s1\5.bmp;0
J:\Faces\ORL\s1\6.bmp;0
J:\Faces\ORL\s1\7.bmp;0
J:\Faces\ORL\s1\8.bmp;0
J:\Faces\ORL\s1\9.bmp;0
J:\Faces\ORL\s10\1.bmp;1
J:\Faces\ORL\s10\10.bmp;1
J:\Faces\ORL\s10\2.bmp;1
J:\Faces\ORL\s10\3.bmp;1
J:\Faces\ORL\s10\4.bmp;1
J:\Faces\ORL\s10\5.bmp;1
J:\Faces\ORL\s10\6.bmp;1
。。。。

自然还有c++编程等方法可以做得更好,看这篇文章反响,如果很多人需要,我就把这部分的代码写出来。(遍历多个文件夹,标上标签)

]

特征脸Eigenfaces

我们讲过,图像表示的问题是他的高维问题。二维灰度图像p*q大小,是一个m=qp维的向量空间,所以一个100*100像素大小的图像就是10,000维的图像空间。问题是,是不是所有的维数空间对我们来说都有用?我们可以做一个决定,如果数据有任何差异,我们可以通过寻找主元来知道主要信息。主成分分析(Principal
Component Analysis,PCA)是KarlPearson (1901)独立发表的,而 Harold
Hotelling (1933)把一些可能相关的变量转换成一个更小的不相关的子集。想法是,一个高维数据集经常被相关变量表示,因此只有一些的维上数据才是有意义的,包含最多的信息。PCA方法寻找数据中拥有最大方差的方向,被称为主成分。

❺ 怎样使用OpenCV进行人脸识别

不知道你说的人脸识别是识别出来是某个人还是只是在图像中检测出人脸。
刚用opencv完成对自己的人脸识别,但是还需要继续优化。说一下大致步骤吧:

1、首先就是数据的准备,你要从网络上下载一些人脸库,后面用来训练人脸识别模型。人脸检测模型opencv是自带的,但是识别模型需要自己训练。下载人脸库之后需要对人脸进行标记,这是一个繁琐的工作,不过网上有脚本或型悄薯者自己写个程序简化工作量。
2、把数据标记好之后就是opencv的事情。训练的函数非常简单。只有下面这三句:

1
2
3

Ptr<FaceRecognizer> model = createEigenFaceRecognizer();
model->train(images, labels);
model->save("MyFacePCAModel.xml");

3、然后打开摄像头进行人脸检测,就是框出人脸的位置。人脸检测模型是opencv自带的。

1
2

CascadeClassifier cascade;
cascade.load("haarcascade_frontalface_alt.xml");

这是加载的方法。

1
2
3
4
5
6

cascade.detectMultiScale(gray, faces,
1.1, 2, 0
//|CV_HAAR_FIND_BIGGEST_OBJECT
//|CV_HAAR_DO_ROUGH_SEARCH
| CV_HAAR_SCALE_IMAGE,
Size(30, 30));

这是检测的方法。这里检测得运蠢到的就是一个一个的人脸的矩形框,然后用画矩形的方法把它们画出来就行了。
4、然后就是对检测到的人脸进行识别了,用我们刚才训练好的人脸模型。加载:

1
2

Ptr<FaceRecognizer> modelPCA = createEigenFaceRecognizer();
modelPCA->load("卜者MyFacePCAModel.xml");

检测:

1
2
3
4
5
6
7
8
9

int predictPCA = 0;
if (face.rows >= 120)
{
resize(face, face_test, Size(92, 112));
}
if (!face_test.empty())
{
predictPCA = modelPCA->predict(face_test);
}

如果预测结果等于标记结果,说明识别正确。

大致流程就这样了,如果你对opencv有了一定的了解,应该能看懂了。没看懂只能私聊了。
第一次回答这么长,自己都有点不习惯。

❻ android opencv 人脸识别怎么做

关于Android开发人脸识别,市面上有不少的sdk,不过都不是免费的,离线的更是少。市面上的商用的一般都卖钱了,定制的话很贵,虹软有离线的,还免费,识别还是挺不错的。开源的有opencv,不过识别的不是很好,sdk下载地址。

❼ 怎样使用OpenCV进行人脸识别

很早以前在processing官网中找到吵敏余了Face Detect(这个链接需要升滚代理才能打开)这个为拿埋processing提供人脸识别功能的lib,今天终于静下心来仔细阅读了它的说明文档,下面是其基本使用方法说明: 首先下载pFaceDetect.zip,在processing的libraries文件夹中新建一个名为pFaceDetect的文件夹,再将压缩包内的library文件夹拷贝到这个文件夹中。 其次,Face Detect需要openCV的支持,但并不必须安装openCV到计算机中,只要把openCV的cxcore100.dll 、cv100.dll 、libguide40.dll 三个文件拷贝到processing根目录就行了。
pFaceDetect是对PImage对象进行识别,下面的范例中是通过JMyron来获取视频,并将像素信息复制到PImage对象中,因此,运行下面的范例还需要安装JMyron。 重启processing,新建一个项目并保存,把压缩包内的data文件夹拷贝到当前项目的存档目录中。
不要忘记连接好摄像头。

❽ 如何在Android中使用OpenCV

1、下载
进入官网下载OpenCV4Android并解压

其中,sdk目录即是我们开发opencv所需要的类库;samples目录中存放着若干opencv应用示例(包括人脸检测等),可为我们进行android下的opencv开发提供参考;doc目录为opencv类库的使用说明及api文档等;而apk目录则存放着对应于各内核版本的OpenCV_2.4.3.2_Manager_2.4应用安装包。此应用用来管理手机设备中的opencv类库,在运行opencv应用之前,必须确保手机中已经安装了OpenCV_2.4.3.2_Manager_2.4_*.apk,否则opencv应用将会因为无法加载opencv类库而无法运行(下篇文章会介绍不提前安装openCV Manager,即可运行openCV的方法)。
2、将OpenCV引入Android Studio
在Android Studio中选择File->Import Mole,找到OpenCV解压的路径,选择sdk/java文件夹。

3、更新build.gradle信息
在Android Studio中的左上角选择Project视图,在oepnCVLibrary2411文件夹里,打开build.gradle(有很多重名的文件,一定找对openCV库文件下的),修改文件中的1)compileSdkVersion 2)buildToolsVersion 3) minSdkVersion 4)targetSdkVersion,将其内容与app文件夹下的build.gradle中信息相一致。点击上方提示的黄色提示框内的Try Again进行更新。
4、添加Mole Dependency
右键app文件夹,选择Open Mole Settings,在app mole的Dependencies一栏中,点击右上角的绿色加号,将openCVLibrary2411添加进去,点击确定。

5、复制libs文件夹到项目中
在OpenCV的解压包中,将sdk-->native-->libs文件夹复制,粘贴在Project视图下app-->src-->main目录下,并将其重命名为jniLibs。
自此,OpenCV的环境就配置好了。可以将OpenCV-android-sdk-->samples-->tutorial-1-camerapreview中的layout文件,java文件,放入工程中,修改AndroidManifest.xml,添加使用摄像机的权限,即可测试是否成功了。

❾ Opencv 图像识别Android实战(识别扑克牌 4.图像识别扫盲)

        我想来看这篇文章的人大多对机器学习都有一定的了解,我觉得没有必要非常学术话的解读这个意义。人的学习目的不就是为了认识更多的事物么,机器学习也是一样,就是让计算机通过学习类比来认识更多的事物。

         在这里我们是让计算机认识图像,要让计算机认识事物,首先得教他,他学会了自然就认识了,所以我们准备了很多样本来告诉计算机什么是方块,什么是梅花等等,当样本足够多的时候,计算机通过类比自然就能区别它所看到的事物了。

          机器学习算法有很多种,比如KNN,K-means,决策树,SVM,贝叶斯等,我们通过提取样本和目标的特征数据,再应用这些分类算法达到事物分类的目的,这样就简单的完成了一个机器学习的过程。当然机器学习不光用来分类,还有用来完成更多,更复杂的事情,目前图像识别领域的机器学习,千变万化的应用其实还是用来分类。所以图像分类还是图像识别的最基本,最重要的工作之一。

        在任何情况对任何事物分类都需要有分类目标,比如一株植物是什么科,那么分类目标是这个植物,样本自然就是我们已经定义好的各种植物以及植物类别。一个人是谁,我们可以用ta的面部特征来分类,人脸就是一个需要分类的目标。同样图像分类我么首先要找到分类的目标,比如我们需要知道某张图里面是否有苹果,通常情况下我们需要把可能存在苹果的地方扣下来和苹果图片作为对比,通过对比当匹配度达到一定程度时我们就认为被扣下来图片区域就是苹果型陪清,这样的处理过程通常来讲叫做图像分割,是图像识别中不可或缺的过程,图像分割的效果直接影响图像识别的最终效果。为了解决这个过卜前程,人们提出了很多算法来解决这个问题,在我看来图像分割任然是一个需要不断改进技术。碰巧在这个开源项目中用到的图像分割很简单,不需要知道太多其中的原理,也可以很好的完成这个任务。

          当前图像识别领域有两类主要的图像识别手段;单步法和基于候选区识别。单步法比如yolo算法,他直接把未知图片传入到神经网络,不用查找候选区就可以识别目标物体。基于候选区方法则多一乱李个过程,第一首先找到可能存在某个物体的候选区,第二步把这些候选区和已知的样本比对,如果匹配达到一定的程度就认为识别到某个物体。

基于候选区的算法优缺点如下:

        更少的样本,更高效的运行速度,更容易理解的算法,更廉价的设备,但是有些情况无法用单步法解决或者效果非常差,本开源项目就是用的基于候选区方式来解决问题。

单步法优缺点:

         更多的样本,单步法更多的使用神经网络,对设备性能要求高,能解决更加复杂的问题。

❿ 如何在Android studio中成功运行opencv人脸识别的例子

1.介绍Introction
从OpenCV2.4开始,加入了新的类FaceRecognizer,我们可以使用它便捷地进行人脸识别实验。本文既介绍代码使用,又介绍算法原理。(他写的源代码,我们可以在OpenCV的opencv\moles\contrib\doc\facerec\src下找到,当然也可以在他的github中找到,如果你想研究源码,自然可以去看看,不复杂)

目前支持的算法有

Eigenfaces特征脸createEigenFaceRecognizer()

Fisherfaces createFisherFaceRecognizer()

LocalBinary Patterns Histograms局部二值直方图 createLBPHFaceRecognizer()

下面所有的例子中的代码在OpenCV安装目录下的samples/cpp下面都能找到,所有的代码商用或者学习都是免费的。

1.2.人脸识别Face
Recognition

对人类来说,人脸识别很容易。文献[Tu06]告诉我们,仅仅是才三天的婴儿已经可以区分周围熟悉的人脸了。那么对于计算机来说,到底有多难?其实,迄今为止,我们对于人类自己为何可以区分不同的人所知甚少。是人脸内部特征(眼睛、鼻子、嘴巴)还是外部特征(头型、发际线)对于人类识别更有效?我们怎么分析一张图像,大脑是如何对它编码的?David Hubel和TorstenWiesel向我们展示,我们的大脑针对不同的场景,如线、边、角或者运动这些局部特征有专门的神经细胞作出反应。显然我们没有把世界看成零散的块块,我们的视觉皮层必须以某种方式把不同的信息来源转化成有用的模式。自动人脸识别就是如何从一幅图像中提取有意义的特征,把它们放入一种有用的表示方式,然后对他们进行一些分类。基于几何特征的人脸的人脸识别可能是最直观的方法来识别人脸。第一个自动人脸识别系统在[Kanade73]中又描述:标记点(眼睛、耳朵、鼻子等的位置)用来构造一个特征向量(点与点之间的距离、角度等)。通过计算测试和训练图像的特征向量的欧氏距离来进行识别。这样的方法对于光照变化很稳健,但也有巨大的缺点:标记点的确定是很复杂的,即使是使用最先进的算法。一些几何特征人脸识别近期工作在文献[Bru92]中有描述。一个22维的特征向量被用在一个大数据库上,单靠几何特征不能提供足够的信息用于人脸识别。

热点内容
存储虚拟化方案 发布:2025-02-14 00:21:15 浏览:695
ubuntupython3安装 发布:2025-02-14 00:14:45 浏览:661
和平精英怎么更新比较快安卓 发布:2025-02-14 00:14:35 浏览:974
怎么改密码锁 发布:2025-02-13 23:47:39 浏览:852
androidbitmap获取大小 发布:2025-02-13 23:47:38 浏览:559
怎么把升级鸿蒙系统变回安卓 发布:2025-02-13 23:36:07 浏览:595
偶校验c语言 发布:2025-02-13 23:22:52 浏览:937
芒果如何提取离线缓存视频 发布:2025-02-13 23:16:12 浏览:793
王者荣耀微信区安卓哪里分低 发布:2025-02-13 23:14:10 浏览:658
安装linuxvmwaretools 发布:2025-02-13 22:56:02 浏览:8