Cititorii ca tine ajută la sprijinirea MUO. Când efectuați o achiziție folosind link-uri de pe site-ul nostru, este posibil să câștigăm un comision de afiliat. Citeşte mai mult.

Tehnologia de detectare și recunoaștere a plăcuțelor de înmatriculare are multe aplicații. Poate fi folosit în sistemele rutiere, în parcări fără bilete, în reședințe pentru controlul accesului vehiculelor și multe altele. Această tehnologie combină viziunea computerizată și inteligența artificială.

Veți folosi Python pentru a crea un program de detectare și recunoaștere a plăcuțelor de înmatriculare. Programul va prelua imaginea de intrare, o va procesa pentru a detecta și recunoaște plăcuța de înmatriculare și, în final, va afișa caracterele plăcuței de înmatriculare ca rezultat.

Configurarea mediului Python

Pentru a urma în mod confortabil acest tutorial, trebuie să fii familiarizat cu elementele de bază Python. Aceasta începe cu configurarea mediului programului.

Înainte de a începe codarea, trebuie să instalați câteva biblioteci în mediul dumneavoastră. Deschideți orice IDE Python și creați un fișier Python. Rulați fiecare comandă pe terminal pentru a instala biblioteca respectivă. Ar trebui să ai un prealabil

instagram viewer
instalarea Python PIP pe computer.

  • OpenCV-Python: Veți folosi această bibliotecă pentru preprocesarea imaginii de intrare și afișarea diferitelor imagini de ieșire.
    pip instalare OpenCV-Python
  • imutils: Veți folosi această bibliotecă pentru a decupa imaginea de intrare originală la lățimea dorită.
    pip instalare imutils
  • pytesseract: Veți folosi această bibliotecă pentru a extrage caracterele plăcuței de înmatriculare și a le converti în șiruri de caractere.
    pip instalare pytesseract
    Biblioteca pytesseract se bazează pe Tesseract OCR motor pentru recunoașterea caracterelor.

Ce este Tesseract OCR și cum se instalează pe computer

Tesseract OCR este un motor care poate recunoaște caracterele unei limbi. Ar trebui să îl instalați pe computer înainte de a utiliza biblioteca pytesseract. Pentru a face acest lucru:

  1. Deschideți orice browser bazat pe Chrome
  2. Descărcați Tesseract OCR înființat
  3. Rulați configurarea și instalați-o ca orice alt program

După ce ați pregătit mediul și ați instalat tesseract OCR, sunteți gata să codificați programul.

1. Importul bibliotecilor

Începeți prin a importa bibliotecile pe care le-ați instalat în mediu. Importul bibliotecilor vă permite să apelați și să utilizați funcțiile acestora în proiect.

import cv2
import imutils
import pytesseract

Trebuie să importați OpenCV-Python biblioteca ca cv2. Importați celelalte biblioteci folosind aceleași nume pe care le-ați folosit pentru a le instala.

2. Preluarea intrării

Apoi direcționați pytesseract către locația în care este instalat motorul Tesseract. Luați imaginea mașinii ca intrare folosind cv2.imread funcţie. Înlocuiți numele imaginii cu numele imaginii pe care o utilizați. Stocați imaginea în același folder ca și proiectul dvs. pentru a ușura lucrurile.

pytesseract.pytesseract.tesseract_cmd = „C:\\Program Files\\Tesseract-OCR\\tesseract.exe”
imagine_originală = cv2.imread(„image3.jpeg”)

Puteți înlocui următoarea imagine de intrare cu cea pe care doriți să o utilizați.

3. Preprocesarea intrării

Redimensionați lățimea imaginii la 500 de pixeli. Apoi convertiți imaginea în tonuri de gri ca funcția de detectare a marginilor canny funcționează numai cu imagini în tonuri de gri. În cele din urmă, sunați la bilateralFilter funcția de reducere a zgomotului din imagine.

imagine_originală = imutils.resize (imagine_originală, lățime=500)
imagine_gri = cv2.cvtColor (imagine_originală, cv2.COLOR_BGR2GRAY)
imagine_gri = cv2.bilateralFilter (imagine_gri, 11, 17, 17)

4. Detectarea plăcuței de înmatriculare pe intrare

Detectarea plăcuței de înmatriculare este procesul de determinare a piesei de pe mașină care are caracterele plăcuței de înmatriculare.

Efectuarea detectării marginilor

Începeți prin a suna la cv2.Canny funcție care va detecta automat marginile imaginii preprocesate.

edge_image = cv2.Canny (imagine_gri, 30, 200)

Din aceste margini vom găsi contururile.

Găsirea contururilor

Suna cv2.findContours funcția și transmiteți o copie a imagine tăiată. Această funcție va detecta contururile. Desenați în jurul contururilor detectate pe imaginea originală folosind cv2.drawContours funcţie. În cele din urmă, scoateți imaginea originală cu toate contururile vizibile desenate.

contururi, nou = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = imagine_originală.copie()
cv2.desenareContururi(img1, contururi, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)

Programul desenează distinct toate contururile pe care le găsește pe imaginea mașinii.

După ce ați găsit contururile, trebuie să le sortați pentru a identifica cei mai buni candidați.

Sortarea contururilor

Sortați contururile pe baza ariei minime 30. Ignorați-le pe cele de mai jos, deoarece este mai puțin probabil să fie conturul plăcuței de înmatriculare. Faceți o copie a imaginii originale și desenați top 30 contururi pe imagine. În cele din urmă, afișați imaginea.

contours = sortat (contururi, cheie = cv2.contourArea, invers = Adevărat)[:30]

# stochează conturul plăcuței de înmatriculare
screenCnt = Nici unul
img2 = imagine_originală.copie()

# desenează primele 30 de contururi
cv2.desenareContururi(img2, contururi, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)

Acum sunt mai puține contururi decât erau la început. Singurele contururi desenate sunt cele aproximative pentru a conține plăcuța de înmatriculare.

În cele din urmă, trebuie să treceți peste contururile sortate și să determinați care dintre ele este plăcuța de înmatriculare.

Buclă peste primele 30 de contururi

Creați o buclă for pentru a trece peste contururi. Căutați conturul cu patru colțuri și determinați-i perimetrul și coordonatele. Stocați imaginea conturului care conține plăcuța de înmatriculare. În cele din urmă, desenați conturul plăcuței de înmatriculare pe imaginea originală și afișați-o.

număr = 0
idx = 7

pentru c în contururi:
# aproximativ conturul plăcuței de înmatriculare
contour_perimeter = cv2.arcLength (c, Adevărat)
aproximativ = cv2.approxPolyDP(c, 0.018 * contour_perimeter, Adevărat)

# Căutați contururi cu 4 colțuri
dacălen(aproximativ)== 4:
screenCnt = aprox

# găsiți coordonatele conturului plăcuței de înmatriculare
x, y, w, h = cv2.boundingRect (c)
img_nouă = imagine_originală [ y: y + h, x: x + w]

# stochează noua imagine
cv2.imwrite('./'+str (idx)+„.png”,new_img)
idx += 1
pauză

# desenează conturul plăcuței de înmatriculare pe imaginea originală
cv2.desenareContururi(imagine_originală, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow(„Placă de înmatriculare detectată”, imagine_originală )

După loop, programul dumneavoastră a identificat conturul care conține plăcuța de înmatriculare. Desenează numai pe conturul plăcuței de înmatriculare.

5. Recunoașterea plăcuței de înmatriculare detectată

Recunoașterea plăcuței de înmatriculare înseamnă citirea caracterelor de pe imaginea decupată a plăcuței de înmatriculare. Încărcați imaginea plăcuței de înmatriculare pe care ați stocat-o anterior și afișați-o. Apoi, sunați la pytesseract.image_to_string funcția și transmiteți imaginea decupată a plăcuței de înmatriculare. Această funcție transformă caracterele din imagine într-un șir.

# nume de fișier al imaginii plăcuței de înmatriculare decupate
cropped_License_Plate = „./7.png”
cv2.imshow("decupatlicențăfarfurie", cv2.imread(cropped_License_Plate))

# convertește caracterele plăcuței de înmatriculare în șir
text = pytesseract.image_to_string (cropped_License_Plate, lang='eng')

Plăcuța de înmatriculare decupată este prezentată mai jos. Caracterele de pe acesta vor fi rezultatul pe care îl veți imprima ulterior pe ecran.

După ce ați detectat și recunoscut plăcuța de înmatriculare, sunteți gata să afișați rezultatul.

6. Afișarea ieșirii

Acesta este pasul final. Tipăriți textul extras pe ecran. Acest text conține caracterele plăcuței de înmatriculare.

imprimare(„Plăcuța de înmatriculare este:”, text)
cv2.waitTasta(0)
cv2.destroyAllWindows()

Rezultatul așteptat al programului ar trebui să fie similar cu imaginea de mai jos:

Textul plăcuței de înmatriculare poate fi văzut pe terminal.

Ascuțiți-vă abilitățile Python

Detectarea și recunoașterea plăcuțelor de înmatriculare ale mașinilor în Python este un proiect interesant la care se lucrează. Este o provocare, așa că ar trebui să vă ajute să aflați mai multe despre Python.

Când vine vorba de programare, practica este esențială pentru stăpânirea unui limbaj. Pentru a vă exersa abilitățile, trebuie să lucrați la proiecte interesante.