【问题标题】:openCV recognition throws exception (LBPH algorithm)openCV识别抛出异常(LBPH算法)
【发布时间】:2014-01-05 07:50:37
【问题描述】:

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

Mastering OpenCV Chapter 8 FaceRecognition

代码在 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");

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

【问题讨论】:

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


    【解决方案1】:

    你如何定义你的算法?

    如果要检测人脸,必须这样定义模型:

    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 中可用,因此它还确保 人脸识别算法至少对您可用 编译时间 [..]

    【讨论】:

    • 是的,我完全按照你说的做。不同的是我写了FaceRecognizer.LBPH
    • 您确定该文件存在吗?尝试给出完整的绝对路径(例如:/home/test/opencv/FaceRecognizer.Eigenfaces)
    • 实际上,train() 部分对我来说还可以。问题是当代码尝试在函数Mat reconstructFace(const Ptr&lt;FaceRecognizer&gt; model, const Mat preprocessedFace) 中使用modelpreprocessedFace 重建人脸时
    • 那个目录下没有这个文件!但是也没有名为FaceRecognizer.Eigenfaces 的此类文件,但它正在工作。我在这里真的很困惑。那里应该有这样的文件吗?请给我一些链接,以便我清除它。谢谢
    • 看看编辑...也许你需要更新你的opencv版本(至少2.4.1)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-09-14
      • 2018-11-19
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      相关资源
      最近更新 更多