1

私は、ユーザーの顔と顔の特徴を追跡しているopencvライブラリを使用してコードに取り組んでいます。ウェブカメラから顔や目、唇などの機能をライブで検出することができました。検出された特徴から感情を抽出したいと思います。感情とそれをどのように行うことができるかを比較するために使用できる利用可能なデータセットがあるかどうか知りたいです。

これが顔検出のコードです

    CvRect detectFaceInImage(const IplImage *inputImg, const CvHaarClassifierCascade* cascade )
{
    const CvSize minFeatureSize = cvSize(20, 20);
    const int flags = CV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_DO_ROUGH_SEARCH;    // Only search for 1 face.
    const float search_scale_factor = 1.1f;
    IplImage *detectImg;
    IplImage *greyImg = 0;
    CvMemStorage* storage;
    CvRect rc;
    double t;
    CvSeq* rects;
    int i;

    storage = cvCreateMemStorage(0);
    cvClearMemStorage( storage );

    // If the image is color, use a greyscale copy of the image.
    detectImg = (IplImage*)inputImg;    // Assume the input image is to be used.
    if (inputImg->nChannels > 1) 
    {
        greyImg = cvCreateImage(cvSize(inputImg->width, inputImg->height), IPL_DEPTH_8U, 1 );
        cvCvtColor( inputImg, greyImg, CV_BGR2GRAY );
        detectImg = greyImg;    // Use the greyscale version as the input.
    }

    // Detect all the faces.
    t = (double)cvGetTickCount();
    rects = cvHaarDetectObjects( detectImg, (CvHaarClassifierCascade*)cascade, storage,
                search_scale_factor, 3, flags, minFeatureSize );
    t = (double)cvGetTickCount() - t;
    printf("[Face Detection took %d ms and found %d objects]\n", cvRound( t/((double)cvGetTickFrequency()*1000.0) ), rects->total );

    // Get the first detected face (the biggest).
    if (rects->total > 0) {
        rc = *(CvRect*)cvGetSeqElem( rects, 0 );
    }
    else
        rc = cvRect(-1,-1,-1,-1);   // Couldn't find the face.

    //cvReleaseHaarClassifierCascade( &cascade );
    //cvReleaseImage( &detectImg );
    if (greyImg)
        cvReleaseImage( &greyImg );
    cvReleaseMemStorage( &storage );

    return rc;  // Return the biggest face found, or (-1,-1,-1,-1).
}
4

1 に答える 1

6

私は教育研究プロジェクトのために、Karolinska Directed Emotional Faces (KDEF) の写真を使用しています。データ セットに関する情報は、http://www.emotionlab.se/resources/kdefで入手できます。

OpenCV で使用するには、おそらく画像のトリミング、サイズ変更、中央揃え、傾き補正、および正規化が必要になることに注意してください。適切に準備されると、画像はすべての OpenCV2 FaceRecognizer クラス関数で非常にうまく機能します。

表情認識の方法については、標準的なアプローチはありません。まず、FaceRecognizer のドキュメントを読み、チュートリアルを進めてください。価値のあること: ローカル バイナリ パターン ヒストグラムを使用すると、最も正確な結果が得られることがわかりました。

于 2013-05-17T18:33:51.540 に答える