Доброе утро.
Мне хотелось бы узнать на сколько реально сделать вот такую вещь с помощью OpenCV
При разрешение например 1024х768 и 25-30 fps.
Это возможно сделать без тормозов и лагов с помощью OpenCV.
И как с технологической точки зрения вы оцените такой проект по трудозатратам?
И приблизительное время разработки, если есть знания C#, C++...
C уважением,
Андрей
Начну по порядку:
Извлечение из картинки местоположения людей
На видео люди (тёмные силуэты) бегают на фоне однородно окрашенного светлого поля.
Это сразу наталкивает на мысль, что достаточно запомнить изображение фона (без людей),
а затем вычесть его из изображения, в котором люди присутствуют, что бы получить
их силуэты (пятна). Этот способ хорош тем, что он позволяет найти фигуру человека,
даже если он замер и не двигается. Но у этого метода есть серьёзный недостаток - фон
обязательно должен быть однородным и люди тоже должны быть одеты во что-то однородно
окрашенное. Если фоновое изображения будет содержать какие либо текстуры, и/или люди
будут одеты во что-то пёстрое то этот метод работать не будет (а ещё освещение может
меняться в течения дня и то же ухудшить условия).
Нашел следующее видео автора ролика, и я, похоже, был прав.
Это алгоритм из семейства “Foreground extraction”:
Прослеживание
Проследить траекторию движения силуэта человека не сложно до тех пор, пока один человек
не зайдёт за другого человека (частичное или полное перекрытие силуэтов). И вот когда
их силуэты разойдутся, то, как определить кот из них кто? Похоже в данном случае,
только с помощью моделирования траектории движения силуэтов. Если известна траектория
движения каждого силуэта до момента "перекрытия", то можно просчитать "мнимую" траекторию
движения после перекрытия и постараться сличить траектории силуэтов с "мнимыми"
траекториями, когда они разойдутся. Соответственно если два товарища после дружеских
"обнимашек" вдруг решат разойтись в разные стороны (а не продолжить движения каждый
в свою сторону), то такой метод просто перепутает их друг с другом.
В общем, как и у любого другого метода, у метода продемонстрированного в ролике
имеются ограничения, и это не всегда будет работать так замечательно,
как продемонстрировано на видео.
>> И как с технологической точки зрения вы оцените такой проект по трудозатратам?
Сложно сказать, зависит от условий, в которых должен работать алгоритм
(исходная картинка с людьми - контраст, текстуры, освещение, угол съёмки).
>> И приблизительное время разработки, если есть знания C#, C++...
Нужно иметь достаточно солидный опыт работы с алгоритмами видеообработки,
что бы решить эту задачу (а не только знания C#, C++).
А возможно например сделать так:
Каждые 30 минут запрашивать новый фон, если в течение 2-5 секунд не меняется фон значит
это новая картинка для сравнения и если объект остается в объективе камеры больше 3 минут
в одном положение, то считать его фоном и сделать новый фон.
Ещё раз напомню, что всё зависит от начальных условий работы алгоритма.
Вас то, наверное, интересует автоматическая система видеонаблюдения
с прослеживанием людей гуляющих по улице. А тогда как можно в таких
условиях получить изображение фона? Попросить всех разойтись ненадолго?
Да и вообще, с фоном не всё так просто. Даже если в кадре ничего не происходит,
то изображение все равно от кадра к кадру изменяется (шум камеры, изменение освещённости).
Получается человека например в зеленой одежде в лесу будет невозможно распознать?
А вам при таких условиях, чисто зрительно, легко ли будет найти человека?
Соответственно для компьютера это практически невозможно, ну если конечно
компьютер не через тепловизионную камеру изображение просматривает (другие условия).
==========================================================================================================
Ну а теперь небольшое лирическое отступление
Посмотрел тут ещё видео о прослеживании людей, понравилось вот это, с “термоядерным синтезом” на спине
Похоже, у товарища в трусах источник быстрых нейтронов, совсем о здоровье не заботится