Closed Pastor closed 9 years ago
Андрей, я обновил свои алгоритмы, посмотрел твои правки, спасибо, так лучше. Ветку evaluation удалил. В общем, мою часть можно тестировать уже. Хочу ещё расчёт расстояния между глазами добавить, но для этого мне нужны дополнительные инструменты. По этому поводу есть вопросы к тебе. Вот смотри в plugin.cpp в функции:
INT
ProcessFrame(VideoPluginFrameContext *frameContext)
{
cv::Mat mat = cv::cvarrToMat(frameContext->frame);
if (frameContext->seqFaces != nullptr && frameContext->seqFaces->total > 0) {
auto rect = reinterpret_cast<CvRect *>(cvGetSeqElem(frameContext->seqFaces, 0));
auto realRect = cv::Rect(rect->x, rect->y, rect->width, rect->height);
}
real contrast = __calculateGlobalContrast(mat);
real sharpness = __calculateSharpness(mat);
real snr = __calculateSNR(mat);
real eyeDistance = __calculateEyesDistance(mat);
return TRUE;
ты пишешь что realRect это область лица, вот только проблема в том что это прямоугольник охватывающий лицо, т.е. только размеры и координаты прямоугольника, лица внутри нет (нет пикселей изображения). Для того, чтобы дальше искать положение глаз нужен объект типа cv::Mat. Понимаешь о чём я? Нужно после того как ты нашёл координаты прямоугольника охватывающего лицо создать новый объект, например так:
cv::Mat face(frame, faceRect) ;
и уже этот face мне в плагин передавать. Это ещё не всё (, для поиска глаз нужны классификаторы типа cv::CascadeClassifier, для правого и левого глаза (2 штуки то-есть). И в них нужно перед вызовом поиска загрузить файлы с шаблонами признаков, вызвать CascadeClassifier::load(...). Так вот, как по твоему, где эти объекты лучше создать и где вызывать load()? Мне бы было удобно, если бы я имел возможность работы с ними в модуле plugin.cpp.
По поводу первого. Система плагинов на то и система плагинов, чтобы покрывать некий обобщенный функционал. Поэтому я в плагин не смогу передавать cv::Mat лица, а только координаты - поэтому cv::Mat face(mat, realRect);
надо будет дописать в твой плагин и работать с ним.
По поводу второго. Для работы мы можем хранить пользовательские данные и инициализировать их в начале нашей работы. Давай я не сегодня-завтра добавлю код для загрузки haar глаз
Понятно, а я сразу не догадался. Для глаз в качестве файлов шаблонов нам подойдут haarcascade_mcs_lefteye.xml и haarcascade_mcs_righteye.xml, а вызов для поиска глаз такой подойдёт:
m_leftEyeClassifier.detectMultiScale( topLeftPartofFace, v_eyes, 1.05, 11, cv::CASCADE_FIND_BIGGEST_OBJECT, cv::Size(10,10));
Слил ветки. Надо проверить сборку. Также в плагине описано получение области лица