Читатели като вас помагат в подкрепа на MUO. Когато правите покупка чрез връзки на нашия сайт, ние може да спечелим комисионна за партньор. Прочетете още.

Технологията за откриване и разпознаване на регистрационни номера има много приложения. Може да се използва в пътни системи, паркинги без билети, резиденции за контрол на достъпа на превозни средства и др. Тази технология съчетава компютърно зрение и изкуствен интелект.

Ще използвате Python, за да създадете програма за откриване и разпознаване на регистрационни номера. Програмата ще вземе входното изображение, ще го обработи, за да открие и разпознае регистрационния номер и накрая ще покаже знаците на регистрационния номер като изход.

Настройване на средата на Python

За да следвате удобно този урок, трябва да сте запознати с основите на Python. Това започва с настройка на средата на програмата.

Преди да започнете да кодирате, трябва да инсталирате някои библиотеки във вашата среда. Отворете която и да е IDE на Python и създайте файл на Python. Изпълнете всяка команда на терминала, за да инсталирате съответната библиотека. Трябва да имате предварително

instagram viewer
инсталиране на Python PIP на вашия компютър.

  • OpenCV-Python: Ще използвате тази библиотека за предварителна обработка на входното изображение и показване на различни изходни изображения.
    пип Инсталирай OpenCV-Python
  • imutils: Ще използвате тази библиотека, за да изрежете оригиналното входно изображение до желана ширина.
    пип Инсталирай imutils
  • питесеракт: Ще използвате тази библиотека, за да извлечете знаците от регистрационния номер и да ги конвертирате в низове.
    пип Инсталирай питесеракт
    Библиотеката pytesseract разчита на Tesseract OCR двигател за разпознаване на знаци.

Какво е Tesseract OCR и как да го инсталирате на вашия компютър

Tesseract OCR е двигател, който може разпознават знаците на даден език. Трябва да го инсталирате на вашия компютър, преди да използвате библиотеката pytesseract. За да направите това:

  1. Отворете произволен браузър, базиран на Chrome
  2. Изтеглете Tesseract OCR настройвам
  3. Стартирайте настройката и я инсталирайте като всяка друга програма

След като подготвите средата и инсталирате teseract OCR, вие сте готови да кодирате програмата.

1. Импортиране на библиотеките

Започнете с импортиране на библиотеките, които сте инсталирали в средата. Импортирането на библиотеките ви позволява да извиквате и използвате техните функции в проекта.

импортиране cv2
импортиране imutils
импортиране питесеракт

Трябва да импортирате OpenCV-Python библиотека като cv2. Импортирайте другите библиотеки, като използвате същите имена, които сте използвали за инсталирането им.

2. Вземане на входа

След това насочете pytesseract към мястото, където е инсталиран Tesseract engine. Вземете изображението на колата като вход, като използвате cv2.imread функция. Заменете името на изображението с името на изображението, което използвате. Съхранявайте изображението в същата папка като вашия проект, за да улесните нещата.

pytesseract.pytesseract.tesseract_cmd = 'C:\\Програмни файлове\\Tesseract-OCR\\tesseract.exe'
оригинално_изображение = cv2.imread('image3.jpeg')

Можете да замените следното въведено изображение с това, което искате да използвате.

3. Предварителна обработка на входа

Преоразмерете ширината на изображението до 500 пиксела. След това преобразувайте изображението в скала на сивото като функция за откриване на canny edge работи само с изображения в сива скала. Накрая се обадете на двустранен филтър функция за намаляване на шума в изображението.

оригинално_изображение = imutils.resize (оригинално_изображение, ширина=500)
сиво_изображение = cv2.cvtColor (оригинално_изображение, cv2.COLOR_BGR2GRAY)
сиво_изображение = cv2.bilateralFilter (сиво_изображение, 11, 17, 17)

4. Откриване на регистрационния номер на входа

Откриването на регистрационния номер е процес на определяне на частта от автомобила, която има знаците на регистрационния номер.

Извършване на откриване на ръбове

Започнете, като се обадите на cv2.Canny функция, която автоматично ще открие ръбовете на предварително обработеното изображение.

edged_image = cv2.Canny (сиво_изображение, 30, 200)

Именно от тези ръбове ще намерим контурите.

Намиране на контурите

Обадете се на cv2.findContours функция и предаване на копие на изображение с ръбове. Тази функция ще открие контурите. Начертайте откритите контури върху оригиналното изображение, като използвате cv2.drawContours функция. Накрая изведете оригиналното изображение с нарисувани всички видими контури.

контури, нов = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = original_image.copy()
cv2.drawContours(img1, контури, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)

Програмата изчертава отчетливо всички контури, които намира върху изображението на автомобила.

След като намерите контурите, трябва да ги сортирате, за да идентифицирате най-добрите кандидати.

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

Сортирайте контурите въз основа на минимална площ 30. Игнорирайте тези по-долу, тъй като е по-малко вероятно те да бъдат контура на регистрационния номер. Направете копие на оригиналното изображение и нарисувайте топ 30 контури върху изображението. Накрая покажете изображението.

контури = сортирани (контури, ключ = cv2.contourArea, обратен = Вярно)[:30]

# съхранява контура на регистрационния номер
screenCnt = Нито един
img2 = original_image.copy()

# рисува топ 30 контура
cv2.drawContours(img2, контури, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)

Сега има по-малко контури, отколкото в началото. Единствените начертани контури са тези, които приблизително съдържат регистрационния номер.

Накрая трябва да преминете през сортираните контури и да определите кой от тях е номерната табела.

Преминаване през първите 30 контура

Създайте for цикъл, за да преминете през контурите. Потърсете контура с четири ъгъла и определете неговия периметър и координати. Запазете изображението на контура, съдържащ регистрационния номер. Накрая начертайте контура на регистрационния номер върху оригиналното изображение и го покажете.

брой = 0
idx = 7

за c в контури:
# приближете контура на регистрационния номер
contour_perimeter = cv2.arcLength (c, Вярно)
приблизително = cv2.approxPolyDP(c, 0.018 * контур_периметър, Вярно)

# Потърсете контури с 4 ъгъла
акоlen(приблизително)== 4:
screenCnt = прибл

# намерете координатите на контура на регистрационния номер
x, y, w, h = cv2.boundingRect (c)
ново_img = оригинално_изображение [ y: y + h, x: x + w]

# съхранява новото изображение
cv2.imwrite('./'+str (idx)+".png",ново_изображение)
idx += 1
прекъсвам

# рисува контура на регистрационния номер върху оригиналното изображение
cv2.drawContours(оригинално_изображение, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("открит регистрационен номер", оригинално_изображение )

След цикъл вашата програма е идентифицирала контура, съдържащ регистрационния номер. Рисува само по контура на регистрационния номер.

5. Разпознаване на открития регистрационен номер

Разпознаването на регистрационния номер означава разчитане на знаците върху изрязаното изображение на регистрационния номер. Заредете изображението на регистрационния номер, което сте съхранили преди това, и го покажете. След това се обадете на pytesseract.image_to_string функция и предава изрязаното изображение на регистрационния номер. Тази функция преобразува знаците в изображението в низ.

# име на файл на изображението на изрязания регистрационен номер
cropped_License_Plate = './7.png'
cv2.imshow("изрязаниРазрешителноплоча", cv2.imread(cropped_License_Plate))

# преобразува символите на регистрационния номер в низ
text = pytesseract.image_to_string (cropped_License_Plate, lang="англ")

Изрязаната регистрационна табела е показана по-долу. Знаците върху него ще бъдат резултатът, който по-късно ще отпечатате на екрана.

След като откриете и разпознаете регистрационния номер, вие сте готови да покажете резултата.

6. Показване на изхода

Това е последната стъпка. Отпечатвате извлечения текст на екрана. Този текст съдържа знаците от регистрационния номер.

печат(„Регистрационният номер е:“, текст)
cv2.waitKey(0)
cv2.destroyAllWindows()

Очакваният резултат от програмата трябва да бъде подобен на изображението по-долу:

Текстът на регистрационния номер може да се види на терминала.

Изостряйте уменията си за Python

Откриването и разпознаването на регистрационни номера на автомобили в Python е интересен проект, върху който трябва да се работи. Това е предизвикателство, така че трябва да ви помогне да научите повече за Python.

Когато става въпрос за програмиране, практиката е в основата на овладяването на даден език. За да практикувате уменията си, трябва да работите по интересни проекти.