Перейти к содержимому
Compvision.ru

al072

Пользователи
  • Количество публикаций

    60
  • Зарегистрирован

  • Посещение

  • Days Won

    1

Сообщения, опубликованные пользователем al072


  1. Извиняюсь за глупый вопрос, но пока не могу понять каким образом разноцветные ползающие змейки связаны с вопросом распознавания лица? Посмотрел код, в частности класс CTracker. Каким образом его можно использовать для задачи распознавания лиц? Его можно использовать вместо model->predict()? 


  2. Всем добрый день! Подскажите плиз с помощью каких средств можно сократить время цикла распознавания лиц? Если быть точнее, то необходимо оптимизировать работу функции model->predict(); При добавлении более 100 лиц в модель, время затрачиваемое на определение лица и присваивание метки увеличивается кратно 1 лицо 1 мс, таким образом получается что если искать совпадение в модели которая имеет порядка 200 лиц, в среднем на один цикл распознавания затрачивается 150 мс, из-за этого видеопоток начинает тормозить.

    1) подскажите какой метод наиболее эффективно использовать? TBB, OpenMP, GPU или есть чтото более оптимальное?

    2) можно ли распараллелить работу функции model->predict()? Модель создается с помощью createLBPHFaceRecognizer().


  3. В 05.02.2016 at 14:23, Smorodov said:

    Вообще, последовательность должна быть несколько иной, нужно вынести за скобки тяжелые действия, такие как добавление лиц в базу и распознавание, повесить их на какие нибудь события.

    Как вариант предлагаю:

    1) Детектировать лица.

    2) Инициализировать/апдейтить трекинг.

    3) По событию (нажатие кнопки) добавление в базу.

    4) По событию (начало трека например), запускается поток по распознаванию трекаемых лиц, которое выполняется один раз. По результатам назначаются метки трекам. 

    5) Пока трек не сорвался не делаем лишних движений, просто трекаем. Очень маловероятно, что лицо сменится без срыва трека.

     

    smorodov, не совсем понял что имеется ввиду под определением

    1) инициализировать/апдейтить трекинг

    2) что подразумевается под "назначаются метки трекам"?

    3) как определяем что трек сорвался?

    Спасибо.


  4. На просторах интернета нашел описание что подобные проблемы могут быть вызваны неправильной работой ffmpeg в opencv. Попробовал пересобрать библиотеку без поддержки ffmpeg, не помогло. Помойму стало еще больше тормозить и проц грузить... Проблема остается открытой..


  5. Всем спасибо за коментарии. С камеры в (char**)&Frame изображение передается в формате YUYV422. Структура Frame включает в себя массив char data[0], в него собственно и записываются пиксели изображения.

    Подскажите пожалуйста как сделать следующую конвертацию:

    char data[0] (формат YUYV422) -> cv::Mat (формат BGR/BGRA) -> char data[0] (формат YUYV422)


  6. Добрый день господа! Помогите плиз. Дело в том что в стандартной библиотеке для ip камеры есть функция которая получает изображение в формате char**

    вот эта функция:

    GetVideo(handle, (char**)&Frame, &Len,fmt,&Speed);

    Мне необходимо сконвертировать изображение в cv::Mat, сделать обработку, и затем сконвертировать обратно в char**. Как это правильно сделать?

    Пробую вот так:

    cameraFrame = cv::Mat(h, w, CV_8UC1, *Frame->data);

    Но при выводе imshow("namewindow",cameraFrame); выводиться черный квадрат.. 


  7. Добрый вечер!

    1) Копаю проблему дальше.. Изображение плывет из-за следующих ошибок, в каком месте кода они возникают я не пойму, так как не могу их перехватить, но судя по всему ошибки возникают при чтении фрейма videoCapture >> cameraFrame; В проекте MFC я эти ошибки не вижу, но если запустить тот же самый код в консольном проекте, то в консольном окне в момент когда плывет изображение появляются ошибки (скриншоты прикрепил). Может ктонибудь сказать в чем может быть проблема?

    2) Nuzhny, я пишу проект в VS2010, там нет std::thread. есть варианты реализации очереди для более старой версии языка? Думаю что от проблемы с искажением изображения можно будет уйти без очереди потоков, если получиться разобраться из-за чего сыпятся ошибки и что они означают..

    Ошибка.jpg

    Ошибка2.jpg


  8.  

    Nuzhny, ваш совет помог сделать вывод изображения на форму намного стабильнее! В процессе когда идет распознавание лица перестало тормозить видео. Когда собираю до 100 лиц в коллекцию работает нормально, при 110-120 лицах изображение начинает плыть(  то есть добавляю три человека, на каждого человека по 30 лиц, запускаю распознавание, все работает. Затем добавляю 4-го человека и еще 30 лиц, и спустя определенное время (10-20 секунд) начинает опять плыть изображение.

     

    Еще странное значение выдается по fps камеры. В настройках самой камеры выставлено:

    15 fps, 1m bitrate, resolution 640x480, key frame interval 60

    Следующий код выдает значение fps = 90000.

    int fps = static_cast<int>(capture.get(CV_CAP_PROP_FPS));
    if (fps < 1)
    {
        fps = 25;
    }

    Мне пришлось вручную выставлять значение fps = 15 в коде, так как выдаваемое  функцией capture.get(CV_CAP_PROP_FPS) значение не реальное. Ведь fps не может быть 90000 правильно? Или я ошибаюсь?

    Когда в настройках камеры выставляю значение fps =25, изображение начинает плыть даже при простом выводе на форму, без распознавания. Не могу понять связь между тем, что до 100 лиц программа работает нормально, после 100 лиц начинает плыть. Разве 10-20 дополнительных лиц могут так задерживать процесс обработки изображения? И даже если бы начинались задержки, для этого и был добавлен код getTickcount() чтобы синхронизировать работу цикла с помощью автоматически регулируемого 

     if (cv::waitKey(waitTime) > 0)

    Может еще какие мысли у кого будут по данной проблеме?

     

     


  9. Вообщем начал исследовать проблему дальше и заметил следующее. Если на этапе сбора лиц для распознавания, собрать например 10-15 лиц на одного человека, то на этапе распознавания картинка не плывет. Если собрать 50 и более лиц, то на этапе когда включаю распознавание, начинаются описанные тормоза и искажение изображения. 

    Возможно функция predict начинает дольше искать соответствия и начинается рассинхрон.. Установка пакета кодеков (Mega K-lite kodec pack) c настройками по дефолту не помогла. Господа подскажите плиз в чем может быть проблема?


  10. Речь идет о кодеках на видеокарту ноутбука? Куда эти кодеки необходимо устанавливать? Или надо какимто образом их к проекту прикручивать?

    Пробовал методом исключения. 

    1. Режим сбора лиц. Работает нормально.

    2. Режим определения лиц. Работает нормально.

    3. В куске кода где идет распознавание лица начинаются проблемы. Где именно не могу диагностировать, так как программа не вылетает и какие либо явные ошибки не появляются. Сперва думал что проблемы в методе отрисовки изображения на форме, но потом начал тестировать стандартный imshow. результат такойже, изображение плывет. 

     

     


  11. Нет, если оставить просто вывод видео на экран с камеры, то работает быстро без проблем не тормозит. Но как только включается функция распознавания, начинаются проблемы. 

    Похоже на то, что проблема в камере ( я использую Foscam 9831P) и rtsp видеопоток (h264, 15 fps, 640x480, 1mb bitrate). Пробовал переключать на substream (mjpeg), но почемуто с mjpeg вообще начинаются жесткие тормоза, причем просто при выводе изображения без обработки.

    Когда использую встроенную в ноутбук web камеру, подобных проблем не возникает.

    Smorodov, если возможная проблема в кодеках, то в какую сторону копать?


  12. Всем доброго времени суток! Столкнулся с проблемой. Тестирую код из книги Mastering OpenCV глава 8. И не пойму по какой причине видео с вебкамеры начинает тормозить (задержка примерно 3 сек)  и искажаться через определенное время (10-30 сек) после запуска режима распознавания лица. То есть в режимах когда идет сбор лиц или просто режим определения, картинка не тормозит и не искажается, но как только включаю режим распознавания лица начинаются проблемы (файл прикрепил).

    1) Пробовал запихать цикл распознавания в таймер. не помогло.

    2) Пробовал запускать в отдельном потоке (выставлял разные Sleep(1-30)). не помогло.

    3) Пробовал выводить изображение как через функцию imshow, так и на форму (MFC C++), тоже не дало результатов.

    4) Утечка памяти замечена не была.

    Если кто-нибудь сталкивался с подобной проблемой, подскажите плиз как ее решить?

     

    Безымянный.jpg


  13. Smorodov, потестировал примеры которые вы привели по ссылке. Также сравнил их с примером из книги. По большому счету результаты распознавания одинаковы. В процессе выяснил, что наиболее корректно и надежно работает алгоритм бинарных хистограмм.

×