Система подсчета людей
Я хочу разработать "Систему подсчета людей" с использованием OpenCV (или Emgu CV).
Пожалуйста, объясните мне, как реализовать или привести некоторые примеры или проекты с открытым исходным кодом.
(Я проделал некоторую работу: извлекая diff, а затем threshold, чтобы удалить фон, используя историю движения и тому подобное; все еще нет хороших результатов.)
Редактировать 1: Я рассчитываю на большой поток людей (дюжина из них может пройти одновременно).
Изменить 2: должно быть не менее 80% точности. Люди идут через дверь шириной почти 5 метров. Проблема в том, что у меня нет контроля над положением или углом камеры. Камера кричит место с расстояния 10 метров на высоте 2,5 метров.
Спасибо
6 ответов
Если вы называете систему подсчета людей системой, которая подсчитывает людей, находящихся в комнате, то я рекомендую вам реализовать аппаратное обеспечение с помощью микроконтроллера с двумя лазерами (обычные игрушки для лазеров работают) и двумя фоторезисторами. Для микроконтроллера я рекомендую использовать Arduino. затем создайте приложение на C#, имеющее объект SerialPort и считывающее данные, которые arduino отправляет через USB. Arduino отправит 1 для "кто-то вошел в комнату" и 0 для "кто-то вышел из комнаты", например. Статистика может быть легко сделано в C#.
Сайт Arduiono: здесь
Фоторезистор за 1 доллар: здесь
Это решение намного дешевле и проще в реализации, чем использование камеры с довольно хорошим качеством.
Надеюсь, я тебе помог.
Проверьте пешеходный детектор HOG, который поставляется с последними версиями OpenCV (>= 2.2).
Увидеть modules/objdetect/src/hog.cpp
а также samples/cpp/peopledetect.cpp
в источниках OpenCV. К сожалению, официальной документации пока нет.
Это поможет вам считать движущиеся вещи, в том числе людей: проект обнаружения движения на CodeProject
Являются ли люди единственным видом "сущностей" на сцене? Если это не так, заботитесь ли вы о том, чтобы рассматривать человека как нечто другое, что движется по сцене? Потому что, если это так, вы можете просто считать капли, которые приходят или выходят со сцены. Это может звучать немного наивно, но я возьму какое-то движущееся изображение, сгруппировав пиксели движения по расстоянию в кластерах. Ваша метрика расстояния может учитывать некоторые ограничения, такие как то, что люди будут "часто" стоять, так что пиксели в кластере должны группироваться вокруг некоторой линии регрессии (прямой линии, если камера выровнена по полу). Не должно быть необходимости отслеживать их на сцене, просто замечая, когда они входят или уходят, хотя у вас могут возникнуть некоторые проблемы, например, с людьми, которые самостоятельно входят в сцену и уходят парами или группами... Удачи:)
Я думаю, что если у вас плотная толпа людей с множеством окклюзий, вы должны использовать какой-то алгоритм машинного обучения, например, вы можете использовать неявную модель формы для функций.
Это действительно зависит от положения камеры. Предполагая, что вы можете получить фронтальные профили людей на изображениях:
Эта проблема в основном обнаружение и распознавание лица.
Есть много способов найти лица, но с этим подходом я немного знаком.
Для распознавания лица нужно сделать сегментацию изображения по тону цвета кожи. Это позволит извлечь области кожи. [Руки, грудь (для тех, кто носит V-образные топы), лицо, ноги и т. Д.) Затем вам нужно будет выровнять профили областей кожи по профилю ваших тренированных лиц.
[Вам нужно будет использовать Eigenfaces, чтобы создать общий профиль того, как выглядит лицо]
Если область кожи выравнивается и не удаляется слишком далеко от профиля, то это считается лицом. После подтверждения лица добавьте его в хранилище данных eigenfaces [для распознавания]. Чтобы сохранить обработку, вы можете рассмотреть возможность ограничения области поиска, если вы ищете предыдущее лицо. [Учитывая частоту кадров и последний раз, когда человека видели]
Если вы имеете в виду "поток толпы", я думаю, вы просто имеете в виду плотность лиц в толпе.
Теперь вы подтвердили, что движущийся объект на видео - это человек. Теперь вам просто нужно это отметить, а затем убедиться, что вы больше не считаете их новым человеком.
Этот подход: действительно зависит от вашей способности определять области лица. Это может не сработать, если люди на видео смотрят вниз, не соответствуют профилю обученных данных и т. Д. Также это может произойти, если человек надевает солнцезащитные очки в видео. [Вероятно, будет считаться "новым лицом"]