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.
-
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.
Knižnica pytesseract sa spolieha na Tesseract OCR motor na rozpoznávanie znakov.pip Inštalácia pytesseract
Č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:
- Otvorte ľubovoľný prehliadač založený na prehliadači Chrome
- Stiahnite si Tesseract OCR nastaviť
- 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 = 7pre 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.