carplates_detect

0

Описание

carplates detect yolo

Языки

  • Python100%
readme.md

задачу распознавания номеров можно разделить на три ступени:

1 детекция автомобилей. тут же происходит классификация - обычный автомобиль либо спецслужбы 2 детекция автомобильного номера 3 чтение символов на номере

Для ПЕРВОЙ используется yolov8, обученная на датасете спецтранспорта Для ВТОРОЙ используется yolov8, обученная на датасете рамок автономеров (obb) Для ТРЕТЬЕЙ используется yolov8, которая обучалась более чем на 10 тысяч изображений

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

Классы

PredictProcess

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

PredictProcessObb(PredictProcess)

Этот класс наследует

PredictProcess
и предназначен для работы с ориентированными ограничивающими рамками (Oriented Bounding Boxes - OBB).

Методы

  • _create_boxes()
    : Создает уникальные идентификаторы для каждой ограничивающей рамки. Если координаты ограничивающей рамки совпадают с уже существующими, добавляется небольшая случайная дельта, чтобы сделать ключи уникальными

  • get_image_by_box(box_id=None, scale=2)
    : Извлекает часть изображения по заданным координатам ограничивающей рамки. Позволяет поворачивать изображение в соответствии с углом ориентации ограничивающей рамки и изменять его размер.

PredictProcessBox(PredictProcess)

Этот класс также наследует

PredictProcess
, но предназначен для работы с обычными ограничивающими рамками (Bounding Boxes).

_create_boxes()

Создает боксы аналогично одноименному методу PredictProcessBB. Разница лишь в типе боксов

get_box_in_zone(x_, y_, w_, h_)

Метод проверяет, находится ли бокс в заданной зоне, определяемой координатами (x_, y_) и размерами (w_, h_). Возвращает идентификатор бокса, если он находится в зоне, и

None
в противном случае.

get_image_by_box(box_id)

Этот метод извлекает изображение, соответствующее определенному боксу, используя его идентификатор. Возвращает часть оригинального изображения, ограниченную рамками бокса.

get_box_conf(box_id)

Возвращает уверенность (confidence score) для бокса, идентифицированного по

box_id
.

get_text()

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

is_common_car(box_id)

is_special_car(box_id)

Проверяют, является ли автомобиль обычным или специальным

Данные классы используются в приложении распознавания номеров

Приложение streamlit для распознавания номеров

Пользователи могут загружать видеофайлы, настраивать параметры детекции и просматривать результаты

Основной функционал

Загружаемые данные

  • Загрузка видеофайла: Пользователь может загрузить видеофайлы в форматах MP4, AVI или MOV через боковую панель приложения.

Пользовательские настройки

  • Координаты зоны детекции:

    • Положение X (0-100%)
    • Положение Y (0-100%)
    • Ширина (0-100%)
    • Высота (0-100%)

    Эти параметры позволяют пользователю задать область, в которой будет происходить детекция объектов. Область задается в процентах от размера изображения

  • Параметры отображения:

    • Чекбокс для показа времени детекции.
    • Чекбокс для выделения обнаруженных объектов.
  • Ввод текста: Пользователь может ввести искомый номер автомобиля. При обнаружении авто с данным номером, а также при обнаружении машин спецслужб, будет выводиться сообщение "Доступ разрешен"

Управление воспроизведением

  • Кнопка "Перезапустить видео": Позволяет пользователю перезапустить воспроизведение видео с самого начала.
  • Чекбокс "Воспроизведение видео": Позволяет пользователю включать или останавливать воспроизведение видео.

Обработка обнаруженных автомобилей

  • При обнаружении автомобиля в заданной зоне:
    • Отображается изображение автомобиля, определяемое с помощью класса
      PredictProcessBox
      .
    • Классифицируется тип автомобиля (обычный или спецтранспорт).
    • Если это обычный автомобиль, происходит распознавание номера.
      • Используется класс
        PredictProcessObb
        для распознавания рамки номера.
      • Если номер распознан, выводится текст распознанного номера и время распознавания.
      • Если номер совпадает с введенным пользователем, доступ разрешается, иначе — запрещается.

Вывод информации

Выделяется несколько фреймов, в которых отображается текст и изображения/видео

  • Основной фрейм: Тут отображается видео с наложенной областью детекции. Под видео появляется сообщение о допуске / недопуске транспортного средства

  • Область детекции: Тут отображается изображение автомобиля, включая текст с описанием класса автомобиля и время обработки.

  • Область номера: Тут отображается изображение номера автомобиля, а также распознанный текст и время распознавания.

  • Результаты обработки записываются в лог в формате CSV, что позволяет отслеживать события, связанные с обнаружением и распознаванием автомобилей.