Lesere som deg er med på å støtte MUO. Når du foretar et kjøp ved å bruke lenker på nettstedet vårt, kan vi tjene en tilknyttet provisjon. Les mer.

Teknologi for registrering og gjenkjenning av registreringsskilt har mange bruksområder. Den kan brukes i veisystemer, billettløse parkeringsplasser, boliger med adgangskontroll for kjøretøy og mer. Denne teknologien kombinerer datasyn og kunstig intelligens.

Du vil bruke Python til å lage et registrerings- og gjenkjenningsprogram for registreringsskilt. Programmet vil ta inndatabildet, behandle det for å oppdage og gjenkjenne bilskiltet, og til slutt vise tegnene på bilskiltet som utdata.

Sette opp Python-miljøet

For å kunne følge denne opplæringen komfortabelt, må du være kjent med Python-grunnleggende. Dette starter med å sette opp programmets miljø.

Før du begynner å kode, må du installere noen biblioteker i miljøet ditt. Åpne hvilken som helst Python IDE og lag en Python-fil. Kjør hver kommando på terminalen for å installere det respektive biblioteket. Du bør ha en forut installasjon av Python PIP på datamaskinen din.

instagram viewer
  • OpenCV-Python: Du vil bruke dette biblioteket til å forhåndsbehandle inndatabildet og vise ulike utdatabilder.
    pip installere OpenCV-Python
  • imutils: Du vil bruke dette biblioteket til å beskjære det originale inndatabildet til ønsket bredde.
    pip installere imutils
  • pytesseract: Du vil bruke dette biblioteket til å trekke ut tegnene på lisensplaten og konvertere dem til strenger.
    pip installere pytesseract
    Pytesseract-biblioteket er avhengig av Tesseract OCR motor for karaktergjenkjenning.

Hva Tesseract OCR er og hvordan du installerer det på datamaskinen din

Tesseract OCR er en motor som kan gjenkjenne et språks tegn. Du bør installere det på datamaskinen din før du bruker pytesseract-biblioteket. Å gjøre slik:

  1. Åpne en hvilken som helst Chrome-basert nettleser
  2. Last ned Tesseract OCR oppsett
  3. Kjør oppsettet og installer det som alle andre programmer

Etter å ha forberedt miljøet og installert tesseract OCR, er du klar til å kode programmet.

1. Importerer bibliotekene

Begynn med å importere bibliotekene du installerte i miljøet. Ved å importere bibliotekene kan du ringe og bruke funksjonene deres i prosjektet.

import cv2
import imutils
import pytesseract

Du må importere OpenCV-Python bibliotek som cv2. Importer de andre bibliotekene med de samme navnene du brukte til å installere dem.

2. Tar innspillet

Pek deretter pytesseract til stedet der Tesseract-motoren er installert. Ta bilbildet som inngang ved å bruke cv2.imread funksjon. Erstatt bildenavnet med navnet på bildet du bruker. Lagre bildet i samme mappe som prosjektet ditt for å gjøre det enkelt.

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

Du kan erstatte følgende inngangsbilde med det du vil bruke.

3. Forbehandling av inngangen

Endre størrelsen på bildebredden til 500 piksler. Konverter deretter bildet til gråtoner som canny edge deteksjonsfunksjon fungerer kun med gråtonebilder. Ring til slutt bilateralt filter funksjon for å redusere støyen i bildet.

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

4. Finner registreringsskiltet på inngangen

Å oppdage bilskiltet er prosessen med å bestemme delen på bilen som har tegnene til bilskiltet.

Utfører kantdeteksjon

Begynn med å ringe cv2.Canny funksjon som automatisk oppdager kantene på det forhåndsbehandlede bildet.

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

Det er fra disse kantene vi finner konturene.

Finne konturene

Ring cv2.findContours funksjon og send en kopi av kantet bilde. Denne funksjonen vil oppdage konturene. Tegn rundt de oppdagede konturene på originalbildet ved hjelp av cv2.drawContours funksjon. Til slutt skriver du ut originalbildet med alle de synlige konturene 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 konturene som det finner på bilbildet særpreget.

Etter å ha funnet konturene må du sortere dem for å identifisere de beste kandidatene.

Sortering av konturene

Sorter konturene basert på minimumsareal 30. Ignorer de nedenfor, da det er mindre sannsynlig at de er konturene på bilskiltet. Lag en kopi av originalbildet og tegn topp 30 konturer på bildet. Vis til slutt bildet.

konturer = sortert (konturer, nøkkel = cv2.contourArea, revers = ekte)[:30]

# lagrer skiltkonturen
screenCnt = Ingen
img2 = original_image.copy()

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

Det er nå færre konturer enn det var i begynnelsen. De eneste konturene som er tegnet er de som er tilnærmet til å inneholde bilskiltet.

Til slutt må du gå over de sorterte konturene og finne ut hvilken som er nummerskiltet.

Looping over de 30 beste konturene

Lag en for løkke til løkke over konturene. Se etter konturen med fire hjørner, og bestem dens omkrets og koordinater. Lagre bildet av konturen som inneholder bilskiltet. Til slutt tegner du skiltkonturen på originalbildet og viser det.

telle = 0
idx = 7

for c i konturer:
# tilnærme skiltkonturen
contour_perimeter = cv2.arcLength (c, ekte)
ca = cv2.approxPolyDP(c, 0.018 * contour_perimeter, ekte)

# Se etter konturer med 4 hjørner
hvislen(ca.)== 4:
skjermCnt = ca

# finn koordinatene til skiltkonturen
x, y, w, h = cv2.boundingRect (c)
new_img = original_image [ y: y + h, x: x + w]

# lagrer det nye bildet
cv2.imwrite('./'+str (idx)+'.png',new_img)
idx += 1
gå i stykker

# tegner skiltkonturen på originalbildet
cv2.drawContours(original_image, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("oppdaget skilt", original_image )

Etter looping har programmet identifisert konturen som inneholder bilskiltet. Den tegner kun på skiltkonturen.

5. Gjenkjenner det oppdagede registreringsskiltet

Å gjenkjenne nummerplaten betyr å lese tegnene på det beskårede bildet av bilskiltet. Last inn bilskiltbildet du tidligere har lagret og vis det. Deretter ringer du pytesseract.image_to_string funksjon og send det beskårede bilskiltbildet. Denne funksjonen konverterer tegnene i bildet til en streng.

# filnavn på det beskårede lisensplatebildet
cropped_License_Plate = './7.png'
cv2.imshow("beskårettillatelsetallerken", cv2.imread(cropped_License_Plate))

# konverterer nummerskilttegnene til streng
text = pytesseract.image_to_string (copped_License_Plate, lang='eng')

Det beskårede nummerskiltet er vist nedenfor. Tegnene på den vil være utdataene du senere vil skrive ut på skjermen.

Etter å ha oppdaget og gjenkjent lisensplaten, er du klar til å vise utdataene.

6. Viser utdata

Dette er det siste trinnet. Du skriver ut den utpakkede teksten til skjermen. Denne teksten inneholder tegnene på bilskiltet.

skrive ut("Lisensskilt er:", tekst)
cv2.waitKey(0)
cv2.destroyAllWindows()

Den forventede produksjonen av programmet skal være lik bildet nedenfor:

Nummerskiltteksten kan sees på terminalen.

Skjerp Python-ferdighetene dine

Å oppdage og gjenkjenne bilskilt i Python er et interessant prosjekt å jobbe med. Det er utfordrende, så det bør hjelpe deg å lære mer om Python.

Når det gjelder programmering, er øvelse kjernen i mestring av et språk. For å øve på ferdighetene dine, må du jobbe med interessante prosjekter.