распознавание openCV генерирует исключение (алгоритм LBPH)

0

Я пытался обнаружить и распознать лицо через алгоритм LBPH. Для этого я попробовал следующий пример:

Освоение OpenCV Глава 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");

Итак, что я делаю неправильно? Пожалуйста, эксперты приходят и спасают меня. благодаря

Теги:
opencv
computer-vision
lbph-algorithm

2 ответа

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

который дает результат предсказания и, следовательно.

0

Как вы определяете алгоритм yout?

Если вы хотите обнаружить лицо, вы должны определить модель следующим образом:

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

При желании вы должны проверить модель:

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

А потом тренируйте свою модель..

редактировать

другое объяснение, читаемое здесь, заключается в следующем:

[..] алгоритмы распознавания лиц доступны через класс FaceRecognizer в модуле OpenCV Contrib. Из-за динамической компоновки возможно, что ваша программа связана с модулем Contrib, но на самом деле она не загружена в runtinme (если это было сочтено не обязательным). Поэтому он рекомендовал позвонить

cv::initModule_contrib()

перед попыткой доступа к алгоритмам FaceRecognizer. Эта функция доступна только в OpenCV v2.4.1, поэтому она также гарантирует, что алгоритмы распознавания лиц по крайней мере доступны вам во время компиляции [..]

  • 0
    Да, я делаю именно так, как вы сказали. Разница в том, что я написал FaceRecognizer.LBPH .
  • 0
    Вы уверены, что этот файл существует? попытайтесь указать полный абсолютный путь (например: /home/test/opencv/FaceRecognizer.Eigenfaces)
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню