Изучение Python OpenCV / Урок #8 – Распознавание номерных знаков и чтение их

YOUTUBE · 19.11.2025 07:51

Ключевые темы и таймкоды

Введение и подготовка

0:00
  • Урок посвящен распознаванию номерных знаков и считыванию информации с них с помощью библиотеки OpenCV.
  • Рекомендуется использовать сторонние библиотеки вместо натренированной модели.
  • Для начала урока нужно установить дополнительные библиотеки, такие как imread и imutils.

Установка библиотек

0:58
  • Установка библиотеки imread для считывания информации с изображений.
  • Установка библиотеки imutils для базовых функций работы с изображениями.
  • Установка библиотеки matplotlib для визуализации данных.

Подключение библиотек и создание переменных

1:58
  • Подключение библиотек в проекте и создание псевдонимов для удобства.
  • Импорт необходимых библиотек, включая matplotlib и imutils.
  • Создание переменной для ссылки на изображение и его чтение.

Преобразование изображения в серый формат

3:57
  • Преобразование изображения в серый формат для упрощения работы.
  • Использование метода convertColor из библиотеки matplotlib для корректного отображения изображения.

Оптимизация изображения

5:55
  • Применение фильтра для уменьшения шума на изображении.
  • Использование метода bilateralFilter из библиотеки imutils для уменьшения количества точек.
  • Настройка параметров фильтра для улучшения качества изображения.

Обнаружение контуров

8:52
  • Создание переменной для контуров изображения.
  • Использование метода contour из библиотеки imutils для обнаружения контуров.
  • Настройка порогов для точного обнаружения контуров.

Тестирование изображения

9:51
  • Выводим изображение с краями.
  • Обнаруживаем контуры для отслеживания объектов.
  • Создаем переменную для хранения контуров.

Обнаружение контуров

10:50
  • Копируем изображение с углами.
  • Используем режим 3 для нахождения всех контуров.
  • Применяем метод chain approx simple для оптимизации.

Сортировка контуров

11:50
  • Используем библиотеку для удобного форматирования контуров.
  • Сортируем контуры по квадратным формам.
  • Указываем обратный порядок для корректного удаления объектов.

Поиск контуров номерного знака

13:48
  • Выбираем последние 8 контуров для работы.
  • Создаем цикл для перебора контуров.
  • Используем метод approx для нахождения контуров, похожих на квадрат.

Проверка контуров

15:46
  • Проверяем длину полученного контура.
  • Находим контуры с четырьмя элементами, соответствующими углам квадрата.
  • Записываем найденный контур в переменную для дальнейшего использования.

Тестирование программы

18:42
  • Выводим позицию найденного контура в терминал.
  • Проверяем, что переменная не пуста.
  • Увеличиваем количество выбираемых контуров для более точного результата.

Выделение номерного знака

19:40
  • Используем побитовые операции и маски для выделения номерного знака.
  • Создаем новую переменную mask и указываем её размеры.
  • Создаем новое изображение и рисуем контуры с помощью метода drawcontours.

Применение маски

21:36
  • Применяем маску к первому изображению с помощью метода withwhite.
  • Выводим результат на экран с помощью matplotlib.
  • Используем другое изображение для корректного выделения номерного знака.

Проблемы и улучшения

23:35
  • Подход без использования обученной модели может давать неточные результаты.
  • Рекомендуется использовать готовые модели или обучать собственные.
  • Вырезаем номерной знак из изображения и находим его координаты.

Обрезка изображения

25:32
  • Обрезаем изображение, используя метод crop.
  • Находим верхнюю и нижнюю координаты номерного знака.
  • Обрезаем изображение по найденным координатам.

Чтение информации с номерного знака

27:30
  • Используем библиотеку ezio для чтения информации с изображения.
  • Создаем переменную для текста и указываем язык английский.
  • Применяем метод readtext для чтения текста с изображения.

Загрузка модели и обработка ошибок

29:28
  • Загружаем модель распознавания английских символов.
  • Если возникает ошибка на Mac, устанавливаем сертификаты через папку "Программы".
  • После загрузки модели выводим результаты.

Вывод текста на изображение

30:27
  • Выводим полученный текст на основное изображение.
  • Создаем новую переменную для хранения текста.
  • Используем отрицательные индексы для извлечения нужного элемента.

Настройка подписи

31:26
  • Создаем переменную для подписи с методом "путь текст".
  • Указываем координаты и шрифт для подписи.
  • Добавляем фон и цвет для текста.

Рисование квадратика

33:23
  • Рисуем квадратик на изображении.
  • Устанавливаем координаты и цвет для квадратика.
  • Выводим изображение на экран.

Финальная настройка и вывод

34:23
  • Увеличиваем размер текста и жирность обводки.
  • Исправляем координаты для правильного отображения текста.
  • Программа не идеальна, но работает на основе приблизительных данных.

Заключение

36:19
  • Программа не использует нейронную сеть, а лишь активирует приблизительные данные.
  • Надеемся, что урок был полезен.
  • Призываем подписываться на канал и вступать в соцсети.