Mac上的人脸跟踪软件(在构建相机中)

时间:2012-05-29 12:42:41

标签: macos opencv camera

我想要一种跟踪用户随着时间的推移观看屏幕的方法。

E.g。在正常使用中,用户在屏幕上观看的确切时间是多少。

我想知道哪些创新想法或预先存在的软件可以让我这样做。

因此,对于我看到的更详细的方式,会有一些容忍度,例如:与屏幕的距离,头部与屏幕的角度,将被视为与显示器“啮合”。如果使用相当于mac book pro的相机来跟踪它,那么它将在文本文件/键值中记录一个时间戳和布尔值,用于打开程序的每一秒。

任何人都有这方面的经验吗?

4 个答案:

答案 0 :(得分:6)

你可以在这里找到一个好的起点:http://code.google.com/p/ehci/

这是一款基于OpenCV的软件,可跟踪头部并检测其方向。这是开源。

答案 1 :(得分:3)

已经实施了面部识别器(并且已经使用标记进行了训练),例如在OpenCV中。我建议你先从跟踪面孔开始。一旦你有一个强大的facetracker,你就可以生成输出,告诉你一个人看着屏幕的时间等等。

稍后您可以添加改进。一旦检测到面部,您可以尝试识别人脸分析面部像素。

另一条线是识别脸部的部分,如嘴巴,眼睛,鼻子,眉毛......

如果你可以追踪脸部和脸部的部位,你可以尝试识别面部表情模式,如幸福,悲伤等。

答案 2 :(得分:1)

Face.com有一个重新定义面孔的解决方案。那么只需抓住相机输入并将其发送到他们的服务器我猜?

答案 3 :(得分:1)

我使用OpenCV构建了一个人脸检测系统,可以看到结果here

我使用的方法是haarTraining的两个单独使用,内置OpenCV分类器。我使用名为haarcascade_frontalface_default.xml的分类器来查看用户是否正在观看屏幕以及haarcascade_profileface.xml以查看用户是否正在向外看。以下代码可以帮助您开始使用openCV和C ++。

CvHaarClassifierCascade *cascade_face;
CvMemStorage            *storage_face;
CvHaarClassifierCascade *cascade_profile;
CvMemStorage            *storage_profile;

//profile face
storage_profile = cvCreateMemStorage( 0 );
cascade_profile = ( CvHaarClassifierCascade* )cvLoad( "haarcascade_profileface.xml", 0, 0, 0 );
cvHaarDetectObjects( frm, cascade_profile, storage_profile, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING);

//frontal face
storage_face = cvCreateMemStorage( 0 );
cascade_face = ( CvHaarClassifierCascade* )cvLoad( "haarcascade_frontalface_default.xml", 0, 0, 0 );
cvHaarDetectObjects( frm, cascade_face, storage_face, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING);

//detect profiles
CvSeq *profile = cvHaarDetectObjects(img,cascade_profile, storage_profile, 1.1,3,0,cvSize( 20, 20 ));

for( i = 0 ; i < ( profile ? profile->total : 0 ) ; i++ ) {
    CvRect *r = ( CvRect* )cvGetSeqElem( profile, i );
    //draw rectangle here, or do other stuff
}

//detect front
CvSeq *faces = cvHaarDetectObjects(img,cascade_face, storage_face, 1.1,3,0,cvSize( 20,20 ));

for( i = 0 ; i < ( faces ? faces->total : 0 ) ; i++ ) {
    CvRect *r = ( CvRect* )cvGetSeqElem( faces, i );
    //draw rectangle here, or do other stuff
}