Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo. Preberi več.

Tehnologija zaznavanja in prepoznavanja registrskih tablic ima veliko aplikacij. Uporablja se lahko v cestnih sistemih, na parkiriščih brez vstopnic, v domovih za nadzor dostopa vozil itd. Ta tehnologija združuje računalniški vid in umetno inteligenco.

Za ustvarjanje programa za zaznavanje in prepoznavanje registrskih tablic boste uporabili Python. Program bo vzel vhodno sliko, jo obdelal za zaznavanje in prepoznavanje registrske tablice ter na koncu kot izhod prikazal znake registrske tablice.

Nastavitev okolja Python

Če želite udobno slediti tej vadnici, morate poznati osnove Pythona. To se začne z nastavitvijo okolja programa.

Preden začnete kodirati, morate v svoje okolje namestiti nekaj knjižnic. Odprite kateri koli Python IDE in ustvarite datoteko Python. Zaženite vsak ukaz na terminalu, da namestite ustrezno knjižnico. Moral bi imeti predhodno namestitev Python PIP na vaš računalnik.

instagram viewer
  • OpenCV-Python: To knjižnico boste uporabili za predhodno obdelavo vhodne slike in prikaz različnih izhodnih slik.
    pip namestite OpenCV-Python
  • imutils: To knjižnico boste uporabili za obrezovanje izvirne vhodne slike na želeno širino.
    pip namestite imutils
  • pytesseract: To knjižnico boste uporabili za ekstrahiranje znakov registrske tablice in njihovo pretvorbo v nize.
    pip namestite pytesseract
    Knjižnica pytesseract temelji na Tesseract OCR motor za prepoznavanje znakov.

Kaj je Tesseract OCR in kako ga namestiti v računalnik

Tesseract OCR je motor, ki lahko prepoznati jezikovne znake. Pred uporabo knjižnice pytesseract ga morate namestiti v svoj računalnik. Narediti tako:

  1. Odprite kateri koli brskalnik, ki temelji na Chromu
  2. Prenesite Tesseract OCR nastaviti
  3. Zaženite namestitev in jo namestite kot vsak drug program

Ko ste pripravili okolje in namestili tesseract OCR, ste pripravljeni na kodiranje programa.

1. Uvažanje knjižnic

Začnite z uvozom knjižnic, ki ste jih namestili v okolje. Uvoz knjižnic vam omogoča klic in uporabo njihovih funkcij v projektu.

uvoz cv2
uvoz imutils
uvoz pytesseract

Uvoziti morate OpenCV-Python knjižnica kot cv2. Uvozite druge knjižnice z istimi imeni, ki ste jih uporabili za njihovo namestitev.

2. Sprejemanje vnosa

Nato usmerite pytesseract na lokacijo, kjer je nameščen motor Tesseract. Vzemite sliko avtomobila kot vhod z uporabo cv2.imread funkcijo. Zamenjajte ime slike z imenom slike, ki jo uporabljate. Shranite sliko v isto mapo kot vaš projekt, da bodo stvari enostavne.

pytesseract.pytesseract.tesseract_cmd = 'C:\\Programske datoteke\\Tesseract-OCR\\tesseract.exe'
izvirna_slika = cv2.imread('image3.jpeg')

Naslednjo vhodno sliko lahko zamenjate s tisto, ki jo želite uporabiti.

3. Predhodna obdelava vnosa

Spremenite velikost slike na 500 slikovnih pik. Nato pretvorite sliko v sivine kot Canny funkcija zaznavanja robov deluje samo s slikami v sivinah. Končno pokličite dvostranski filter funkcijo za zmanjšanje šuma na sliki.

originalna_slika = imutils.resize (originalna_slika, širina=500)
siva_slika = cv2.cvtColor (izvirna_slika, cv2.COLOR_BGR2GRAY)
siva_slika = cv2.bilateralni filter (siva_slika, 11, 17, 17)

4. Zaznavanje registrske tablice na vhodu

Zaznavanje registrske tablice je postopek določanja dela na avtomobilu, ki ima znake registrske tablice.

Izvajanje zaznavanja robov

Začnite tako, da pokličete cv2.Canny funkcijo, ki samodejno zazna robove na predhodno obdelani sliki.

obrobljena_slika = cv2.Canny (siva_slika, 30, 200)

Iz teh robov bomo našli konture.

Iskanje kontur

Pokličite cv2.findContours funkcijo in posredujte kopijo obrobljena slika. Ta funkcija bo zaznala konture. Narišite okoli zaznanih kontur na izvirni sliki z uporabo cv2.drawContours funkcijo. Nazadnje oddajte originalno sliko z vsemi narisanimi vidnimi obrisi.

konture, novo = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = original_image.copy()
cv2.drawContours(img1, konture, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)

Program razločno izriše vse konture, ki jih najde na sliki avtomobila.

Ko najdete konture, jih morate razvrstiti, da prepoznate najboljše kandidate.

Razvrščanje kontur

Razvrstite konture glede na najmanjšo površino 30. Prezrite tiste pod tem, saj je manj verjetno, da so obris registrske tablice. Naredite kopijo izvirne slike in narišite top 30 konture na sliki. Nazadnje prikažite sliko.

konture = razvrščeno (konture, ključ = cv2.contourArea, obratno = Prav)[:30]

# shrani obris registrske tablice
screenCnt = Noben
img2 = original_image.copy()

# nariše prvih 30 kontur
cv2.drawContours(img2, konture, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)

Zdaj je kontur manj kot na začetku. Edini narisani obrisi so tisti, ki vsebujejo registrsko tablico.

Nazadnje se morate pomakniti čez razvrščene konture in ugotoviti, katera je registrska tablica.

Zanka čez 30 najboljših kontur

Ustvarite zanko za zanko čez konture. Poiščite konturo s štirimi vogali in določite njen obseg in koordinate. Shranite sliko konture, ki vsebuje registrsko tablico. Na koncu narišite konturo registrske tablice na izvirno sliko in jo prikažite.

štetje = 0
idx = 7

za c v konturah:
# približati obris registrske tablice
contour_perimeter = cv2.arcLength (c, Prav)
približno = cv2.approxPolyDP(c, 0.018 * contour_perimeter, Prav)

# Poiščite konture s 4 vogali
čelen(približno)== 4:
screenCnt = pribl

# poiščite koordinate obrisa registrske tablice
x, y, w, h = cv2.boundingRect (c)
nova_slika = izvirna_slika [ y: y + h, x: x + w]

# shrani novo sliko
cv2.imwrite('./'+str (idx)+'.png',nova_img)
idx += 1
odmor

# nariše konturo registrske tablice na izvirno sliko
cv2.drawContours(izvirna_slika, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("zaznana registrska tablica", izvirna_slika )

Po zanki je vaš program prepoznal konturo, ki vsebuje registrsko tablico. Riše samo na obris registrske tablice.

5. Prepoznavanje zaznane registrske tablice

Prepoznavanje registrske tablice pomeni branje znakov na obrezani sliki registrske tablice. Naložite sliko registrske tablice, ki ste jo predhodno shranili, in jo prikažite. Nato pokličite pytesseract.image_to_string funkcijo in prenese obrezano sliko registrske tablice. Ta funkcija pretvori znake na sliki v niz.

# ime datoteke obrezane slike registrske tablice
obrezana_registrska_tablica = './7.png'
cv2.imshow("obrezanodovoljenjeplošča", cv2.imread(obrezana_registrska_tablica))

# pretvori znake registrske tablice v niz
besedilo = pytesseract.image_to_string (obrezana_registrska_tablica, lang='eng')

Spodaj je prikazana obrezana registrska tablica. Znaki na njem bodo rezultat, ki ga boste pozneje natisnili na zaslon.

Ko ste zaznali in prepoznali registrsko tablico, ste pripravljeni na prikaz izpisa.

6. Prikaz izhoda

To je zadnji korak. Izvlečeno besedilo natisnete na zaslon. To besedilo vsebuje znake registrske tablice.

tiskanje("Registrska tablica je:", besedilo)
cv2.waitKey(0)
cv2.destroyAllWindows()

Pričakovani rezultat programa bi moral biti podoben spodnji sliki:

Besedilo registrske tablice je vidno na terminalu.

Izostrite svoje znanje Pythona

Zaznavanje in prepoznavanje avtomobilskih tablic v Pythonu je zanimiv projekt za delo. Je zahtevno, zato bi vam moralo pomagati, da izveste več o Pythonu.

Ko gre za programiranje, je praksa bistvena za obvladovanje jezika. Če želite vaditi svoje sposobnosti, morate delati na zanimivih projektih.