2013-12-17 92 views
0

我試圖通過LBPH算法檢測並識別人臉。對於這一點,我想下面的例子:openCV識別拋出異常(LBPH算法)

Mastering OpenCV Chapter 8 FaceRecognition

代碼運行併成功地適用於Eignefaces費舍爾但是一旦LBPH算法承認給出了一個例外。我無法弄清楚。唯一的例外是:

OpenCV Error: Bad argument (no parameter 'eigenvectors' is found) in unknown function, file "..\modules\core\src\algorithm.cpp" line 882. 

在直線882,

CV_Error_(CV_StsBadArg, ("No parameter '%s' is found", parameter ? parameter : "<NULL>")); 

上面一行是以下行從而導致該異常

Mat eigenvectors = model->get<Mat>("eigenvectors"); 

所以稱爲後,我究竟做錯了什麼?請高手來救我。謝謝

回答

0

OpenCV Forum張貼同樣的問題後,我知道問題出在我的示例代碼中。有些部分不適用於LBPH算法。該行低於:

Mat reconstructedFace; 
reconstructedFace = reconstructFace(model, preprocessedFace); 
if (m_debug) 
    if (reconstructedFace.data) 
     imshow("reconstructedFace", reconstructedFace); 

// Verify whether the reconstructed face looks like the preprocessed face, otherwise it is probably an unknown person. 
double similarity = getSimilarity(preprocessedFace, reconstructedFace); 

上面的代碼行是適用於特徵臉和費舍爾,我不知道!評論那些行代碼後,我只需調用

identity = model->predict(preprocessedFace); 

這給預測結果,因此。

0

如何定義yout算法?

如果你想人臉檢測,你必須用這種方式來定義模型:

const char* recAlgorithmEigenfaces = "FaceRecognizer.Eigenfaces"; 
Ptr<FaceRecognizer> model; 
model = Algorithm::create<FaceRecognizer>(recAlgorithmEigenfaces); 

可選,你必須檢查模型:

if (model.empty()) { 
/* throw exception */ 
} 

然後訓練你的模型..

編輯

另一種解釋,讀here,是t帽子:

[..]人臉識別算法都可以通過在OpenCV中的的contrib模塊 FaceRecognizer類。由於動態鏈接,您的程序可能鏈接到 contrib模塊,但它實際上並未在runtinme中加載(如果是 認爲不需要)。所以建議試圖訪問FaceRecognizer算法前致電

​​

功能。該 功能只能從OpenCV的V2.4.1,所以它也保證了 面部識別算法在 至少提供給您的編譯時間[..]

+0

是的,我完全按照你所說的去做。不同的是我寫了'FaceRecognizer.LBPH'。 – sarwar026

+0

你確定該文件存在嗎?嘗試給出完全絕對路徑(例如:/home/test/opencv/FaceRecognizer.Eigenfaces) –

+0

實際上,'train()'部分對我來說可以。問題是當代碼嘗試通過在函數Mat reconstructFace(const Ptr model,const Mat preprocessedFace)中使用'model'和'preprocessedFace'來重構一個人臉' – sarwar026