![](/img/trans.png)
[英]Which algorithm is used to train/predict Opencv LBPH face recognizer?
[英]openCV recognition throws exception (LBPH algorithm)
我试图通过LBPH算法检测和识别人脸。 为此,我尝试了以下示例:
该代码可为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");
那么,我在做什么错呢? 请高手来救我。 谢谢
您如何定义算法?
如果要检测人脸,则必须以这种方式定义模型:
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.