- Введение
- Установка
- Иерархия файлов и папок
- Аргументы командной строки
- Примеры запуска системы распознавания через командную строку
- Описание выходных данных
- Тестирование
- Определение точности системы
- Схема работы системы (для понимания логики программы)
- Создание частотной heatmap (тепловой карты) нахождения автомобильных номеров
- Ссылки
Сервис распознает автомобильные номера на видео или с онлайн камер. Достаточно указать это в аргументах при запуске сервиса. Чтобы запускать сервис с использованием видеокарты (GPU) необходимо указать это в аргументах при запуске системы.
Сервис основан на базе NomeroffNet.
Проект NomeroffNet находится в постоянной разработке, поэтому советуем уточнять требования для его установки на их Github. Ниже приведены их требования на момент написания этой инструкции.
python >=3.6
opencv >=3.4
git clone https://github.com/ria-com/nomeroff-net.git
cd nomeroff-net
git clone https://github.com/youngwanLEE/centermask2.git
pip3 install torch==1.6
pip3 install PyYAML==5.3
pip3 install 'git+https://github.com/facebookresearch/detectron2.git'
pip3 install torchvision==0.7.0
pip3 install Cython
pip3 install numpy
pip3 install -r requirements.txt
Далее необходимо выйти из директории nomeroff-net и произвести установку данной системы:
cd ..
git clone https://github.com/AnnaVeller/detect-license-plates-python.git
Обратите внимание, если текущий проект будет установлен не в ту же директорию, что и nomeroff-net, то необходимо в файле ModelDetect.py указать верный путь к nomeroff-net.
Все файлы с кодом располагаются в корневом каталоге.
В папке video находятся видео, которые могут быть обработаны. Чтобы их использовать - необходимо указать одно из них в командной строке при запуске скрипта Runprocess.Py (см. раздел аргументы командной строки).
В папку car_numbers попадают обработанные видео. Там же создается новая папка одноименная с видео, которое было обработано. В неё помещаютсяtxt-файлы со списком распознанных номеров на видео, три картинки кадров для каждой машины и с этих же кадров вырезка таблички номера.
car_numbers/:
[название видео]_detect.mp4 - обработанное видео
car_numbers/[название_видео]/:
[название видео].txt - список номеров, найденных на видео
[название видео]_[номер в файле txt]_1.jpg - один из первых кадров, где найден номер
[название видео]_[номер в файле txt]_1_zone.jpg - табличка с номером с кадра выше
[название видео]_[номер в файле txt]_2.jpg - кадр с середины
[название видео]_[номер в файле txt]_2_zone.jpg
[название видео]_[номер в файле txt]_3.jpg
[название видео]_[номер в файле txt]_3_zone.jpg
Структура каталога nomeroff-net представлена кратко. Чтобы показать, какие дополнительные директории необходимо скачать с GitHub (Если вы шли по установке выше - они уже скачаны)
При запуске Runprocess.Py необходимо указать аргументы:
--video=test.mp4
Название файла видео из папки video или ссылка на онлайн камеру. По умолчанию test.mp4
--file=test.txt
Название файла, куда будет записаны координаты номеров (файлы сохраняются в папку car_numbers). По умолчанию [название видео].txt
--type=v или --type=s
Тип того, что было передано в --video. v-видео, s-стрим. По умолчанию видео
--sec=0.5
Количество секунд между захватом кадров для обработки. По умолчанию 0.5 секунд
--gpu=False или --gpu=True
Используется ли GPU. По умолчанию не используется
Основной файл, через который запускается вся система распознавания - это RunProcess.py.
python3 RunProcess.py --video=multy_mini.MOV --file=multy_mini.txt --type=v --gpu=False
Это будет аналогично из-за дефолтных настроек этому:
python3 RunProcess.py --video=multy_mini.MOV
python3 RunProcess.py --video=multy_mini.MOV --sec=0.5 --gpu=True
python3 RunProcess.py --video=[URL на камеру] --file=camera_online.txt --type=s --gpu=False
Чтобы остановить работу скрипта необходимо нажать Ctrl+c
Это видео, на котором указан номер, найденный на текущем кадре, итоговый номер, регион автомобиля.
Найденный номер на кадре может быть синего и голубого цвета:
Cиний номер означает, что такая комбинация символов может быть номером. Голубой обозначает обратное.
Синие номера, при помощи несложного алгоритма соединаются в один номер, который называется итоговым и выделен на каждом кадре красным:
Соответсвенно, с каждый кадром, накапливается информация по номерам и красный номер может меняться.
Обработанное видео имеет ту же длину, что и исходное. Однако fps (frames per second) отличается и равно 1/sec. Sec - параметр, переданный в командной строке.
Ниже на изображении ещё раз даны комментарии:
Файл содержит все номера, встреченные в видео. На первой строчке даны характеристики видео. Далее идет порядковый номер автомобильного номера и распознанный итоговый номер:
[Высота] [Ширина] [Название видео] [fps]
[порядковый номер] [автомобильный номер]
[порядковый номер] [автомобильный номер]
...
Для подсчета точности системы нам нужны скриншоты с номерами. Поэтому с каждого распознанного номера мы сохраняем три скриншота: в начале, середине и конце:
Для тестирования были подготовлены видео с КПП и переданы в данную систему. Ниже сделаны скриншоты с видео:
Для определения точности необходима ручная обработка. То есть разметка, что система определила правильно, что нет. Для этого есть три скрипта.
1. Сначала запускается AccuracyAsk.py
Аргумент --name
- это имя папки с видео = название видео без разрешения = файл со списком номеров без разрешения
python3 AccuracyAsk.py --name=multy_mini
В этом скрипте необходимо на каждый номер из списка выбрать: true/false/unknown:
-
true
(можно также написать t/1/yes/y ) - номер на картинке совпадает с номером в названии; -
false
(0/f/no/n) - не совпадает; -
unknown
(-1/?/unknown/x) - номер плохо различим
Так будут выглядеть картинки:
2. Затем можно быстро проверить свои ответы с AccuracyChecking.py
python3 AccuracyChecking.py --name=multy_mini
Этот скрипт сделан исключительно чтобы ПРОСМОТРЕТЬ быстро ответы. Для исправления необходимо открыть этот файл и вручную исправить.
3. Получить точность можно с помощью AccuracyConclusion.py
python3 AccuracyChecking.py --name=multy_mini
В итоге в консоль будет выведено:
Данная UML - диаграмма показывает откуда происходит начало (запуск) системы и какие функции в каких файлах задействует. На диаграмме представлены только основные функции и файлы.
Построение частотной heatmap (тепловой карты) нахождения автомобильных номеров на видео или онлайн камерах
Эта задача нужна, чтобы выделить те регионы, где чаще всего встречаются автомобильные номера. Задача решена в проекте heatmap-location-car-plates. Он устанавливается и запускается отдельно от текущего проекта.
Вот примеры его работы: