Pastor / videotools

Проверка качества видео файла
1 stars 0 forks source link

Отработка взаимодействия #2

Closed Pastor closed 9 years ago

Pastor commented 9 years ago

Слил ветки. Надо проверить сборку. Также в плагине описано получение области лица

pi-null-mezon commented 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.

Pastor commented 9 years ago

По поводу первого. Система плагинов на то и система плагинов, чтобы покрывать некий обобщенный функционал. Поэтому я в плагин не смогу передавать cv::Mat лица, а только координаты - поэтому cv::Mat face(mat, realRect); надо будет дописать в твой плагин и работать с ним. По поводу второго. Для работы мы можем хранить пользовательские данные и инициализировать их в начале нашей работы. Давай я не сегодня-завтра добавлю код для загрузки haar глаз

pi-null-mezon commented 9 years ago

Понятно, а я сразу не догадался. Для глаз в качестве файлов шаблонов нам подойдут 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));