Opencv 2.4.2 代码解释-人脸识别

Posted

技术标签:

【中文标题】Opencv 2.4.2 代码解释-人脸识别【英文标题】:Opencv 2.4.2 Code Explanation-Face Recognition 【发布时间】:2012-07-06 12:44:32 【问题描述】:

我参考了OpenCV提供的文档制作了一个人脸识别程序,它可以识别多个人脸并且工作正常。在文档中,他们制作了椭圆来突出面部。我不明白的是他们如何计算椭圆的中心,他们计算如下

for( int i = 0; i < faces.size(); i++ )

   Point center(faces[i].x+faces[i].width*0.5,faces[i].y+faces[i].height*0.5);
   //more code follows drawing the ellipse

他们使用的面向量产生如下

face_cascade.detectMultiScale(frame_gray,faces,1.1,2,0|CV_HAAR_SCALE_IMAGE,cv::Size(30,30))

文档即程序在链接中给出

http://docs.opencv.org/doc/tutorials/objdetect/cascade_classifier/cascade_classifier.html

我想知道他们是如何计算椭圆的中心的,如果我想画一个矩形而不是圆形,我该怎么做?

【问题讨论】:

【参考方案1】:

检测到的人脸以一组围绕人脸的矩形返回。正如文档所说,输出是Vector of rectangles where each rectangle contains the detected object.

所以一个矩形由[ initial x, initial y, width, height ] 组成。所以你可以通过( x + width*0.5 , y + height*0.5 )找到它的中心。这个中心对于椭圆也是一样的。

如果要绘制矩形,请使用rectangle 函数。请参阅Documentation。

函数中的参数如下:

pt1 = ( x , y )

pt2 = ( x + width , y + height )

将画线椭圆改为以下线:

rectangle(frame,Point (faces[i].x,faces[i].y),Point (faces[i].x+faces[i].width, faces[i].y+faces[i].height),Scalar(255,0,255),4,8,0);

结果如下:

【讨论】:

【参考方案2】:

顺便说一句,OpenCV 2.4.2 包含人脸识别。下面是结合人脸检测(使用 cv::CascadeClassifier)和人脸识别(使用 cv::FaceRecognizer)的教程和完整源代码示例:

http://docs.opencv.org/modules/contrib/doc/facerec/tutorial/facerec_video_recognition.html

既然您要求进行人脸识别。它还展示了如何进行人脸检测,因此也可能很有趣。

【讨论】:

它不支持从视频中识别多个人脸的多个模型。如何为此修改此代码代码?一种天真的方法是维护一个人脸模型列表,但是,这似乎不是一种有效的实现方式。

以上是关于Opencv 2.4.2 代码解释-人脸识别的主要内容,如果未能解决你的问题,请参考以下文章

Opencv 2.4.2 代码解释-人脸识别

有没有可以同时进行多人脸识别的算法?

想做人脸识别的开发,有没有android的功能全的人脸识别SDK?

如何开发Java动态人脸识别

ios OpenCv的配置和人脸识别技术

我们公司要做人脸识别的考勤,哪里有免费的活体检测安卓版本SDK?可以识别真人的