Jump to content
Compvision.ru

al072

Пользователи
  • Content count

    52
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by al072

  1. Добрый день! Подскажите пожалуйста как лучше реализовать обнаружение нескольких различных предметов на одном изображении? мы используем классификатор обнаружения лица "lbpcascade_frontalface.xml" и умеем обнаруживать лицо на изображении, и допустим у нас есть еще несколько различных классификаторов "собаки.xml", "кошки.xml", "сигареты.xml" и т.д. как можно реализовать обнаружение всех этих классификаторов на одном изображении одновременно ? какой алгоритм или подход лучше использовать? Программу реализуем на opencv 2.4.1 (C++) заранее большое спасибо всем кто откликнется.
  2. Спасибо господа! Понял куда нужно копать
  3. Analog video capture device

    Доброго времени суток! Господа прошу помочь выбрать устройство для преобразования аналогового видеосигнала в цифровой для использования в проекте opencv. Рассматриваю вот это устройство: http://s.aliexpress.com/ZZFnYvu6 Но судя по информации в интернете и на форуме opencv никому так и не удалось подружить этот граббер с opencv. Если кто-нибудь сталкивался с подобной задачей поделитесь опытом плиз.
  4. Analog video capture device

    Уважаемые форумчане! Откликнитесь плиз! Может не понятна суть вопроса?
  5. HBitmap to cvMat

    Добрый день! Спасибо за пример кода. Подскажите пожалуйста какой HDC нужно передавать в функцию и как его создать?
  6. Всем добрый день! Подскажите плиз с помощью каких средств можно сократить время цикла распознавания лиц? Если быть точнее, то необходимо оптимизировать работу функции model->predict(); При добавлении более 100 лиц в модель, время затрачиваемое на определение лица и присваивание метки увеличивается кратно 1 лицо 1 мс, таким образом получается что если искать совпадение в модели которая имеет порядка 200 лиц, в среднем на один цикл распознавания затрачивается 150 мс, из-за этого видеопоток начинает тормозить. 1) подскажите какой метод наиболее эффективно использовать? TBB, OpenMP, GPU или есть чтото более оптимальное? 2) можно ли распараллелить работу функции model->predict()? Модель создается с помощью createLBPHFaceRecognizer().
  7. Я это понимаю, просто нужна помощь в синхронизации потоков и совет по оптимизации обработки изображения. Также пока не понятно необходимо ли реализовывать очередь и поможет ли она ускорить процесс распознавания?
  8. Я бы с радостью загнал все в один поток и радовался жизни, но вот только не знаю каким образом оптимизировать самую прожерливую функцию которая обрабатывает входное изображение (как я ранее писал она занимает порядка 45 миллисекунд). Пробовал оборачивать эту функцию в #pragma omp parallel, но результатов это не дало только стало еще хуже.. Можете помочь с примером кода или чуть подробней расписать как реализовать очереди кадров? Если я правильно понял из ваших комментариев, то мне необходимо два потока, в одном потоке я получаю изображения с камеры и запихиваю их в очередь изображений и в этом же потоке я должен создать очередь для вывода изображений: 1) как сделать очередь изображений и очередь вывода и есть ли в этом смысл? Если функция proccessFrame в любом случае занимает не менее 45 миллисекунд, то следовательно очередь вывода будет пополняться не ранее чем через 45 миллисекунд. То есть никакой оптимизации по времени мы не получим правильно? 2) куда расставлять mutex? 3) как синхронизировать потоки? Извиняюсь за кучу вопросов, с потоками вообще раньше не работал.. Для реализации потоков прикрутил boost к проекту.
  9. Господа, подскажите плиз как правильнее реализовать работу потоков и оптимизировать работу программы. Имеется 4 основных процесса: 1) Получение изображения с камеры (занимает 2-3 миллисекунды); Полученное изображение записывается в cv::Mat Frame; 2) Обработка изображения (занимает 45 миллисекунд); Обработанное изображение записывается в cv::Mat processedFrame; 3) Распознавание занимает (от 5 - 40 миллисекунд в зависимости от колличества лиц и меток в базисе); 4) Вывод изображения на форму занимает (2 миллисекунды). Если запускать все четыре процесса паралленьно каждый в своем потоке, то получается что возникает необходимость синхронизировать 1,2,3,4 потоки последовательно, и смысл в многопоточности теряется. То есть пока не завершен 1 процесс получения кадра, нет смысла запускать 2 процесс обработки этого кадра, пока кадр не обработан, нет смысла выполнять функцию 3 распознавания и соответственно выводить изображение на форму 4. Подскажите каким образом можно оптимизировать работу потоков и как добиться сокращения времени работы цикла начиная от получения изображения до вывода его на форму? То есть изначально все четыре процесса 1,2,3,4 я запускал в одном потоке и это занимало 50-150 миллисекунд в зависимости от количества лиц и меток. Сейчас я запускаю эти 4 процесса каждый в своем потоке, но скорость вывода изображения на форму от этого не меняется, более того появляется еще больше геморроя с синхронизацией работы потоков..
  10. http://stackoverflow.com/questions/19857263/how-to-activate-c11-standard-in-visual-studio-2010 https://habrahabr.ru/post/173639/ Пишут что C++11 частично реализован в VS2010, и согласно таблицы сравнения версий. thread поддерживается начиная с 2012/2013. Вообщем boost мне в руки))
  11. Тестировал Eigen,Fisher, LBPH на 10 людях (по 30 лиц на каждого). Пробовал разные настройки threshold, при различной освещенностью, самый стабильный результат определения добился с помощью LPBH. А у вас какие результаты? какими алгоритмами пользуетесь? Я использую VS2010, #include <thread> такого хидера я не нашел, если я правильно понимаю то std::thread в VS2010 не доступен? То есть данная библиотека доступна начиная с VS2012 (поправьте если я не прав). Посмотрел код по ссылке на stackoverflow, думаю что-то подобное мне и нужно. Для того чтобы не было тормозов необходимо обрабатывать загрузку фреймов, обработку и определение в разных threads. То есть я так понимаю нужен threads pool который должен параллельно запускать 3 threads и синхронизировать их работу. Пытался реализовать этот механизм с помощью DWORD WINAPI, но не хватает познаний в многопоточном программировании. С boost раньше не работал, но надеюсь там будет проще это реализовать.. Если всетаки у кого есть примеры как сделать подобный механизм на WINAPI просьба поделитесь..
  12. В первую очередь спасибо за потраченное время на развернутый ответ! 1) С проблемой "плывет изображение" наконец удалось разобраться. Решение отписал в соответствующей ветке; 2) С openMP я понял что не все так просто как хотелось бы. Думал добавлю параллельные директивы и все залетает, но не тут то было. 3) Вместо EigenFace , в данный момент использую LBPH, на мой взгляд он более стабильно определяет дистанцию. Каким образом можно обновлять базис для LPBH? По такому же принципу как и Eigen? 4) Застрял на реализации ThreadPool. Может ктонибудь помочь разобраться как из основного потока DWORD WINAPI ThreadMain запускать отдельный поток для обработки predict()? И как синхронизировать эти потоки?
  13. Всем доброго времени суток! Столкнулся с проблемой. Тестирую код из книги Mastering OpenCV глава 8. И не пойму по какой причине видео с вебкамеры начинает тормозить (задержка примерно 3 сек) и искажаться через определенное время (10-30 сек) после запуска режима распознавания лица. То есть в режимах когда идет сбор лиц или просто режим определения, картинка не тормозит и не искажается, но как только включаю режим распознавания лица начинаются проблемы (файл прикрепил). 1) Пробовал запихать цикл распознавания в таймер. не помогло. 2) Пробовал запускать в отдельном потоке (выставлял разные Sleep(1-30)). не помогло. 3) Пробовал выводить изображение как через функцию imshow, так и на форму (MFC C++), тоже не дало результатов. 4) Утечка памяти замечена не была. Если кто-нибудь сталкивался с подобной проблемой, подскажите плиз как ее решить?
  14. Плывет изображение

    Может кому пригодиться! Победил проблему искажения изображения путем подбора кодеков (переустановил драйвера на видеокарту + поставил K-Lite Mega codec pack с настройками под ffmpeg). Также в настройках самой камеры понизил Key Frame interval с 60 до 30. Снизил BitRate до 512.
  15. В исходниках функции predict() не нашел никакого параллельного кода. Перестроил проект с флагом /openmp и добавил заголовок #include <omp.h>. Далее сравнил результаты работы функции: Для 150 лиц время работы составило: 20-25 милисекунд model->predict(preprocessedFace, label, confidence); Для 150 лиц время работы составило: 60-65 милисекунд #pragma omp parallel { model->predict(preprocessedFace, label, confidence); } То есть с использованием openMP стало еще хуже. В чем может быть проблема? Что делаю не так?
  16. Всем спасибо. Буду читать изучать тестировать. Результат сообщу.
  17. Ок. Покопаю исходники метода predict(). То есть если в исходниках метод не распараллелен, мне необходимо править исходники и перестраивать библиотеки и либы? Что тогда делает опция "WITH TBB" в CMake? Извиняюсь за кучу вопросов. Пока каша в голове.
  18. Ok. Как убедиться что tbb подключен к библиотеке? Если cv::parallel_for_ , доступен в пространстве имен cv, значит библиотека собрана с поддержкой TBB? Проще говоря в скачанной с офф сайта библиотеке OpenCV 2.4.11 уже есть поддержка TBB? Следующий вопрос каким образом распараллелить работу метода model->predict(newface,lables,distance); ? Допустим есть класс который работает с TBB: class Parallel_process : public cv::ParallelLoopBody { private: public: Parallel_process() virtual void operator()(const cv::Range& range) const { for(int i = range.start; i < range.end; i++) { } } }; Как с помощью этого кода распараллелить работу метода predict()? Спасибо.
  19. Nuzhny, понял. Как на счет TBB. Есть шансы? Поддержка TBB в opencv 2.4.11 есть по умолчанию или необходимо както подключать TBB дополнительно? Запустил конфигуратор CMake. и после конфигурации увидел поддержку OpenCL. Other third-party libraries: Use IPP: NO Use Eigen: NO Use TBB: YES (ver 4.4 interface 9002) Use OpenMP: NO Use GCD NO Use Concurrency NO Use C=: NO Use Cuda: NO Use OpenCL: YES OpenCL: Version: dynamic Include path: C:/Program Files/OpenCV 2.4.1/opencv/sources/3rdparty/include/opencl/1.2 Use AMD FFT: NO Use AMD BLAS: NO Значит ли это что есть шанс завести OpenCL или данная информация не о чем не говорит?
  20. Тип ЦП DualCore Intel Core i3 350M, 2266 MHz (17 x 133) Тип видеопроцессора Intel(R) HD Graphics (Core i3)
  21. У меня простойноутбук hp pavillion dv5 с Intel (Hd) Graphics. На такой встроенной слабой видеокарте возможно будет использовать OpenCL или CUDA?
  22. Плывет изображение

    Ок. Спасибо. Буду пробовать..
  23. Плывет изображение

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

    smorodov, не совсем понял что имеется ввиду под определением 1) инициализировать/апдейтить трекинг 2) что подразумевается под "назначаются метки трекам"? 3) как определяем что трек сорвался? Спасибо.
×