Система распознавания и подсчета количества объектов

Введение

Системы компьютерного зрения все шире используются для решения повседневных задач в самых различных сферах, начиная от промышленности, заканчивая медициной. Алгоритмы распознавания образов позволяют идентифицировать объекты, определять их тип, предоставляют необходимую качественную и количественную информацию. Целью данного проекта было создание системы подсчета количества объектов (людей, машин), используя технологии компьютерного зрения.

Установка

Для начала нужно установить все необходимые библиотеки:

pip install opencv-contrib-python imutils matplotlib dlib

Библиотека dlib устанавливается достаточно долго, так что не стоит пугаться того, что процесс зависает.

Затем скачать программу из репозитория:

git clone https://github.com/mmkuznecov/objects_counting_from_clever.git

Примеры работы

Система может быть адаптирована для разных условий, съёмка может производиться как из статичного положения:

Так и в динамическом полёте:

Использование

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

python count.py -o op.avi

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

python count.py -o op.avi -t car

Полный список распознаваемых объектов приведен ниже:

background, aeroplane, bicycle, bird, boat, bottle, bus, car, cat, chair, cow, diningtable, dog, horse, motorbike, person, pottedplant, sheep, sofa, train, tvmonitor

Итогом работы программы будет записанное видео с метками, отмечающими распознавание объектов и их номер, а также .png изображение, на котором показана информация о времени записи видео, количестве распознанных объектов в разное время.

По вопросам пишите в Telegram @mmkuznecov.

Если имеется настроенная система HD-Link для передачи видео в хорошем качестве на большие расстояния, можно использовать следующие скрипты для обработки поступающего видео.

Для установки и настройки оборудования можно обратиться к документацииopen in new window. Там можно найти подробную информацию о настройке конфигурации, а также ссылку для скачивания образа для Raspberry Pi. Подключиться к GroundPi можно либо по Ethernet, либо по Wi-Fi, предварительно настроив в образе соответствующие параметры подключения. Во втором случае, после подключения к питанию GroundPi, должна появиться сеть Open.HD. Пароль для подключения к ней wifiopenhd

Для поштучного подсчета

Для запуска этой версии необходимо скачать программу из репозитория:

git clone https://github.com/mmkuznecov/HD_Link_counting.git

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

pip install -r requirements.txt

Перед тем, как запускать программу, надо убедиться, что ПК связан с GroundPi по Ethernet или Wi-Fi.

Если работать из под операционной системы Windows, чтобы запустить работу программы, достаточно дважды кликнуть по файлу run.bat.

На обработанных кадрах отображается количество распознанных с начала работы объектов (Total), а также количество объектов в конкретном кадре (Objs on frame).

Пример работы:

На изображении есть еще один параметр - Status, но он был убран.

Для обработки больших групп людей

Скачиваем программу из репозитория:

git clone https://github.com/mmkuznecov/HD_Link_crowd.git

Аналогичным образом устанавливаем все необходимые модули через requirements.txt, проверяем подключение, запускаем программу. Также надо будет скачать модельopen in new window и поместить ее в папку.

Через определенные промежутки времени, программа сохраняет снимки, полученные с камеры, при этом обрабатывет их и выводит данные о количестве людей.

Пример работы:

Оригинал изображения:

Тепловая карта плотности скопления людей:

В итоге получается примерно 1562 человека: