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

Я пытался обнаружить и распознать лицо с помощью алгоритма 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");

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

0

Решение

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

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

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

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

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

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

другое объяснение, чтение Вот, в том, что:

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

cv::initModule_contrib()

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

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

что дает результат прогноза и, следовательно,.

0

По вопросам рекламы [email protected]