Giter VIP home page Giter VIP logo

car-number-detection's Introduction

Сar-number-detection

Проект реализуется в рамках курса по глубокому обучению.

Задача

Задача стояла в следующем: Существует предприятие, директора интересуют автомобильные номера. Есть камера, она шлет поток, мы из него выделяем фото. Распознаем:

  • Российские номера
  • Тип автомобиля
  • Цвет автомобиля
  • Кто из работников уезжает домой пораньше
Важно запоминать в какое время приехала машина, не обязательно сохранять сами данные о машине и сотруднике и ее номера.

Quick Start

Чтобы запустить проект локально, необходимо:

  1. Создать виртуальное окружение
  2. Установить зависимости из requirements.txt:
pip install -r requirements.txt
  1. Проверить пути до весов/видео
  2. python main.py

Решение

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

  1. Сначала определяется, что бокс номера лежит внутри бокса машины, тогда номерной знак присваивается этой машине
  2. Записывается тип машины и координаты номера и бокса автомобиля
  3. Затем происходит распознавание номера машины и проверка распознанного номера по регулярному выражению
  4. Производится распознование цвета автомобиля

Пример распознавания:

При запуске программы можно остановить ее, нажав на клавишу "q", также можно остановиться на определенном фрейме на пять секунд во время возпроизведения видео, нажав на клавишу "s".


Производительность алгоритма:

На CPU алгоритм обрабатывает 2.7577 изображения в секунду (FPS). Эксперименты проводились на компьютере с 2,2 GHz Intel Core i7


Снимок экрана 2022-10-09 в 13 36 12

Снимок экрана 2022-10-09 в 13 35 48

Распознавание номера

Для распознавания номера на номерных знаках сначала использовался tesseract, но точность получилась низкая:
2022-10-05 16 55 17

После этого было принято решение обучить нейросеть архитектуры LPRnet. Точность распознавания текста 89,6%.

Детекция цвета

Для распознавания цвета каждый бокс машины сначала разбивался на вектора трех цветов: красный, синий, зеленый (с помощью метода OpenCV split()). Затем брались максимумы из каждого из векторов и значение максимума записывалось в общее значение цвета изображения в формате BGR (то есть максимальное значение из синего, из зеленого и из красного записывалось в общее значение).

Затем то же самое производится с изображениями из обучающего датасета (директория training_data). Каждое из изображений находится в папке соответствующего цвета (так происходит разметка датасета). Таким образом, в файл training.data сохраняются значения BGR для каждого изображения из обучающей выборки и тот цвет, который представлен на изображении.

В файл test.data сохраняется значение BGR для изображения, цвет которого мы детектируем. Затем с применением KNN-классификации определяется, какой цвет у машины.

Дерево проекта

├── colour_detection
│   ├── detect_color.py
│   └── training_dataset
│       ├── black
│       │   ├── black1.png
│       │   ├── black10.png
│       │   ...
│       ├── blue
│       │   ├── blue.jpg
│       │   ├── blue1.jpg
│       │   ...
│       ├── green
│       │   ├── green1.jpg
│       │   ...
│       ├── orange
│       │   ├── orange1.png
│       │   ├── orange10.png
│       │   ...
│       ├── red
│       │   ├── red1.jpg
│       │   ├── red10.jpg
│       │   ...
│       ├── violet
│       │   ├── violet1.png
│       │   ├── violet10.png
│       │   ...
│       ├── white
│       │   ├── white1.png
│       │   ├── white10.jpg
│       │   ...
│       └── yellow
│           ├── yellow1.jpg
│           ├── yellow2.png
│           ...
├── lpr_net
│   ├── data
│   │   ├── NotoSansCJK-Regular.ttc
│   │   ├── __init__.py
│   │   └── load_data.py
│   ├── model
│   │   ├── __init__.py
│   │   ├── lpr_net.py
│   │   └── weights
│   │       ├── Final_LPRNet_model.pth
│   │       └── LPRNet__iteration_2000_28.09.pth
│   └── rec_plate.py
├── main.py
├── object_detection
│   ├── YOLOS_cars.pt
│   └── detect_car_YOLO.py
├── requirements.txt
├── settings.py
├── test
│   └── videos
│       ├── test.mp4
│       └── test2.mp4
└── track_logic.py

Датасет

Датасет состоит из 4 классов:

  • 0 - номера автомобилей
  • 1 - легковые автомобили
  • 2 - грузовые автомобили
  • 3 - общественный транспорт

Train/test split

В обучающей выборке: 1200 изображений (92%)

В тестовой выборке: 103 изображения (8%)

Описание обученных моделей

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

Модель YOLOv5n

Класс mAP50 mAP50-95
Для всех 0.855 0.708
0 (Номерные знаки) 0.907 0.641
1 (Легковые автомобили) 0.851 0.76
2 (Грузовые автомобили) 0.87 0.75
3 (Общественный транспорт) 0.792 0.682

Модель YOLOv5s

Класс mAP50 mAP50-95
Для всех 0.807 0.709
0 (Номерные знаки) 0.91 0.691
1 (Легковые автомобили) 0.827 0.786
2 (Грузовые автомобили) 0.777 0.723
3 (Общественный транспорт) 0.712 0.635

Модель YOLOv5m

Модель была обучена на 19 эпохах, так как размер датасета был слишком маленьким для сети такого размера.

Класс mAP50 mAP50-95
Для всех 0.848 0.726
0 (Номерные знаки) 0.932 0.69
1 (Легковые автомобили) 0.859 0.795
2 (Грузовые автомобили) 0.839 0.762
3 (Общественный транспорт) 0.761 0.658

Reference

YOLOv5
COLOR RECOGNITION
NUMBER DETECTION

car-number-detection's People

Contributors

dependabot[bot] avatar seedovan19 avatar smeyanoff avatar soul-keeper avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

car-number-detection's Issues

Requirements.txt

Не хватает модуля
ultralytics

PS: можно ли распознать номер с фото?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.