Läsare som du hjälper till att stödja MUO. När du gör ett köp med hjälp av länkar på vår webbplats kan vi tjäna en affiliate-provision. Läs mer.

Teknik för registrering och igenkänning av registreringsskyltar har många tillämpningar. Den kan användas i vägsystem, biljettfria parkeringsplatser, tillträdeskontrollbostäder för fordon och mer. Denna teknik kombinerar datorseende och artificiell intelligens.

Du kommer att använda Python för att skapa ett registrerings- och igenkänningsprogram för registreringsskyltar. Programmet kommer att ta ingångsbilden, bearbeta den för att upptäcka och känna igen registreringsskylten och slutligen visa tecken på registreringsskylten som utdata.

Konfigurera Python-miljön

För att enkelt kunna följa den här handledningen måste du vara bekant med Python-grunderna. Detta börjar med att ställa in programmets miljö.

Innan du börjar koda måste du installera några bibliotek i din miljö. Öppna valfri Python IDE och skapa en Python-fil. Kör varje kommando på terminalen för att installera respektive bibliotek. Du borde ha ett förhand

instagram viewer
installation av Python PIP på din dator.

  • OpenCV-Python: Du kommer att använda det här biblioteket för att förbehandla ingångsbilden och visa olika utdatabilder.
    pip Installera OpenCV-Python
  • imutils: Du kommer att använda det här biblioteket för att beskära originalbilden till önskad bredd.
    pip Installera imutils
  • pytesseract: Du kommer att använda det här biblioteket för att extrahera tecknen på registreringsskylten och konvertera dem till strängar.
    pip Installera pytesseract
    Pytesseract-biblioteket förlitar sig på Tesseract OCR motor för teckenigenkänning.

Vad Tesseract OCR är och hur man installerar det på din dator

Tesseract OCR är en motor som kan känna igen ett språks tecken. Du bör installera det på din dator innan du använder pytesseract-biblioteket. Att göra så:

  1. Öppna valfri Chrome-baserad webbläsare
  2. Ladda ner Tesseract OCR uppstart
  3. Kör installationen och installera den som alla andra program

Efter att ha förberett miljön och installerat tesseract OCR är du redo att koda programmet.

1. Importera biblioteken

Börja med att importera de bibliotek du installerade i miljön. Genom att importera biblioteken kan du ringa och använda deras funktioner i projektet.

importera cv2
importera imutils
importera pytesseract

Du måste importera OpenCV-Python bibliotek som cv2. Importera de andra biblioteken med samma namn som du använde för att installera dem.

2. Tar ingången

Peka sedan pytesseract till platsen där Tesseract-motorn är installerad. Ta bilbilden som indata med hjälp av cv2.imread fungera. Ersätt bildnamnet med namnet på bilden du använder. Lagra bilden i samma mapp som ditt projekt för att göra det enkelt.

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

Du kan ersätta följande ingångsbild med den du vill använda.

3. Förbearbetning av ingången

Ändra storlek på bildens bredd till 500 pixlar. Konvertera sedan bilden till gråskala som canny edge detekteringsfunktion fungerar bara med gråskalebilder. Ring slutligen bilateralt filter funktion för att minska bruset i bilden.

original_image = imutils.resize (original_image, width=500 )
gray_image = cv2.cvtColor (original_image, cv2.COLOR_BGR2GRAY)
grå_bild = cv2.bilateralFilter (grå_bild, 11, 17, 17)

4. Upptäcker registreringsskylten på ingången

Att upptäcka registreringsskylten är processen för att fastställa vilken del på bilen som har tecken på registreringsskylten.

Utför kantdetektering

Börja med att ringa till cv2.Canny funktion som automatiskt upptäcker kanterna på den förbehandlade bilden.

edged_image = cv2.Canny (grå_bild, 30, 200)

Det är från dessa kanter vi hittar konturerna.

Hitta konturerna

Ring cv2.findContours funktion och skicka en kopia av kantad bild. Denna funktion kommer att upptäcka konturerna. Rita runt de upptäckta konturerna på originalbilden med hjälp av cv2.drawContours fungera. Slutligen, mata ut originalbilden med alla synliga konturer ritade.

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 ritar alla konturer som det hittar på bilbilden distinkt.

När du har hittat konturerna måste du sortera dem för att identifiera de bästa kandidaterna.

Sortera konturerna

Sortera konturerna baserat på minsta area 30. Ignorera de nedanför eftersom det är mindre troligt att de är registreringsskyltens kontur. Gör en kopia av originalbilden och rita topp 30 konturer på bilden. Till sist, visa bilden.

konturer = sorterade (konturer, nyckel = cv2.contourArea, omvänd = Sann)[:30]

# lagrar registreringsskyltens kontur
screenCnt = Ingen
img2 = original_image.copy()

# ritar topp 30 konturer
cv2.drawContours(img2, konturer, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)

Det finns nu färre konturer än vad det var i början. De enda konturerna som ritas är de som beräknas innehålla registreringsskylten.

Slutligen måste du slinga över de sorterade konturerna och bestämma vilken som är nummerskylten.

Slinga över de 30 bästa konturerna

Skapa en för loop till loop över konturerna. Leta efter konturen med fyra hörn och bestäm dess omkrets och koordinater. Lagra bilden av konturen som innehåller registreringsskylten. Rita slutligen registreringsskyltens kontur på originalbilden och visa den.

räkna = 0
idx = 7

för c i konturer:
# approximera registreringsskyltens kontur
contour_perimeter = cv2.arcLength (c, Sann)
ungefär = cv2.approxPolyDP(c, 0.018 * contour_perimeter, Sann)

# Leta efter konturer med 4 hörn
omlen(cirka)== 4:
skärmCnt = ca

# hitta koordinaterna för registreringsskyltens kontur
x, y, w, h = cv2.boundingRect (c)
new_img = original_bild [ y: y + h, x: x + w]

# lagrar den nya bilden
cv2.imwrite('./'+str (idx)+'.png',new_img)
idx += 1
ha sönder

# ritar registreringsskyltens kontur på originalbilden
cv2.drawContours(original_bild, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("upptäckt registreringsskylt", original_bild )

Efter looping har ditt program identifierat konturen som innehåller registreringsskylten. Den ritar endast på registreringsskyltens kontur.

5. Känner igen den upptäckta registreringsskylten

Att känna igen registreringsskylten innebär att läsa tecknen på den beskurna bilden av registreringsskylten. Ladda registreringsskyltbilden som du tidigare lagrat och visa den. Ring sedan pytesseract.image_to_string funktion och skicka den beskurna registreringsskyltbilden. Denna funktion konverterar tecknen i bilden till en sträng.

# filnamn för den beskurna registreringsskyltbilden
cropped_License_Plate = './7.png'
cv2.imshow("beskurenlicenstallrik", cv2.imread(cropped_License_Plate))

# konverterar registreringsskyltens tecken till sträng
text = pytesseract.image_to_string (cropped_License_Plate, lang='eng')

Den beskurna registreringsskylten visas nedan. Tecknen på den kommer att vara den utdata som du senare kommer att skriva ut på skärmen.

Efter att ha upptäckt och känt igen registreringsskylten är du redo att visa utdata.

6. Visar utdata

Detta är det sista steget. Du skriver ut den extraherade texten på skärmen. Denna text innehåller tecknen på registreringsskylten.

skriva ut("Registreringsskylt är:", text)
cv2.waitKey(0)
cv2.destroyAllWindows()

Den förväntade produktionen av programmet bör likna bilden nedan:

Registreringsskyltens text kan ses på terminalen.

Skärpa dina Python-färdigheter

Att upptäcka och känna igen bilskyltar i Python är ett intressant projekt att arbeta med. Det är utmanande, så det borde hjälpa dig att lära dig mer om Python.

När det gäller programmering är övning kärnan för att behärska ett språk. För att öva upp dina färdigheter måste du arbeta med intressanta projekt.