Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

Technologie detekce a rozpoznávání SPZ má mnoho aplikací. Může být použit v silničních systémech, parkovištích bez lístků, rezidencích s kontrolou přístupu vozidel a další. Tato technologie kombinuje počítačové vidění a umělou inteligenci.

Python použijete k vytvoření programu pro detekci a rozpoznávání SPZ. Program pořídí vstupní obrázek, zpracuje jej k detekci a rozpoznání SPZ a nakonec zobrazí znaky SPZ jako výstup.

Nastavení prostředí Python

Abyste mohli pohodlně projít tímto návodem, musíte se seznámit se základy Pythonu. To začíná nastavením prostředí programu.

Než začnete kódovat, musíte do svého prostředí nainstalovat některé knihovny. Otevřete libovolné IDE Python a vytvořte soubor Python. Spuštěním každého příkazu na terminálu nainstalujte příslušnou knihovnu. Měli byste mít předchůdce instalace Pythonu PIP na váš počítač.

instagram viewer
  • OpenCV-Python: Tuto knihovnu použijete pro předběžné zpracování vstupního obrazu a zobrazení různých výstupních obrazů.
    pip Nainstalujte OpenCV-Python
  • imutils: Tuto knihovnu použijete k oříznutí původního vstupního obrázku na požadovanou šířku.
    pip Nainstalujte imutils
  • pytesseract: Tuto knihovnu použijete k extrahování znaků SPZ a jejich převodu na řetězce.
    pip Nainstalujte pytesseract
    Knihovna pytesseract spoléhá na Tesseract OCR motor pro rozpoznávání znaků.

Co je Tesseract OCR a jak jej nainstalovat do počítače

Tesseract OCR je engine, který to umí rozpoznat znaky jazyka. Před použitím knihovny pytesseract byste ji měli nainstalovat do počítače. Udělat to tak:

  1. Otevřete jakýkoli prohlížeč založený na Chrome
  2. Stáhněte si Tesseract OCR založit
  3. Spusťte instalaci a nainstalujte ji jako jakýkoli jiný program

Po přípravě prostředí a instalaci tesseract OCR jste připraveni program kódovat.

1. Import knihoven

Začněte importem knihoven, které jste nainstalovali do prostředí. Import knihoven umožňuje volat a používat jejich funkce v projektu.

import cv2
import imutils
import pytesseract

Musíte importovat OpenCV-Python knihovna jako cv2. Importujte ostatní knihovny se stejnými názvy, které jste použili k jejich instalaci.

2. Přebírání vstupu

Poté nasměrujte pytesseract na místo, kde je nainstalován engine Tesseract. Vezměte obrázek auta jako vstup pomocí cv2.imread funkce. Nahraďte název obrázku názvem obrázku, který používáte. Uložte obrázek do stejné složky jako váš projekt, aby bylo vše snadné.

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

Následující vstupní obrázek můžete nahradit tím, který byste chtěli použít.

3. Předzpracování vstupu

Změňte šířku obrázku na 500 pixelů. Poté převeďte obrázek do stupňů šedi jako šikovná funkce detekce hran funguje pouze s obrázky ve stupních šedi. Nakonec zavolejte na bilaterální Filtr funkce pro snížení šumu v obrazu.

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

4. Detekce SPZ na vstupu

Detekce SPZ je proces určení dílu na voze, který má znaky SPZ.

Provádění detekce hran

Začněte zavoláním na cv2.Canny funkce, která automaticky rozpozná okraje na předzpracovaném snímku.

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

Právě z těchto hran najdeme obrysy.

Hledání obrysů

Zavolej cv2.findContours funkce a předejte kopii lemovaný obrázek. Tato funkce rozpozná obrysy. Nakreslete kolem detekovaných kontur na původním obrázku pomocí cv2.drawContours funkce. Nakonec vytiskněte původní obrázek se všemi nakreslenými viditelnými obrysy.

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

Program výrazně vykreslí všechny kontury, které najde na obrázku vozu.

Po nalezení obrysů je musíte seřadit, abyste určili nejlepší kandidáty.

Třídění obrysů

Seřaďte obrysy podle minimální plochy 30. Níže uvedené položky ignorujte, protože je méně pravděpodobné, že se budou jednat o obrys SPZ. Vytvořte kopii původního obrázku a nakreslete jej top 30 kontury na obrázku. Nakonec zobrazte obrázek.

obrysy = seřazené (obrysy, klíč = cv2.contourArea, reverzní = Skutečný)[:30]

# uloží obrys SPZ
screenCnt = Žádný
img2 = original_image.copy()

# nakreslí 30 horních vrstevnic
cv2.drawContours(img2, obrysy, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)

Nyní je vrstevnic méně než na začátku. Jediné nakreslené obrysy jsou ty, které se přibližují tak, aby obsahovaly SPZ.

Nakonec musíte projít setříděné obrysy a určit, který z nich je SPZ.

Smyčka přes 30 nejlepších vrstevnic

Vytvořte smyčku for pro smyčku přes obrysy. Hledejte obrys se čtyřmi rohy a určete jeho obvod a souřadnice. Uložte obrázek obrysu obsahující SPZ. Nakonec nakreslete obrys SPZ na původní obrázek a zobrazte jej.

počet = 0
idx = 7

pro c v obrysech:
# přibližte obrys SPZ
obrys_obvod = cv2.arcLength (c, Skutečný)
cca = cv2.approxPolyDP(c, 0.018 * obrys_obvod, Skutečný)

# Hledejte obrysy se 4 rohy
-lilen(Cca)== 4:
screenCnt = přibl

# najít souřadnice obrysu SPZ
x, y, š, v = cv2.boundingRect (c)
new_img = původní_obrázek [ y: y + v, x: x + š]

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

# nakreslí obrys SPZ na původní obrázek
cv2.drawContours(původní_obrázek, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("zjištěná SPZ", původní_obrázek )

Po smyčkování váš program identifikoval obrys obsahující SPZ. Kreslí pouze obrys SPZ.

5. Rozpoznání zjištěné SPZ

Rozpoznat SPZ znamená přečíst znaky na oříznutém obrázku SPZ. Načtěte dříve uložený obrázek SPZ a zobrazte jej. Poté zavolejte na pytesseract.image_to_string funkci a předat oříznutý obrázek SPZ. Tato funkce převede znaky v obrázku na řetězec.

# název souboru oříznutého obrázku SPZ
cropped_License_Plate = './7.png'
cv2.imshow("oříznutélicencetalíř", cv2.imread(cropped_Plate_Plate))

# převede znaky SPZ na řetězec
text = pytesseract.image_to_string (cropped_License_Plate, lang='eng')

Oříznutá SPZ je zobrazena níže. Znaky na něm budou výstupem, který později vytisknete na obrazovku.

Po zjištění a rozpoznání SPZ jste připraveni zobrazit výstup.

6. Zobrazení výstupu

Toto je poslední krok. Extrahovaný text vytisknete na obrazovku. Tento text obsahuje znaky SPZ.

tisk("SPZ je:", text)
cv2.waitKey(0)
cv2.destroyAllWindows()

Očekávaný výstup programu by měl být podobný obrázku níže:

Text SPZ je vidět na terminálu.

Vylepšete své dovednosti Python

Detekce a rozpoznávání poznávacích značek aut v Pythonu je zajímavý projekt, na kterém se dá pracovat. Je to náročné, takže by vám to mělo pomoci dozvědět se více o Pythonu.

Pokud jde o programování, praxe je základem zvládnutí jazyka. Chcete-li procvičit své dovednosti, musíte pracovat na zajímavých projektech.