繁体   English   中英

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

[英]openCV recognition throws exception (LBPH algorithm)

我试图通过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");

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

您如何定义算法?

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

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

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

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

然后训练您的模型。

编辑

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

[..]人脸识别算法可通过OpenCV的contrib模块中的FaceRecognizer类获得。 由于动态链接,您的程序可能已链接到contrib模块,但实际上并未在运行时加载(如果认为不是必需的话)。 因此,建议致电

cv::initModule_contrib()

尝试访问FaceRecognizer算法之前,请先执行功能。 该功能仅在OpenCV v2.4.1中可用,因此它还可以确保至少在编译时对面部识别算法可用[..]

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);

这样就给出了预测结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM