openCV识别抛出异常(LBPH算法)

时间:2013-12-17 13:55:11

标签: c++ opencv computer-vision lbph-algorithm

我尝试通过LBPH算法检测和识别人脸。为此,我尝试了以下示例:

Mastering OpenCV Chapter 8 FaceRecognition

代码运行并成功运行 Eignefaces Fisherfaces ,但在识别 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");

那么,我做错了什么?请专家过来救我。感谢

2 个答案:

答案 0 :(得分:0)

你如何定义你的算法?

如果要检测面部,则必须以这种方式定义模型:

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

您可以选择检查模型:

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

然后训练你的模型......

修改

阅读here的另一个解释是:

  

[..]人脸识别算法可以通过   OpenCV的 contrib 模块中的 FaceRecognizer 类。由于动态链接,您的程序可能链接到   contrib模块但它实际上并没有加载到runtinme(如果它是   视为不需要)。所以建议打电话给

cv::initModule_contrib()
  

在尝试访问FaceRecognizer算法之前运行。该   功能仅适用于OpenCV v2.4.1,因此它也可以确保   人脸识别算法至少可供您使用   编译时间[..]

答案 1 :(得分: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);

以上代码行适用于我不知道的Eigenfaces和Fisherfaces!在评论这些代码行之后,我只需调用

identity = model->predict(preprocessedFace);

给出预测结果,因此。