Čitatelia ako vy pomáhajú podporovať MUO. Keď uskutočníte nákup pomocou odkazov na našej stránke, môžeme získať pridruženú províziu. Čítaj viac.

Technológia detekcie a rozpoznávania ŠPZ má mnoho aplikácií. Môže byť použitý v cestných systémoch, na parkoviskách bez lístkov, v rezidenciách s kontrolou prístupu vozidiel a podobne. Táto technológia spája počítačové videnie a umelú inteligenciu.

Python použijete na vytvorenie programu na detekciu a rozpoznávanie ŠPZ. Program zoberie vstupný obrázok, spracuje ho na zistenie a rozpoznanie ŠPZ a nakoniec zobrazí znaky ŠPZ ako výstup.

Nastavenie prostredia Python

Ak chcete pohodlne prejsť týmto tutoriálom, musíte sa oboznámiť so základmi Pythonu. Začína sa to nastavením prostredia programu.

Predtým, ako začnete s kódovaním, musíte do svojho prostredia nainštalovať nejaké knižnice. Otvorte ľubovoľné IDE Python a vytvorte súbor Python. Spustite každý príkaz na termináli a nainštalujte príslušnú knižnicu. Mali by ste mať vopred inštaláciu Python PIP na vašom počítači.

instagram viewer
  • OpenCV-Python: Túto knižnicu použijete na predbežné spracovanie vstupného obrazu a zobrazenie rôznych výstupných obrázkov.
    pip Inštalácia OpenCV-Python
  • imutils: Túto knižnicu použijete na orezanie pôvodného vstupného obrázka na požadovanú šírku.
    pip Inštalácia imutils
  • pytesseract: Túto knižnicu použijete na extrahovanie znakov ŠPZ a ich konverziu na reťazce.
    pip Inštalácia pytesseract
    Knižnica pytesseract sa spolieha na Tesseract OCR motor na rozpoznávanie znakov.

Čo je Tesseract OCR a ako ho nainštalovať do počítača

Tesseract OCR je motor, ktorý to dokáže rozpoznať znaky jazyka. Pred použitím knižnice pytesseract by ste ju mali nainštalovať do počítača. Urobiť tak:

  1. Otvorte ľubovoľný prehliadač založený na prehliadači Chrome
  2. Stiahnite si Tesseract OCR nastaviť
  3. Spustite inštaláciu a nainštalujte ju ako každý iný program

Po príprave prostredia a nainštalovaní tesseract OCR ste pripravení na kódovanie programu.

1. Importovanie knižníc

Začnite importovaním knižníc, ktoré ste nainštalovali v prostredí. Importovanie knižníc umožňuje volať a používať ich funkcie v projekte.

importovať cv2
importovať imutils
importovať pytesseract

Musíte importovať OpenCV-Python knižnica ako cv2. Importujte ostatné knižnice s rovnakými názvami, aké ste použili pri ich inštalácii.

2. Prevzatie vstupu

Potom nasmerujte pytesseract na miesto, kde je nainštalovaný engine Tesseract. Vezmite obrázok auta ako vstup pomocou cv2.imread funkciu. Nahraďte názov obrázka názvom obrázka, ktorý používate. Uložte obrázok do rovnakého priečinka ako váš projekt, aby bolo všetko jednoduché.

pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
pôvodný_obrázok = cv2.imread('image3.jpeg')

Nasledujúci vstupný obrázok môžete nahradiť tým, ktorý by ste chceli použiť.

3. Predspracovanie vstupu

Zmeňte veľkosť šírky obrázka na 500 pixelov. Potom preveďte obrázok do odtieňov sivej ako šikovná funkcia detekcie hrán funguje iba s obrázkami v odtieňoch sivej. Nakoniec zavolajte na bilaterálny filter funkcia na zníženie šumu v obraze.

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

4. Detekcia ŠPZ na vstupe

Detekcia ŠPZ je proces určenia dielu na aute, ktorý má znaky ŠPZ.

Vykonáva sa detekcia hrán

Začnite zavolaním na cv2.Canny funkcia, ktorá automaticky rozpozná okraje na predspracovanom obrázku.

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

Práve z týchto hrán nájdeme kontúry.

Hľadanie obrysov

Zavolajte na cv2.findContours funkciu a odovzdať kópiu okrajový obrázok. Táto funkcia rozpozná obrysy. Nakreslite okolo rozpoznaných kontúr na pôvodnom obrázku pomocou cv2.drawContours funkciu. Nakoniec vytlačte pôvodný obrázok so všetkými nakreslenými viditeľnými obrysmi.

obrysy, Nový = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = original_image.copy()
cv2.nakreslite obrysy(img1, kontúry, -1, (0, 255, 0), 3)
cv2.imshow("img1", obr.1)

Program výrazne vykreslí všetky kontúry, ktoré nájde na obrázku auta.

Po nájdení kontúr ich musíte zoradiť, aby ste identifikovali najlepších kandidátov.

Triedenie obrysov

Zoraďte obrysy podľa minimálnej plochy 30. Ignorujte tie nižšie, pretože je menej pravdepodobné, že ide o obrys poznávacej značky. Vytvorte kópiu pôvodného obrázka a nakreslite ho top 30 kontúry na obrázku. Nakoniec zobrazte obrázok.

obrysy = zoradené (obrysy, kľúč = cv2.contourArea, reverz = Pravda)[:30]

# uloží obrys ŠPZ
screenCnt = žiadne
img2 = original_image.copy()

# nakreslí 30 najlepších obrysov
cv2.nakreslite obrysy(img2, kontúry, -1, (0, 255, 0), 3)
cv2.imshow("img2", obr.2)

Teraz je kontúr menej ako na začiatku. Jediné nakreslené obrysy sú tie, ktoré sú približné tak, aby obsahovali ŠPZ.

Nakoniec musíte prejsť cez zoradené obrysy a určiť, ktorý z nich je poznávacou značkou.

Slučka cez 30 najlepších obrysov

Vytvorte slučku for pre slučku cez obrysy. Vyhľadajte obrys so štyrmi rohmi a určte jeho obvod a súradnice. Uložte obrázok obrysu obsahujúceho ŠPZ. Nakoniec nakreslite obrys ŠPZ na pôvodný obrázok a zobrazte ho.

počet = 0
idx = 7

pre c v obrysoch:
# priblížiť obrys ŠPZ
obrys_obvod = cv2.arcLength (c, Pravda)
cca = cv2.approxPolyDP(c, 0.018 * obrys_obvod, Pravda)

# Hľadajte kontúry so 4 rohmi
aklen(približne)== 4:
screenCnt = cca

# nájdite súradnice obrysu ŠPZ
x, y, š, v = cv2.boundingRect (c)
new_img = original_image [ y: y + v, x: x + w]

# uloží nový obrázok
cv2.imwrite('./'+str (idx)+'.png',new_img)
idx += 1
prestávka

# nakreslí obrys ŠPZ na pôvodný obrázok
cv2.nakreslite obrysy(pôvodný_obrázok, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("zistená poznávacia značka", pôvodný_obrázok )

Po slučke váš program identifikoval obrys obsahujúci poznávaciu značku. Kreslí iba obrys poznávacej značky.

5. Rozpoznanie zistenej ŠPZ

Rozpoznať ŠPZ znamená prečítať znaky na orezanom obrázku ŠPZ. Načítajte obrázok poznávacej značky, ktorý ste predtým uložili, a zobrazte ho. Potom zavolajte na pytesseract.image_to_string funkciu a odovzdať orezaný obrázok ŠPZ. Táto funkcia konvertuje znaky na obrázku na reťazec.

# názov súboru orezaného obrázka poznávacej značky
cropped_License_Plate = './7.png'
cv2.imshow("orezanélicenciutanier", cv2.imread(cropped_License_Plate))

# prevedie znaky ŠPZ na reťazec
text = pytesseract.image_to_string (cropped_License_Plate, lang='eng')

Orezaná poznávacia značka je zobrazená nižšie. Znaky na ňom budú výstupom, ktorý neskôr vytlačíte na obrazovku.

Po zistení a rozpoznaní ŠPZ ste pripravení zobraziť výstup.

6. Zobrazenie výstupu

Toto je posledný krok. Extrahovaný text vytlačíte na obrazovku. Tento text obsahuje znaky ŠPZ.

vytlačiť("ŠPZ je:", text)
cv2.waitKey(0)
cv2.destroyAllWindows()

Očakávaný výstup programu by mal byť podobný ako na obrázku nižšie:

Text ŠPZ je viditeľný na termináli.

Vylepšite svoje zručnosti Python

Detekcia a rozpoznávanie poznávacích značiek áut v Pythone je zaujímavý projekt, na ktorom sa dá pracovať. Je to náročné, takže by vám to malo pomôcť dozvedieť sa viac o Pythone.

Pokiaľ ide o programovanie, prax je základom zvládnutia jazyka. Ak chcete precvičiť svoje zručnosti, musíte pracovať na zaujímavých projektoch.