- На первом этапе необходим алгоритм для обнаружения машин, здесь же параллельно можно классифицировать принадлежность к одному из ведомств. Можно использовать любой нейросетевой детектор, я бы в первую очередь обратил внимание на семейство Yolo - Yolov5, либо Yolov8, которые отличаются балансом скорости и точности.
- На втором этапе производится обнаружение номеров - детектирование номера и задача OCR распознавания номеров, например, нижеприведённый LPRNet.
- При необходимости определения дополнительных признаков машин, возможно, придётся дополнять систему классификаторами. Для сложной системы также следует сконцентрироваться на быстрых алгоритмах, например Resnet18, Resnet50, MobileNetv2 - в первом приближении. Также можно задачу дополнительной классификации имплементировать в детектор машин, но тут встаёт вопрос насколько это эффективно и качественно, соответственно требует резёрча.
- Все нейросетевые архитектуры конвертровать в форматы для запуска в инференсе - tensoRT, openvino, onnx - , которые определяются в зависимости от вычислителей, на которых будет работать система.
- По-хорошему нужно сделать ревью существующих решений как всей полной задачи - видео обработка потока машин, так и составных её частей - object detection, classification, OCR.
- Из используемых фреймворков и алгоритмов: pytorch, pytorch-lightning - для обучения; всевозможные гиты с state-of-the-art алгоритмами; detectron; Model Zoo; MMDetection; tensorRT, openvino, onnx - для инференса.
https://github.com/smeyanoff/car-number-detection.git
Чтобы запустить проект локально, необходимо:
- Создать виртуальное окружение
- Установить зависимости из requirements.txt:
pip install -r requirements.txt
- Проверить пути до весов/видео
python inference.py
Для детектирования автомобиля по типам и номерного знака на изображении используется YOLOv5. Для распознавания(определения) номеров используется модель LPRNet. Пайплайн выглядит следующим образом:
- Сначала определяется, что бокс номера лежит внутри бокса машины, тогда номерной знак присваивается этой машине
- Записывается тип машины и координаты номера и бокса автомобиля
- Затем происходит распознавание номера машины и проверка распознанного номера по регулярному выражению
- Производится распознование цвета автомобиля
Стоит отметить что нейросетевые модели обучены на небольшой выборке и представленные веса показывают не самый лучший результат. Судя по описанию репозитория архитектура обнаружения работает как минимум с удовлетворительными точностями - согласно отчёту Yolov5s имеет mAP50-95 в 0.709. Вероятно, слабым звеном здесь является LPRNet - архитектура для распознавания номеров. Причины могут быть несколько - малое количество данных, сама архитектура. Данный вопрос требует дальнейнего исследования и разработки.