2013-12-17 94 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