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

Nuzhny

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

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

  • Посещение

  • Days Won

    176

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


  1. У меня в папке с OpenCV есть _make. Там лежит файл opencv.vs2005.sln, который открываем 2005-й студией (или более поздней версией). В свойствах каждого проекта, которые отображаются в окне Solution Explorer'a выставляется "Multi threaded". Делается полная перекомпиляция "Rebuild solution". Из папки bin забираются необходимые dll.


  2. К примеру о каких объектах идет речь?

    К примеру возьмем функцию cvCanny, десяток потоков вызывают эту функцию, со своими данными (одновременно). Будут ли тут какие нибудь траблы?

    C cvCanny проблем не будет. Проблемы при многопоточности возникают, если в функции используются static переменные (не помню, есть ли аналог в Делфи), всевозможные глобальные состояния. В cvCanny же всё чисто.

    Так вот, когда вызыватся process через некоторе время сыпяться ексепшены из cxcore.dll ((

    Если расставить критические секции перед вызовом process(), то все нормально, но тк эта функция выполняется некотое время, другие потоки ждут, и получается не многопоточность, а последовательно... имхо

    Если говорить об архитектуре, то она у тебя не многопоточная именно из-за единой функции Process. Как правило, единая функция/объект-менеджер занимается только созданием/удалением объектов. Алгоритм примерно таков:

    1. Поток запрашивает о необходимости создания объекта/функции.

    2. Запрашиваемый объект/функция создаётся в менеджере, указатель или интерфейс передаётся потоку. Менеджер также хранит у себя данный указатель и идентификатор потока. Этот этап необходимо синхронизировать критическими секциями/мьютексами.

    3. Далее поток, минуя менеджер, работает с указателем/интерфейсом. Тут синхронизация не нужна.

    4. Когда поток своё отработал, то указатель обнуляется/интерфейс освобождается и менеджер удаляет его сам и убирает из своей таблицы. Данный этап также синхронизируется.

    На разных языках сделать такое можно с разными трудозатратами. Зачастую помогает автоматическая сборка мусора, всякие умные указатели в С++ или всё делать вручную.

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

    Про вылеты в cxcore трудно сказать. Я бы скомпилировал её с отладочной информацией и посмотрел в дебаггере место вылета и стек вызовов.


  3. Необходимо в свойствах твоего проекта в Release конфигурации C++ -> Code Generation -> Runtime library выставить "Multi threaded".

    Эти же действия проделать со всеми dll из OpenCV. Перекомпилировать их. Перекомпилировать свой проект.

    Поставлять свой exe и используемые dll из OpenCV.


  4. Всем привет! Кто ни будь программировал многопоточные приложения, с OpenCV?

    Какие подводные камни? Нормально ли сочетаются такие вещи как OpenCV и многопоточность?

    Проблем с многопоточностью не будет. Да и исходники открыты-то, можно самому убедиться: потоки лишние не создаются, локальный стек потока для внутренних целей также не используется (в отличие от той же Intel jpeg library, будь она неладна).

    Однако покотобезопасной, в классическом смысле этого слова, библиотека не является: обращения к одному объекту из разных потоков надо синхронизировать. Но это нормально, скрытые методы синхронизации не есть гут.


  5. Ну, где ж найти такую работу? :) Я бы с удовольствием устроился (конечно, если это не институт с <10K зарплатами).
    Контор много. Если живёшь в одной из столиц, то можно сходить на крупную выставку по безопасности (например, MIPS, Интерполитех и т.п.) и увидеть акул этого бизнеса вживую. Можно на сайтах выставок взять названия контор и целенаправленно пытаться к ним устроиться. В регионах разработчиков намного меньше, но они существуют.

    Полнофункциональную --- в каком смысле? Раньше (хотя бы 3 года назад), когда не было OpenCV и других открытых библиотек с реализациями AdaBoost, смесей гауссианов, фильтров Калмана и MCMC, было сложно. А сейчас, это даже бакалавр сделает.
    Это ты только про детектор движения говоришь. Сама система видеонаблюдения включает ещё множество функций. Плюс отдельную трудность составляет необходимость поддержки самого разнообразного оборудования, которое ещё и достать непросто. Например, какой-нибудь тепловизор за пол миллиона или поворотную камеру за миллион. Если же ориентироваться на мелких клиентов (аптеки, магазинчики), не требующих ничего, кроме 2-3 камер и архива, то тут рынок завален недорогими DVR-системами. Фиг пробьёшься. Да и китайцы, вроде, поставляют своё оборудование с бесплатным нехитрым ПО. Рынок уже вырос из детского возраста, пробиться непросто.

  6. Такая вот прелюдия... Давайте список требований к хорошей системе видеаналитики, буду на него ориентироваться :)

    Требования к детектору движения примерно такие:

    1. есть/нет движения в кадре;

    2. на кадре пользователем добавляются зоны детекции, появляются события детектирования движения в зонах;

    3. отсев помех (дождь, снег, теревья, трава, блики);

    4. устойчивость к дрожанию камеры;

    5. выделение объектов движения, отслеживание их перемещения (переход из зоны в зону, пересечение траекторией движения объектов пользовательских линий);

    6. детектирование оставленных, унесённых, перекидываемых через забор предметов;

    7. "сквозное" детектирование одного объекта на нескольких камерах;

    8. детекция движения на поворотной камере, на панорамном изображении с поворотной камеры;

    9. классификация объектов: человек, группа людей, автомобиль;

    10. анализ поведения: человек идёт, бежит, бродит туда-сюда, отклонился от допустимой траектории и т.п.;

    11. определение закрытия объектива, поворота и засветки камеры;

    12. интеграция с поворотными камерами: сопровождение объекта поворотной камерой, когда объект детектируется с видеоканала стационарной камеры, а также сопровождение только одной поворотной камерой - сама и детектирует, и ведёт.

    Плюс ко всему выдвигаются нехилые требования по быстродействию: любят некоторые люди на одном компе просматривать и анализировать одновременно, скажем, 12 видеоканалов с ip-камер с разрешением 768х576 + 25 fps. А их перед анализом ещё и разжать надо (а это h.263 или MJPEG какой-нибудь).

    Если говорить вообще о видеоаналитике, то, кроме детектора движения, необходима: автояркость, автоконтраст, деинтерлейсинг, распознавание лиц, распознавание авто и ж/д номеров. Зачастую требуется что-то специфическое: подсчёт въезжающих на территорию автомобилей или проезжающих вагонов, тревога при появлении подозрительных лиц на парковке.

    Систем, которые полностью удовлетворяют этим требованиям, я пока не видел.


  7. 2Nuzhny

    Ознакомился с возможностями. Насколько я понимаю - это "чёрный ящик", т.е. реализация закрыта?

    Да, закрыта. Хороших открытых детекторов днём с огнём не сыщешь. Например, на выставке Интерполитех (одна из крупнейших в России) в 2005-2006 гг. было тестирование детекторов систем видеонаблюдения, так многие просто слили.

    Написать хороший очень тяжело. Если хочешь, могу привести примерный список требований к видеоаналитике, который предъявляется к профессиональным системам.

    Автоматические системы видеонаблюдения есть во всех универах даже у нас, производителей тоже море, не особо перспективная задача, хотя полезная для изучения (трекинг, обучаемые детекторы, классификация).
    Да, их довольно много. Но сложность выхода на рынок определяется не только их количеством. В этой области для клиентов очень важна репутация производителя. Впрочем, полнофункциональную систему видеонаблюдения в одиночку написать просто нереально.

    Если же специализироваться только на детекторе движения, то шанс небольшой есть. Продавать его как библиотеку, как продаются библиотеки для распознавания лиц, авто и ж/д номеров и т.п. Но тут веб-камерой никак не обойтись.

    В любом случае, при желании устроиться на работу по данной специальности твой опыт будет большим плюсом.


  8. на картинке в книге О'Релли, человек двигает руками и программа выдает сообщение, когда тот примет положение Y. Интересно, что человек и его руки там отображаются целиком (как бы залитыми), а не только границы движущихся объектов. Есть предположения, как этого можно добиться? Просто исходников этого примера там нет.

    Возможно, что это делается с помощью CamShift'a. В последнем OpenCV есть интересный пример camshiftdemo.exe. Как раз на эту тему.


  9. Обидненко конечно, что тему-то со статическими lib-ами так и не раскрутили. Надеюсь кто-то действительно поделится личными знаниями.

    А что не получается? Поменять в свойствах проекта тип с dll на lib?

×