0

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

掌握OpenCV第8章人脸识别

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

那么,我做错了什么?请高手来救我。谢谢

4

2 回答 2

0

你如何定义你的算法?

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

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

(可选)您必须检查模型:

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

然后训练你的模型..

编辑

在这里阅读的另一种解释是:

[..]人脸识别算法可通过 OpenCV 的contrib模块中的FaceRecognizer类获得。由于动态链接,您的程序可能已链接到 contrib 模块,但实际上并未在 runtinme 加载(如果认为不需要)。所以建议拨打

cv::initModule_contrib()

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

于 2013-12-17T14:11:20.027 回答
0

OpenCV 论坛上发布相同的问题后,我了解到问题出在我的示例代码中。某些部分不适用于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);

它给出了预测结果,因此。

于 2013-12-23T04:05:01.257 回答