Технология обнаружения и распознавания номерных знаков имеет множество применений. Его можно использовать в дорожных системах, на безбилетных парковках, в жилых домах с контролем доступа к транспортным средствам и т. д. Эта технология сочетает в себе компьютерное зрение и искусственный интеллект.
Вы будете использовать Python для создания программы обнаружения и распознавания номерных знаков. Программа возьмет входное изображение, обработает его для обнаружения и распознавания номерного знака и, наконец, отобразит символы номерного знака в качестве вывода.
Настройка среды Python
Чтобы с комфортом следовать этому руководству, вы должны быть знакомы с основами Python. Это начинается с настройки среды программы.
Прежде чем приступить к написанию кода, вам необходимо установить некоторые библиотеки в вашей среде. Откройте любую среду разработки Python и создайте файл Python. Запустите каждую команду на терминале, чтобы установить соответствующую библиотеку. У вас должен быть предварительный
установка Python PIP на ваш компьютер.-
OpenCV-Python: вы будете использовать эту библиотеку для предварительной обработки входного изображения и отображения различных выходных изображений.
точка установить OpenCV-Python
-
imutils: вы будете использовать эту библиотеку для обрезки исходного входного изображения до нужной ширины.
точка установить imutils
-
Питессеракт: вы будете использовать эту библиотеку для извлечения символов номерного знака и преобразования их в строки.
Библиотека pytesseract опирается на Тессеракт OCR движок для распознавания символов.точка установить Питессеракт
Что такое Tesseract OCR и как его установить на свой компьютер
Tesseract OCR — это механизм, который может распознавать символы языка. Вы должны установить его на свой компьютер перед использованием библиотеки pytesseract. Для этого:
- Откройте любой браузер на базе Chrome
- Загрузите Тессеракт OCR настраивать
- Запустите установку и установите ее, как любую другую программу.
Подготовив среду и установив tesseract OCR, вы готовы написать программу.
1. Импорт библиотек
Начните с импорта библиотек, которые вы установили в среде. Импорт библиотек позволяет вызывать и использовать их функции в проекте.
Импортировать cv2
Импортировать imutils
Импортировать Питессеракт
Вам необходимо импортировать OpenCV-Python библиотека как cv2. Импортируйте другие библиотеки, используя те же имена, которые вы использовали для их установки.
2. Получение ввода
Затем укажите pytesseract место, где установлен механизм Tesseract. Возьмите изображение автомобиля в качестве входных данных, используя cv2.imread функция. Замените имя изображения именем изображения, которое вы используете. Сохраните изображение в той же папке, что и ваш проект, чтобы упростить задачу.
pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
original_image = cv2.imread('image3.jpeg')
Вы можете заменить следующее входное изображение тем, которое хотите использовать.
3. Предварительная обработка ввода
Измените размер изображения до 500 пикселей. Затем преобразуйте изображение в оттенки серого, как хитрая функция обнаружения края работает только с изображениями в градациях серого. Наконец, позвоните в двустороннийФильтр Функция уменьшения шума на изображении.
original_image = imutils.resize (original_image, ширина = 500)
gray_image = cv2.cvtColor (исходное_изображение, cv2.COLOR_BGR2GRAY)
gray_image = cv2.bilateralFilter (grey_image, 11, 17, 17)
4. Обнаружение номерного знака на входе
Обнаружение номерного знака — это процесс определения части автомобиля, имеющей символы номерного знака.
Выполнение обнаружения края
Начните со звонка в cv2.Канни функция, которая автоматически обнаружит края на предварительно обработанном изображении.
edged_image = cv2.Canny (grey_image, 30, 200)
Именно от этих ребер мы будем находить контуры.
Нахождение контуров
Позвоните cv2.findКонтуры функцию и передать копию обрамленное изображение. Эта функция обнаружит контуры. Обведите обнаруженные контуры на исходном изображении с помощью cv2.drawКонтуры функция. Наконец, выведите исходное изображение со всеми нарисованными видимыми контурами.
контуры, новый = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = original_image.copy()
cv2.drawContours(изображение1, контуры, -1, (0, 255, 0), 3)
cv2.imshow ("img1", изображение1)
Программа отчетливо рисует все контуры, которые находит на изображении автомобиля.
После нахождения контуров необходимо отсортировать их, чтобы выявить лучших кандидатов.
Сортировка контуров
Отсортируйте контуры по минимальной площади 30. Игнорируйте те, что ниже, так как они с меньшей вероятностью будут контуром номерного знака. Сделайте копию исходного изображения и нарисуйте топ 30 контуры на изображении. Наконец, отобразите изображение.
контуры = отсортированы (контуры, ключ = cv2.contourArea, реверс = Истинный)[:30]
# сохраняет контур номерного знака
screenCnt = Никто
img2 = original_image.copy()
# рисует 30 лучших контуров
cv2.drawContours(изображение2, контуры, -1, (0, 255, 0), 3)
cv2.imshow ("img2", изображение2)
Контуров теперь меньше, чем было вначале. Единственные нарисованные контуры - это те, которые приближенно содержат номерной знак.
Наконец, вам нужно перебрать отсортированные контуры и определить, какой из них является номерным знаком.
Перебор 30 лучших контуров
Создайте цикл for для обхода контуров. Найдите контур с четырьмя углами и определите его периметр и координаты. Сохраните изображение контура, содержащего номерной знак. Наконец, нарисуйте контур номерного знака на исходном изображении и отобразите его.
количество = 0
идентификатор = 7для c в контурах:
# аппроксимировать контур номерного знака
контур_периметр = cv2.arcLength (c, Истинный)
приблизительно = cv2.приблизительноPolyDP(c, 0.018 * контур_периметр, Истинный)# Ищите контуры с 4 углами
еслиЛен(приблизительно)== 4:
screenCnt = приблизительно# найти координаты контура номерного знака
х, у, ш, ч = cv2.boundingRect (с)
новое_изображение = исходное_изображение [у: у + ч, х: х + ш]# сохраняет новое изображение
cv2.imwrite('./'+ул (идентификатор)+'.png',новое_изображение)
идентификатор += 1
перерыв
# рисует контур номерного знака на исходном изображении
cv2.drawContours(original_image, [экранКнт], -1, (0, 255, 0), 3)
cv2.imshow ("обнаружен номерной знак", исходное_изображение)
После зацикливания ваша программа идентифицировала контур, содержащий номерной знак. Рисует только контур номерного знака.
5. Распознавание обнаруженного номерного знака
Распознать номерной знак означает прочитать символы на кадрированном изображении номерного знака. Загрузите изображение номерного знака, которое вы ранее сохранили, и отобразите его. Затем позвоните в pytesseract.image_to_string и передать обрезанное изображение номерного знака. Эта функция преобразует символы изображения в строку.
# имя файла обрезанного изображения номерного знака
Cropped_License_Plate = './7.png'
cv2.imshow("обрезанныйлицензиятарелка", cv2.imread(укороченный_номерной_номер))
# преобразует символы номерного знака в строку
text = pytesseract.image_to_string (cropped_License_Plate, lang='анг')
Обрезанный номерной знак показан ниже. Символы на нем будут выводом, который вы позже распечатаете на экране.
Обнаружив и распознав номерной знак, вы готовы отобразить вывод.
6. Отображение вывода
Это последний шаг. Вы выводите извлеченный текст на экран. Этот текст содержит символы номерного знака.
Распечатать("Номерной знак:", текст)
cv2.waitKey(0)
cv2.destroyAllWindows()
Ожидаемый результат работы программы должен быть похож на изображение ниже:
Текст номерного знака можно увидеть на терминале.
Отточите свои навыки Python
Обнаружение и распознавание автомобильных номерных знаков в Python — интересный проект для работы. Это сложно, поэтому должно помочь вам узнать больше о Python.
Когда дело доходит до программирования, практика является основой для овладения языком. Чтобы практиковать свои навыки, вам нужно работать над интересными проектами.