1、首先就是数据的准备,你要从网络上下载一些人脸库,后面用来训练人脸识别模型。人脸检测模型opencv是自带的,但是识别模型需要自己训练。下载人脸库之后需要对人脸进行标记,这是一个繁琐的工作,不过网上有脚本或者自己写个程序简化工作量。
2、把数据标记好之后就是opencv的事情。训练的函数非常简单。只有下面这三句:
Ptr model = ();
model->train(images, labels);
model->save("MyFacePCAModel.xml");
3、然后打开摄像头进行人脸检测,就是框出人脸的位置。人脸检测模型是opencv自带的。
CascadeClassifier cascade;
cascade.load("haarcascade_frontalface_alt.xml");
这是加载的方法。
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、然后就是对检测到的人脸进行识别了,用我们刚才训练好的人脸模型。加载:
Ptr modelPCA = ();
modelPCA->load("MyFacePCAModel.xml");
预测:
int predictPCA = 0;
if (face.rows >= 120)
{
resize(face, face_test, Size(92, 112));
}
if (!face_test.empty())
{
predictPCA = modelPCA->predict(face_test);
}
openCV具备人脸识别的解决方案,但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文件夹拷贝到当前项目的存档目录中。
不要忘记连接好摄像头。
调用opencv训练好的分类器和自带的检测函数检测人脸人眼等的步骤简单直接:
1.加载分类器,当然分类器事先要放在工程目录中去。分类器本来的位置是在*\opencv\sources\data\haarcascades(harr分类器,也有其他的可以用,也可以自己训练)
2.调用detectMultiScale()函数检测,调整函数的参数可以使检测结果更加精确。
3.把检测到的人脸等用矩形(或者圆形等其他图形)画出来。
1.介绍Introduction
从OpenCV2.4开始,加入了新的类FaceRecognizer,我们可以使用它便捷地进行人脸识别实验。本文既介绍代码使用,又介绍算法原理。(他写的源代码,我们可以在OpenCV的opencv\modules\contrib\doc\facerec\src下找到,当然也可以在他的github中找到,如果你想研究源码,自然可以去看看,不复杂)
目前支持的算法有
Eigenfaces特征脸()
Fisherfaces ()
LocalBinary Patterns Histograms局部二值直方图 ()
下面所有的例子中的代码在OpenCV安装目录下的samples/cpp下面都能找到,所有的代码商用或者学习都是免费的。
1.2.人脸识别Face
Recognition
对人类来说,人脸识别很容易。文献[Tu06]告诉我们,仅仅是才三天的婴儿已经可以区分周围熟悉的人脸了。那么对于计算机来说,到底有多难?其实,迄今为止,我们对于人类自己为何可以区分不同的人所知甚少。是人脸内部特征(眼睛、鼻子、嘴巴)还是外部特征(头型、发际线)对于人类识别更有效?我们怎么分析一张图像,大脑是如何对它编码的?David Hubel和TorstenWiesel向我们展示,我们的大脑针对不同的场景,如线、边、角或者运动这些局部特征有专门的神经细胞作出反应。显然我们没有把世界看成零散的块块,我们的视觉皮层必须以某种方式把不同的信息来源转化成有用的模式。自动人脸识别就是如何从一幅图像中提取有意义的特征,把它们放入一种有用的表示方式,然后对他们进行一些分类。基于几何特征的人脸的人脸识别可能是最直观的方法来识别人脸。第一个自动人脸识别系统在[Kanade73]中又描述:标记点(眼睛、耳朵、鼻子等的位置)用来构造一个特征向量(点与点之间的距离、角度等)。通过计算测试和训练图像的特征向量的欧氏距离来进行识别。这样的方法对于光照变化很稳健,但也有巨大的缺点:标记点的确定是很复杂的,即使是使用最先进的算法。一些几何特征人脸识别近期工作在文献[Bru92]中有描述。一个22维的特征向量被用在一个大数据库上,单靠几何特征不能提供足够的信息用于人脸识别。
昨天刚回答过,修改下错别字放上来了。
不知道你说的人脸识别是识别出来是某个人还是只是在图像中检测出人脸。
刚用opencv完成对自己的人脸识别,但是还需要继续优化。说一下大致步骤吧:
1、首先就是数据的准备,你要从网络上下载一些人脸库,后面用来训练人脸识别模型。人脸检测模型opencv是自带的,但是识别模型需要自己训练。下载人脸库之后需要对人脸进行标记,这是一个繁琐的工作,不过网上有脚本或者自己写个程序简化工作量。
2、把数据标记好之后就是opencv的事情。训练的函数非常简单。只有下面这三句:
Ptr<FaceRecognizer> model = ();
model->train(images, labels);
model->save("MyFacePCAModel.xml");
3、然后打开摄像头进行人脸检测,就是框出人脸的位置。人脸检测模型是opencv自带的。
CascadeClassifier cascade;
cascade.load("haarcascade_frontalface_alt.xml");
这是加载的方法。
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、然后就是对检测到的人脸进行识别了,用我们刚才训练好的人脸模型。加载:
Ptr<FaceRecognizer> modelPCA = ();
modelPCA->load("MyFacePCAModel.xml");
预测:
int predictPCA = 0;
if (face.rows >= 120)
{
resize(face, face_test, Size(92, 112));
}
if (!face_test.empty())
{
predictPCA = modelPCA->predict(face_test);
}
如果预测结果等于标记结果,说明识别正确。
大致流程就这样了,如果你对opencv有了一定的了解,应该能看懂了。
openCV具备人脸识别的解决方案,但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文件夹拷贝到当前项目的存档目录中。
不要忘记连接好摄像头。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:2.584秒