Система подсчета посетителей

Я хочу разработать «Систему подсчета людей» с использованием OpenCV (или Emgu CV).

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

(Я проделал некоторую работу: извлек diff, а затем порог для удаления фона, используя историю движения и тому подобное; до сих пор нет хороших результатов.)

Редактировать 1: Я считаю большой поток людей (их может пройти десяток одновременно).

Изменить 2: точность должна быть не менее 80%. Люди проходят через дверь шириной почти 5 метров. Проблема в том, что я не могу контролировать положение или угол камеры. Камера орет место с расстояния 10 м на высоте 2,5 м.

Спасибо


person Kaveh Shahbazian    schedule 10.08.2011    source источник
comment
Некоторые моменты, которые вы, возможно, захотите уточнить: Насколько точной должна быть система? Что такое высокий поток людей? Означает ли это, что он рассчитан на 10 человек или это арка шириной 1 метр, через которую проходит много людей?   -  person Tipx    schedule 16.08.2011
comment
Спасибо за ваш комментарий. Я обновил свой вопрос.   -  person Kaveh Shahbazian    schedule 17.08.2011
comment
Вы так и не описали масштабы потока людей. О скольких людях мы говорим? Часто ли несколько человек заходят одновременно? Вы говорите, что ваша система все еще не дает хороших результатов, несмотря на различия с фоном. Можете ли вы описать, какие результаты вы наблюдаете и почему они проблематичны?   -  person Gravity    schedule 19.08.2011


Ответы (6)


Если вы называете систему подсчета людей системой, которая подсчитывает людей, находящихся в комнате, то я рекомендую вам реализовать аппаратное обеспечение с микроконтроллером с 2 лазерами (работают обычные лазерные игрушки) и 2 фоторезисторы. В качестве микроконтроллера я рекомендую вам использовать Arduino. И затем создайте приложение C #, которое имеет объект SerialPort и считывает данные, которые arduino отправляет через USB. Arduino отправит 1 для «кто-то вошел в комнату» и 0 для «кто-то вышел из комнаты», например. статистику можно легко сделать на C#.

Сайт Arduiono: здесь

Фоторезистор за 1 доллар: здесь

Это решение намного дешевле и проще в реализации, чем использование камеры довольно хорошего качества.

Надеюсь, я помог вам.

person Bosak    schedule 16.08.2011
comment
Спасибо; но я рассчитываю на большой поток людей. - person Kaveh Shahbazian; 16.08.2011
comment
Плотность не имеет значения, лазеры всегда реагируют. Опишите мне ваш проект более конкретно. Вы считаете людей, которые входят/выходят из комнаты через дверь или это что-то другое? - person Bosak; 16.08.2011
comment
Кстати, идея, которую я вам дал, это то, что я собираюсь сделать, потому что я также работаю над системой подсчета посетителей. Но для магазина, в котором есть 1 дверь, и люди почти всегда ходят один за другим. Если у вас есть прогресс или решение, пожалуйста, поделитесь это со мной. :) - person Bosak; 16.08.2011
comment
К сожалению, в моем случае люди не проходят через дверь, и это усложняет задачу :( - person Kaveh Shahbazian; 17.08.2011
comment
То есть вы будете реализовывать его с камерой и системой распознавания движения людей? - person Bosak; 17.08.2011
comment
Да; Я пытаюсь построить логическую связь между движениями людей (над которыми я работаю) и количеством людей. - person Kaveh Shahbazian; 17.08.2011
comment
Камера должна быть над дверью и смотреть прямо вниз для достижения наилучших результатов. Вы должны подсчитать движение группы пикселей. - person Bosak; 17.08.2011

Проверьте детектор пешеходов HOG, который поставляется с последними версиями OpenCV (> = 2.2).

См. modules/objdetect/src/hog.cpp и samples/cpp/peopledetect.cpp в источниках OpenCV. К сожалению, официальной документации по этому поводу пока нет.

person Martin    schedule 10.08.2011
comment
Спасибо; Я уже проверил HOG. Это не подходит для многолюдного потока и настолько непредсказуемо. - person Kaveh Shahbazian; 12.08.2011

Это поможет вам подсчитывать движущиеся предметы, включая людей: проект Motion Detection в CodeProject

person Nime Cloud    schedule 17.08.2011

Являются ли люди единственным видом «сущностей» на сцене? Если это не так, заботитесь ли вы о том, чтобы считать человека чем-то другим, движущимся по сцене? Потому что, если это так, вы можете просто посчитать капли, которые появляются или выходят из сцены. Это может звучать немного наивно, но я возьму какое-то движущееся изображение, сгруппирую пиксели движения по расстоянию в кластеры. Ваша метрика расстояния может учитывать некоторые ограничения, например, что люди будут «часто» стоять, поэтому пиксели в кластере должны группироваться вокруг какой-то линии регрессии (прямой линии, если камера выровнена по полу). Нет необходимости отслеживать их в сцене, просто замечая, когда они входят или уходят, хотя у вас могут возникнуть некоторые проблемы, например, с людьми, входящими в сцену сами по себе и выходящими парами или группами. .. Удачи :)

person Genís    schedule 18.08.2011

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

person mrgloom    schedule 15.11.2012

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

Эта проблема в основном заключается в обнаружении и распознавании лиц.

Есть много способов поиска лиц, но я немного лучше знаком с этим подходом.

Для обнаружения лица вам необходимо сделать сегментацию изображения по цвету тона кожи. Это позволит извлечь области кожи. [Руки, грудь (для тех, кто носит топы с V-образным вырезом), лицо, ноги и т. д.] Затем вам нужно будет выровнять профили участков кожи с профилем ваших тренированных лиц.

[Вам нужно будет использовать Eigenfaces, чтобы создать общий профиль того, как выглядит лицо]

Если область кожи выровнена и не слишком сильно отклоняется от профиля, то это считается лицом. Как только лицо будет подтверждено, добавьте его в хранилище данных собственных лиц [для распознавания]. Чтобы сэкономить на обработке, вы можете рассмотреть возможность ограничения области поиска, если вы ищете предыдущее лицо. [Учитывая частоту кадров и последний раз, когда человека видели]

Если вы имеете в виду «поток толпы», я думаю, вы просто имеете в виду плотность лиц в толпе.

Теперь вы подтвердили, что движущийся объект на видео — это человек. Теперь вам просто нужно отметить это, а затем убедиться, что вы больше не считаете его новым человеком.

Этот подход: На самом деле зависит от вашей способности обнаруживать области лица. Это может не сработать, если люди в видео смотрят вниз, не соответствуют профилю обученных данных и т. д. Также это может произойти, если человек надевает солнцезащитные очки во время видео. [Возможно, будет считаться «новым лицом»]

person monksy    schedule 20.08.2011