6

画面を見ているユーザーを経時的に追跡する方法が必要です。

たとえば、通常の使用では、ユーザーが画面を見ていた正確な秒数。

どんな革新的なアイデアや既存のソフトウェアがあれば、これが可能になるのだろうかと思っています。

したがって、私が見る方法の詳細については、画面からの距離、モニターに「関与している」と見なされる画面までの頭の角度など、いくつかの許容レベルがあります。これを追跡するために mac book pro が使用されたカメラの場合、プログラムがオンになった時間の 1 秒ごとにタイムスタンプとブール値をテキスト ファイル/キー値ストアに記録します。

この種のことを経験した人はいますか?

4

4 に答える 4

6

ここで良い出発点を見つけることができます: http://code.google.com/p/ehci/

頭を追跡し、その向きを検出する OpenCV ベースのソフトウェアです。オープンソースです。

于 2012-05-29T12:46:47.130 に答える
3

OpenCV などで実装されている (そして既にマーカーでトレーニングされている) フェイストラッカーがあります。最初は顔の追跡から始めることをお勧めします。堅牢な facetracker があれば、顔が画面を見ている時間などを示す出力を生成できます。

後で改善を加えることができます。顔を検出したら、顔のピクセルを分析して人物の認識を試みることができます。

もう 1 つの行は、口、目、鼻、眉などの顔のパーツを認識することです...

顔や顔のパーツを追跡できれば、喜怒哀楽などの表情パターンの認識を試みることができます。

于 2012-05-29T13:15:08.873 に答える
1

Face.comには、顔を再認識させるソリューションがあります。それで、カメラ入力を取得して、サーバーに送信するだけだと思いますか?

于 2012-05-29T12:45:08.253 に答える
1

OpenCV を使用して、このようなことを行う顔検出システムを構築しました。結果はこちらで確認できます。

そのとき私が使用した方法は、標準で組み込まれた OpenCV 分類器を使用した haarTraining の 2 つの別々の使用法でした。ユーザーが画面を見ているかどうかを確認するために 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
}
于 2012-05-30T07:57:34.803 に答える