我想要一種方式來跟蹤用戶在一段時間內看着屏幕。Mac上的臉部跟蹤軟件(內置攝像頭)
E.g.在正常使用中,用戶在屏幕上看到的確切時間是幾秒鐘。
我想知道哪些創新想法或預先存在的軟件會允許我這樣做。
因此,更詳細的方式,我看到它是會有一些容忍度例如距屏幕的距離,頭與屏幕的角度,這將被視爲與顯示器「接合」。如果使用mac book pro中的相機進行跟蹤,那麼它將在文本文件/鍵值存儲中記錄程序打開時每秒鐘的時間戳和布爾值。
任何有這種事情的任何經驗?
我想要一種方式來跟蹤用戶在一段時間內看着屏幕。Mac上的臉部跟蹤軟件(內置攝像頭)
E.g.在正常使用中,用戶在屏幕上看到的確切時間是幾秒鐘。
我想知道哪些創新想法或預先存在的軟件會允許我這樣做。
因此,更詳細的方式,我看到它是會有一些容忍度例如距屏幕的距離,頭與屏幕的角度,這將被視爲與顯示器「接合」。如果使用mac book pro中的相機進行跟蹤,那麼它將在文本文件/鍵值存儲中記錄程序打開時每秒鐘的時間戳和布爾值。
任何有這種事情的任何經驗?
你可以在這裏找到一個很好的起點:http://code.google.com/p/ehci/
它是一種基於OpenCV的一個軟件,跟蹤頭部和檢測它的方向。它是開源的。
Face.com有一個解決方案來重新面對面部。那麼只需抓住相機輸入並將其發送到他們的服務器,我猜?
似乎建議它只接受照片而不是視頻。現在我意識到視頻只是一系列照片,但看起來可能需要很多工作,以便隨着時間消除,併發送到API以獲得結果。 –
在OpenCV中有實現(並且已經用標記進行過訓練)的facetrackers。我建議你先開始跟蹤面孔。一旦你有一個強大的facetracker,並且你可以產生告訴多長時間一張臉一直在看屏幕,等等。
以後你可以添加改進。一旦檢測到人臉,您可以嘗試識別分析人臉像素的人。
另一條線是識別部分的臉,像嘴巴,眼睛,鼻子,眉毛......
如果你能追蹤臉和臉的組成部分,你可以嘗試識別面部表情模式,如快樂,悲傷等。
我已經建立了一個人臉檢測系統來做這樣的事情,一旦使用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
}
不幸的是,這似乎沒有爲Mac準備好。當然可以在iOS上工作,但理想情況下我想避免這種情況。 –
但它看起來確切地記錄我需要什麼。 –
您可以查看您需要的代碼。它的代碼有點混亂(一種Frankenstein軟件),但應該與iOS一起工作。 –