Readme (English version is below)


Общее описание решения

Проект представляет собой web-сервис с возможностью загрузки видео, а так же его обработкой для дальнейшего добавления статистики в общую базу данных, на основе которой строятся различные графики/гистограммы/heat-map'ы. Пример дэшборда:



Мы разделяем камеры на 2 типа: "входные" и "внутренние".
По "входным" камерам считается общая загруженность парка в определенный промежуток времени, а так же статистика по вошедшим/вышедшим людям с определенными атрибутами. На данном этапе мы различаем пол и возраст человека, а так же имеет ли он следующий инвентарь: велосипед, скейтборд или детскую коляску; так же проверяется, пришел ли человек с домашним животным кошки или собаки. "Внутренние" камеры используются для подсчета загруженности конкретной зоны, которая покрывает данная камера в конкретный момент времени. В данный момент статистика считается каждую минуту. Эта статистика используется для создания heat-map.

В основе решения лежит модель "detectron2" до обученная на детекции колясок. Трекинг людей на "входных" камерах производится с помощью вышеупомянутой модели, а так же косинусного расстояния между векторами боксов людей.
Пример работы модели для типа камеры "входная": Ссылка на google disk
Пример работы модели для типа камеры "внутренняя": Ссылка на google disk

Гайдлайн по работе с сервисом

Для того чтобы поднять наше решение необходимо в дирректории с проектом ввести команду
docker-compose up -d
После поднятия docker-compose пользователю будут доступны два сервиса:
host_ip:50182 - metabase
host_ip:50024 - сайт для загрузки видео

Работа с metabase

При первом входе в metabase вам нужно будет авторизироваться, для авторизировации используете следующие почту и пароль:
mail: user@test.com
password: test12345
После успешной авторизации вы попадите на главную страницу metabase, где вам будут доступны два дэшборда (с реальными и сгенерированными данными), а так же сама база данных.



Работа с сайтом

Для загрузки видео на сайте:
1. Перейдите во вкладку Upload video
2. Нажмите на кнопку browse и выбирите нужное видео
3. Нажмите на кнопку Upload video

Формат входных данных

Для корректной работы сервиса при загрузке видео требуется соблюдать корректное название видео файла в виде
{id зоны}_{id камеры}_R_{YYYYMMDDHHMMSS}.mp4.
Пример правильного названия файла:
1_11_R_20211005130236.mp4.
Примеры неправильных названий файла:
1_11_R_211005130236.mp4 - год имеет формат YY, а не YYYY;
1_11_R_20211005130236.avi - некорректный формат видео.

На данный момент мы обрабатываем только те камеры, данные с которых были предоставлены заказчиком, а именно:
Камеры с id: 11, 12, 14, 31 являются входными, соответственно только записи с этих камер могут быть использованы для сбора общей статистики посещаемости парка
Камеры с id: 9, 15, 25, 32 являются внутренними и по ним будет считаться статистика только внутри их зоны
Если просто переименовать {id камеры} на представленный выше, в случае не соответствии этого id в реальности, результата так же не будет, так как зоны входа и выхода фиксированы (это было сделано в связи со статичностью камер).

Данные для тестирования

Решение тестировалось на предоставленном заказчиком датасете Ссылка на google disk.
Для удобства мы собрали несколько коротких записей (есть как тип "внутренний", так и тип "входные") с датой в одинаковый день, чтобы можно было оперативно протестировать работу сервиса Ссылка на google disk.

Замечание на счет скорости обработки

видео типа "внутренние" работают довольно быстро даже на CPU из-за особенности обработки видео, в то время как видео типа "входные" работают очень долго на CPU. Для примера: на обычной GPU 1 минута видео, при условии что на протяжении всего видео ряда имеются люди, обрабатывается за 1-2 минуты в зависимости от частоты подачи кадром модели (на самом деле можно и быстрее, но тогда сильно упадет качество), в то время как на CPU 1 минута будет обрабатываться ~50-60 минут в зависимости от процессора, поэтому стоит задуматься о покупке GPU (в просмотренном нами видео беседы заказчика с другой командой заказчик уже изъявил желание приобрести GPU, поэтому при внедрении проекта возникнуть проблемы со скоростью обработки не должно).

По вопросам можно обращаться @kullhuman или @lomonoshka (telegram)
Пример использования web-сервиса
Перезентация проекта

Readme


General description of the solution

The project is a web service wich helps to understand the park workload at any given timeframe. After uploading video, we processing it with our models and calculating different statistics. As the result you see a nice dashboard with various information about your park. Dashboard example:



We divide cameras into 2 types: "entrance" and "internal".
The "entrance" cameras are used to calculate the total workload of the park in a certain period of time, as well as statistics on entered / exited people with certain attributes. At this stage, we distinguish people on gender and age, and also does they have the following inventory: a bicycle, a skateboard or a pram; it is also checked whether the person has come with a pet (cat or dog). "Internal" cameras are used to calculate the workload of a particular area, which is covered by a given camera. At the moment, statistics on "internal" videos are calculated every minute. These statistics are used to generate the heat-map.

The solution is based on the "detectron2" model which was also trained with prams. Tracking of people on the "entrance" cameras is carried out using the above model, with help of cosine distance between the vectors of the boxes of people.
An example of model operation for the "entrance" camera type: Link to google drive
An example of model operation for camera type "internal": Link to google drive

Guide for working with the service

In order to start our service, you need to enter the command in the root directory of our project
docker-compose up -d
After docker-compose is started, two services will be available to the user:
host_ip: 50182 - metabase
host_ip: 50024 - web-site with readme and ability to upload videos.

Working with metabase

When you enter the metabase for the first time, you will need to log in, for authorization use the following mail and password:
mail: user@test.com
password: test12345
After successful authorization, you will be taken to the metabase main page, where you will have access to two dashboards (with real and generated data), as well as the database itself.



Working with the site

To upload a video on the site:
1. Go to the Upload video tab
2. Click on the browse button and select the desired video
3. Click on the Upload video button

Input data format

For the service to work correctly, when uploading a video, you must observe the correct name of the video file in the form
{zone id} _ {camera id} _R_ {YYYYMMDDHHMMSS} .mp4 .
An example of the correct file name:
1_11_R_20211005130236.mp4.
Examples of incorrect file names:
1_11_R_211005130236.mp4 - the year is in the YY format, not YYYY;
1_11_R_20211005130236.avi - invalid video format.

At the moment, we process only those cameras, the data from which were provided by the customer, namely:
Cameras with id: 11, 12, 14, 31 are entrance, respectively, only recordings from these cameras can be used to collect general statistics of park attendance
Cameras with id: 9, 15, 25, 32 are internal and statistics will be calculated for them only within their zone
If you just rename the {camera id} of another video to the one presented above, there will be no result, since the entry and exit zones are fixed.

Test data

The solution was tested on the customer-provided dataset Link to google drive .
For convenience, we have collected several short videos (there are both "internal" and "entrance" types) with a date on the same day, so that you can quickly test the service Link to google drive .

A note on processing speed

Videos of the "internal" type work quite fast even on the CPU due to the peculiarities of video processing, while "entance" videos take a very long time on the CPU. For example: on a regular GPU, 1 minute of video, where people moving throughout the entire video series, is processed in 1-2 minutes, depending on the frequency of the model's frame feed (in fact, it can be faster, but then the quality will drop dramatically), while on the CPU 1 minute will be processed ~ 50-60 minutes, depending on the processor, so we strongly recomend to think about buying a GPU (in the video we watched of the customer's conversation with another team the customer has already expressed a desire to purchase a GPU, therefore, when implementing the project, there should be no problems with the processing speed).

For questions, please contact @kullhuman or @lomonoshka (telegram)
Web service usage example
Project presentation