2013-03-11 67 views
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). 
} 
+0

我看到你使用的是舊的OpenCV API,有什麼具體原因嗎?您是否成功使用OpenCV進行情感檢測? – 2013-08-02 15:57:53

回答

6

我使用卡羅林斯卡定向情緒面孔(KDEF)照片,爲學術研究項目中的代碼。有關數據集的信息請參見http://www.emotionlab.se/resources/kdef

請注意,您可能需要對圖像進行裁剪,調整大小,居中,拉直和標準化,以便在OpenCV中使用它們。一旦做好了準備,所有的OpenCV2 FaceRecognizer類函數都可以很好地處理圖像。

至於如何做面部表情識別:沒有標準的方法存在。首先閱讀FaceRecognizer文檔並完成教程。對於它的價值:我發現使用局部二元模式直方圖可以產生最準確的結果。