Teknologi til registrering og genkendelse af nummerplader har mange anvendelser. Det kan bruges i vejsystemer, billetløse parkeringspladser, adgangskontrolboliger for køretøjer og meget mere. Denne teknologi kombinerer computersyn og kunstig intelligens.
Du skal bruge Python til at oprette et program til registrering og genkendelse af nummerplader. Programmet vil tage inputbilledet, behandle det for at detektere og genkende nummerpladen og til sidst vise tegnene på nummerpladen som output.
Opsætning af Python-miljøet
For komfortabelt at følge denne tutorial skal du være fortrolig med Python-grundlæggende. Dette starter med opsætning af programmets miljø.
Før du begynder at kode, skal du installere nogle biblioteker i dit miljø. Åbn enhver Python IDE og opret en Python-fil. Kør hver kommando på terminalen for at installere det respektive bibliotek. Du burde have en forudgående installation af Python PIP på din computer.
-
OpenCV-Python: Du vil bruge dette bibliotek til at forbehandle inputbilledet og vise forskellige outputbilleder.
pip installere OpenCV-Python
-
imutils: Du skal bruge dette bibliotek til at beskære det originale inputbillede til en ønsket bredde.
pip installere imutils
-
pytesseract: Du skal bruge dette bibliotek til at udtrække tegnene på nummerpladen og konvertere dem til strenge.
Pytesseract-biblioteket er afhængig af Tesseract OCR motor til karaktergenkendelse.pip installere pytesseract
Hvad Tesseract OCR er, og hvordan du installerer det på din computer
Tesseract OCR er en motor, der kan genkende et sprogs tegn. Du bør installere det på din computer, før du bruger pytesseract-biblioteket. For at gøre det:
- Åbn en hvilken som helst Chrome-baseret browser
- Download Tesseract OCR Opsætning
- Kør opsætningen og installer den som ethvert andet program
Efter at have forberedt miljøet og installeret tesseract OCR, er du klar til at kode programmet.
1. Import af bibliotekerne
Begynd med at importere de biblioteker, du har installeret i miljøet. Import af bibliotekerne giver dig mulighed for at ringe og bruge deres funktioner i projektet.
importere cv2
importere imutils
importere pytesseract
Du skal importere OpenCV-Python bibliotek som cv2. Importer de andre biblioteker med de samme navne, som du brugte til at installere dem.
2. Tager input
Peg derefter pytesseract til det sted, hvor Tesseract-motoren er installeret. Tag bilbilledet som input ved hjælp af cv2.imread fungere. Erstat billednavnet med navnet på det billede, du bruger. Gem billedet i samme mappe som dit projekt for at gøre det nemt.
pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
original_image = cv2.imread('image3.jpeg')
Du kan erstatte følgende inputbillede med det, du gerne vil bruge.
3. Forbehandling af input
Tilpas billedbredden til 500 pixels. Konverter derefter billedet til gråtoner som canny edge detektionsfunktion virker kun med gråtonebilleder. Ring endelig til bilateralt filter funktion til at reducere støjen i billedet.
original_image = imutils.resize (original_image, width=500 )
grey_image = cv2.cvtColor (original_image, cv2.COLOR_BGR2GRAY)
grey_image = cv2.bilateralFilter (grå_billede, 11, 17, 17)
4. Registrering af nummerpladen på indgangen
Registrering af nummerpladen er processen med at bestemme den del på bilen, der har tegnene fra nummerpladen.
Udførelse af kantdetektion
Start med at ringe til cv2.Canny funktion, som automatisk registrerer kanterne på det forbehandlede billede.
edged_image = cv2.Canny (grå_billede, 30, 200)
Det er fra disse kanter, vi finder konturerne.
At finde konturerne
Ring til cv2.findContours funktion og videregive en kopi af kantet billede. Denne funktion vil registrere konturerne. Tegn rundt om de registrerede konturer på det originale billede ved hjælp af cv2.drawContours fungere. Udskriv til sidst det originale billede med alle de synlige konturer tegnet.
konturer, ny = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = original_image.copy()
cv2.drawContours(img1, konturer, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)
Programmet tegner alle de konturer, som det finder på bilbilledet markant.
Når du har fundet konturerne, skal du sortere dem for at identificere de bedste kandidater.
Sortering af konturerne
Sorter konturerne baseret på minimumsareal 30. Ignorer dem nedenfor, da de er mindre tilbøjelige til at være nummerpladens kontur. Lav en kopi af det originale billede og tegn top 30 konturer på billedet. Til sidst skal du vise billedet.
konturer = sorteret (konturer, nøgle = cv2.contourArea, omvendt = Rigtigt)[:30]
# gemmer nummerpladens kontur
screenCnt = Ingen
img2 = original_image.copy()
# tegner top 30 konturer
cv2.drawContours(img2, konturer, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)
Der er nu færre konturer, end der var i begyndelsen. De eneste tegnede konturer er dem, der tilnærmelsesvis indeholder nummerpladen.
Til sidst skal du sløjfe over de sorterede konturer og bestemme, hvilken der er nummerpladen.
Looping over de 30 bedste konturer
Opret en for loop til loop over konturerne. Se efter konturen med fire hjørner, og bestem dens omkreds og koordinater. Gem billedet af konturen, der indeholder nummerpladen. Til sidst tegner du nummerpladens kontur på det originale billede og viser det.
antal = 0
idx = 7for c i konturer:
# tilnærme nummerpladens kontur
contour_perimeter = cv2.arcLength (c, Rigtigt)
ca. = cv2.approxPolyDP(c, 0.018 * contour_perimeter, Rigtigt)# Se efter konturer med 4 hjørner
hvislen(ca.)== 4:
screenCnt = ca# find koordinaterne for nummerpladens kontur
x, y, w, h = cv2.boundingRect (c)
new_img = original_image [ y: y + h, x: x + w]# gemmer det nye billede
cv2.imwrite('./'+str (idx)+'.png',ny_img)
idx += 1
pause
# tegner nummerpladens kontur på originalbilledet
cv2.drawContours(original_image, [skærmCnt], -1, (0, 255, 0), 3)
cv2.imshow("registreret nummerplade", original_billede)
Efter looping har dit program identificeret konturen med nummerpladen. Den tegner kun på nummerpladens kontur.
5. Genkender den registrerede nummerplade
At genkende nummerpladen betyder at læse tegnene på det beskårede billede af nummerpladen. Indlæs nummerpladebilledet, du tidligere har gemt, og vis det. Så ring til pytesseract.image_to_string funktion og videregive det beskårede nummerpladebillede. Denne funktion konverterer tegnene i billedet til en streng.
# filnavn på det beskårne nummerpladebillede
cropped_License_Plate = './7.png'
cv2.imshow("beskåretlicensplade", cv2.imread(cropped_License_Plate))
# konverterer nummerpladens tegn til streng
text = pytesseract.image_to_string (cropped_License_Plate, lang='eng')
Den beskårede nummerplade er vist nedenfor. Tegnene på den vil være det output, du senere vil udskrive på skærmen.
Når du har fundet og genkendt nummerpladen, er du klar til at vise outputtet.
6. Visning af output
Dette er det sidste skridt. Du udskriver den udtrukne tekst til skærmen. Denne tekst indeholder tegnene på nummerpladen.
Print("Nummerplade er:", tekst)
cv2.waitKey(0)
cv2.destroyAllWindows()
Det forventede output af programmet skal svare til billedet nedenfor:
Nummerpladeteksten kan ses på terminalen.
Skærp dine Python-færdigheder
Opdagelse og genkendelse af bilers nummerplader i Python er et interessant projekt at arbejde på. Det er udfordrende, så det burde hjælpe dig med at lære mere om Python.
Når det kommer til programmering, er øvelse kernen i beherskelsen af et sprog. For at øve dine færdigheder skal du arbejde på interessante projekter.