Lezers zoals jij steunen MUO. Wanneer u een aankoop doet via links op onze site, kunnen we een aangesloten commissie verdienen. Lees verder.

Kentekenherkennings- en herkenningstechnologie kent vele toepassingen. Het kan worden gebruikt in wegsystemen, parkeerterreinen zonder kaartjes, woningen met toegangscontrole voor voertuigen en meer. Deze technologie combineert computervisie en kunstmatige intelligentie.

Je gaat Python gebruiken om een ​​kentekendetectie- en herkenningsprogramma te maken. Het programma neemt de invoerafbeelding, verwerkt deze om de kentekenplaat te detecteren en te herkennen en geeft ten slotte de karakters van de kentekenplaat weer als uitvoer.

De Python-omgeving opzetten

Om deze tutorial comfortabel te volgen, moet je bekend zijn met de basisprincipes van Python. Dit begint met het opzetten van de programma-omgeving.

Voordat u begint met coderen, moet u enkele bibliotheken in uw omgeving installeren. Open een Python IDE en maak een Python-bestand. Voer elke opdracht uit op de terminal om de respectieve bibliotheek te installeren. Je zou een voorrang moeten hebben

installatie van Python PIP op uw computer.

  • OpenCV-Python: U gebruikt deze bibliotheek voor het voorbewerken van de invoerafbeelding en het weergeven van verschillende uitvoerafbeeldingen.
    Pip installeren OpenCV-Python
  • imutilaties: U gebruikt deze bibliotheek om de originele invoerafbeelding bij te snijden tot de gewenste breedte.
    Pip installeren imutilaties
  • pytesseract: U gebruikt deze bibliotheek om de karakters van de kentekenplaat te extraheren en om te zetten in strings.
    Pip installeren pytesseract
    De pytesseract-bibliotheek is gebaseerd op de Tesseract OCR engine voor karakterherkenning.

Wat Tesseract OCR is en hoe u het op uw computer installeert

Tesseract OCR is een engine die dat kan de karakters van een taal herkennen. U moet het op uw computer installeren voordat u de pytesseract-bibliotheek gebruikt. Om dit te doen:

  1. Open een op Chrome gebaseerde browser
  2. Download de Tesseract OCR opgericht
  3. Voer de installatie uit en installeer het zoals elk ander programma

Nadat u de omgeving hebt voorbereid en tesseract OCR hebt geïnstalleerd, bent u klaar om het programma te coderen.

1. De bibliotheken importeren

Begin met het importeren van de bibliotheken die u in de omgeving hebt geïnstalleerd. Door de bibliotheken te importeren, kunt u hun functies in het project oproepen en gebruiken.

importeren cv2
importeren imutilaties
importeren pytesseract

U moet de OpenCV-Python bibliotheek als cv2. Importeer de andere bibliotheken met dezelfde namen die u hebt gebruikt om ze te installeren.

2. De invoer nemen

Wijs vervolgens pytesseract naar de locatie waar de Tesseract-engine is geïnstalleerd. Neem de afbeelding van de auto als invoer met behulp van de cv2.imread functie. Vervang de afbeeldingsnaam door de naam van de afbeelding die u gebruikt. Bewaar de afbeelding in dezelfde map als uw project om het u gemakkelijk te maken.

pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
originele_afbeelding = cv2.imread('afbeelding3.jpeg')

U kunt de volgende invoerafbeelding vervangen door degene die u wilt gebruiken.

3. De invoer voorbewerken

Wijzig de breedte van de afbeelding naar 500 pixels. Converteer vervolgens de afbeelding naar grijstinten als de slimme randdetectiefunctie werkt alleen met afbeeldingen in grijstinten. Bel ten slotte de bilateraalFilter functie om de ruis in het beeld te verminderen.

originele_afbeelding = imutils.resize (originele_afbeelding, breedte=500 )
grijze_afbeelding = cv2.cvtColor (originele_afbeelding, cv2.COLOR_BGR2GRAY)
grijze_afbeelding = cv2.bilateralFilter (grijze_afbeelding, 11, 17, 17)

4. Het detecteren van de kentekenplaat op de ingang

Het detecteren van de kentekenplaat is het proces van het bepalen van het onderdeel op de auto dat de karakters van de kentekenplaat heeft.

Randdetectie uitvoeren

Begin met het bellen van de cv2.Kaniek functie die automatisch de randen van het voorbewerkte beeld detecteert.

edged_image = cv2.Canny (grijs_image, 30, 200)

Vanaf deze randen zullen we de contouren vinden.

De contouren vinden

Bel de cv2.findContouren functie en geef een kopie van de scherp beeld. Deze functie detecteert de contouren. Teken rond de gedetecteerde contouren op de originele afbeelding met behulp van de cv2.drawContouren functie. Voer ten slotte de originele afbeelding uit met alle zichtbare contouren getekend.

contouren, nieuw = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = originele_afbeelding.kopie()
cv2.tekencontouren(afb1, contouren, -1, (0, 255, 0), 3)
cv2.imshow("img1", afbeelding1)

Het programma tekent alle contouren die het op de afbeelding van de auto aantreft duidelijk.

Nadat u de contouren hebt gevonden, moet u ze sorteren om de beste kandidaten te identificeren.

De contouren sorteren

Sorteer de contouren op minimaal gebied 30. Negeer die daaronder, omdat ze minder snel de kentekenplaatcontour zijn. Maak een kopie van de originele afbeelding en teken de beste 30 contouren op de afbeelding. Geef ten slotte de afbeelding weer.

contouren = gesorteerd (contouren, toets = cv2.contourArea, omgekeerd = WAAR)[:30]

# slaat de kentekenplaatcontour op
schermCnt = Geen
img2 = originele_afbeelding.kopie()

# tekent top 30 contouren
cv2.tekencontouren(img2, contouren, -1, (0, 255, 0), 3)
cv2.imshow("img2", afb2)

Er zijn nu minder contouren dan in het begin. De enige getekende contouren zijn de contouren die bij benadering de kentekenplaat bevatten.

Ten slotte moet u de gesorteerde contouren doorlopen en bepalen welke de nummerplaat is.

Looping over de top 30 contouren

Maak een for-lus om over de contouren te lussen. Zoek naar de contour met vier hoeken en bepaal de omtrek en coördinaten. Bewaar de afbeelding van de contour met de kentekenplaat. Teken ten slotte de contour van de kentekenplaat op de originele afbeelding en geef deze weer.

tellen = 0
idx = 7

voor c in contouren:
# benader de contour van de kentekenplaat
contour_perimeter = cv2.arcLength (c, WAAR)
ca. = cv2.ca.PolyDP(c, 0.018 * contour_perimeter, WAAR)

# Zoek naar contouren met 4 hoeken
alslenen(ongeveer)== 4:
schermCnt = ca

# vind de coördinaten van de kentekenplaatcontour
x, y, w, h = cv2.boundingRect (c)
nieuwe_img = originele_afbeelding [ y: y + h, x: x + w]

# slaat de nieuwe afbeelding op
cv2.imwrite('./'+str (idx)+'.png',nieuwe_img)
idx += 1
pauze

# tekent de contour van de kentekenplaat op de originele afbeelding
cv2.tekencontouren(Originele afbeelding, [schermCnt], -1, (0, 255, 0), 3)
cv2.imshow("gedetecteerd kenteken", Originele afbeelding )

Na het herhalen heeft uw programma de contour met de kentekenplaat geïdentificeerd. Het tekent alleen op de contour van de kentekenplaat.

5. Herkennen van de gedetecteerde kentekenplaat

Het herkennen van de kentekenplaat betekent het lezen van de tekens op de uitgesneden afbeelding van de kentekenplaat. Laad de kentekenplaatafbeelding die u eerder hebt opgeslagen en geef deze weer. Bel dan de pytesseract.image_to_string functie en geef de bijgesneden kentekenplaat door. Deze functie converteert de karakters in de afbeelding naar een string.

# bestandsnaam van de bijgesneden kentekenplaatafbeelding
cropped_License_Plate = './7.png'
cv2.imshow("bijgesnedenlicentiebord", cv2.imlezen(cropped_License_Plate))

# converteert de kentekentekens naar string
text = pytesseract.image_to_string (cropped_License_Plate, lang='eng')

De bijgesneden kentekenplaat wordt hieronder weergegeven. De tekens erop zullen de uitvoer zijn die u later op het scherm zult afdrukken.

Nadat u de kentekenplaat heeft gedetecteerd en herkend, bent u klaar om de uitvoer weer te geven.

6. De uitvoer weergeven

Dit is de laatste stap. U drukt de geëxtraheerde tekst af op het scherm. Deze tekst bevat de karakters van het kenteken.

afdrukken("Kenteken is:", tekst)
cv2.wachtSleutel(0)
cv2.destroyAllWindows()

De verwachte uitvoer van het programma zou vergelijkbaar moeten zijn met de afbeelding hieronder:

De kentekentekst is te zien op de terminal.

Scherp je Python-vaardigheden aan

Het detecteren en herkennen van autokentekenplaten in Python is een interessant project om aan te werken. Het is een uitdaging, dus het zou je moeten helpen om meer over Python te leren.

Als het op programmeren aankomt, is oefenen de kern van de beheersing van een taal. Om je vaardigheden te oefenen, moet je aan interessante projecten werken.