Az Önhöz hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk. Olvass tovább.

A rendszámfelismerő és -felismerési technológiának számos alkalmazása van. Használható útrendszerekben, jegy nélküli parkolókban, járművek beléptető állomásaiban stb. Ez a technológia egyesíti a számítógépes látást és a mesterséges intelligenciát.

A Python segítségével rendszámfelismerő és -felismerő programot hoz létre. A program elkészíti a bemeneti képet, feldolgozza a rendszám felismerésére és felismerésére, végül kimenetként megjeleníti a rendszám karaktereit.

A Python környezet beállítása

Az oktatóanyag kényelmes követéséhez ismernie kell a Python alapjait. Ez a program környezetének beállításával kezdődik.

A kódolás megkezdése előtt telepítenie kell néhány könyvtárat a környezetében. Nyissa meg bármelyik Python IDE-t, és hozzon létre egy Python-fájlt. Futtassa az egyes parancsokat a terminálon a megfelelő könyvtár telepítéséhez. Előzetesnek kell lennie Python PIP telepítése a számítógépére.

instagram viewer
  • OpenCV-Python: Ezt a könyvtárat fogja használni a bemeneti kép előfeldolgozására és a különböző kimeneti képek megjelenítésére.
    csipog telepítés OpenCV-Python
  • imutilok: Ezzel a könyvtárral vághatja le az eredeti bemeneti képet a kívánt szélességre.
    csipog telepítés imutilok
  • pytesseract: Ezt a könyvtárat fogja használni a rendszám karaktereinek kinyerésére és karakterláncokká alakítására.
    csipog telepítés pytesseract
    A pytesseract könyvtár a Tesseact OCR motor a karakterfelismeréshez.

Mi az a Tesseract OCR és hogyan kell telepíteni a számítógépére

A Tesseact OCR egy olyan motor, amely képes felismerni egy nyelv karaktereit. A pytesseract könyvtár használata előtt telepítse a számítógépére. Ehhez tegye a következőket:

  1. Nyissa meg bármelyik Chrome-alapú böngészőt
  2. Töltse le a Tesseact OCR beállít
  3. Futtassa a telepítőt, és telepítse, mint bármely más programot

A környezet előkészítése és a tesseract OCR telepítése után készen áll a program kódolására.

1. A könyvtárak importálása

Kezdje a környezetbe telepített könyvtárak importálásával. A könyvtárak importálása lehetővé teszi a függvények meghívását és használatát a projektben.

import cv2
import imutilok
import pytesseract

Importálnia kell a OpenCV-Python könyvtár as cv2. Importálja a többi könyvtárat ugyanazokkal a nevekkel, amelyekkel telepítette őket.

2. A bemenet felvétele

Ezután irányítsa a pytesseract-ot arra a helyre, ahol a Tesseract motor telepítve van. Vegye be az autó képét a segítségével cv2.imread funkció. Cserélje ki a kép nevét a használt kép nevére. Tárolja a képet ugyanabban a mappában, mint a projektet, hogy megkönnyítse a dolgokat.

pytesseract.pytesseract.tesseract_cmd = "C:\\Program Files\\Tesseract-OCR\\tesseract.exe"
eredeti_kép = cv2.imread("image3.jpeg")

A következő bemeneti képet lecserélheti arra, amelyet használni szeretne.

3. A bemenet előfeldolgozása

Méretezze át a kép szélességét 500 képpontra. Ezután konvertálja a képet szürkeárnyalatossá, mint a ravasz élérzékelés funkció csak szürkeárnyalatos képekkel működik. Végül hívja a kétoldalú szűrő funkció a képzaj csökkentésére.

eredeti_kép = imutils.resize (eredeti_kép, szélesség=500)
gray_image = cv2.cvtColor (eredeti_kép, cv2.COLOR_BGR2GRAY)
gray_image = cv2.bilateral Filter (gray_image, 11, 17, 17)

4. A rendszám felismerése a bemeneten

A rendszám felismerése az a folyamat, amelynek során meghatározzuk az autó azon alkatrészét, amelyen a rendszám karakterei vannak.

Élérzékelés végrehajtása

Kezdje azzal, hogy felhívja a cv2.Canny funkció, amely automatikusan felismeri az előfeldolgozott kép széleit.

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

Ezekről az élekről fogjuk megtalálni a kontúrokat.

A körvonalak megtalálása

Hívja a cv2.findContours funkciót, és adja át a szélű kép. Ez a funkció érzékeli a kontúrokat. Rajzolja körbe az észlelt kontúrokat az eredeti képen a segítségével cv2.drawContours funkció. Végül adja ki az eredeti képet az összes látható körvonallal.

kontúrok, új = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = eredeti_kép.copy()
cv2.rajz Kontúrok(img1, kontúrok, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)

A program jellegzetesen megrajzolja az összes kontúrt, amit az autó képén talál.

Miután megtalálta a kontúrokat, rendeznie kell őket, hogy azonosítsa a legjobb jelölteket.

A körvonalak rendezése

Rendezze a kontúrokat a minimális terület 30 alapján. Hagyja figyelmen kívül az alábbiakat, mert kevésbé valószínű, hogy a rendszám kontúrja. Készítsen másolatot az eredeti képről, és rajzolja meg a top 30 kontúrok a képen. Végül jelenítse meg a képet.

kontúrok = rendezve (kontúrok, kulcs = cv2.contourArea, fordított = Igaz)[:30]

# tárolja a rendszám kontúrját
screenCnt = Egyik sem
img2 = eredeti_kép.copy()

# megrajzolja a legjobb 30 kontúrt
cv2.rajz Kontúrok(img2, kontúrok, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)

Ma már kevesebb a kontúr, mint az elején. Csak azokat a körvonalakat rajzolják meg, amelyek hozzávetőlegesen tartalmazzák a rendszámot.

Végül át kell hurkolni a rendezett kontúrokat, és meg kell határozni, hogy melyik a rendszám.

Hurkolás a legjobb 30 kontúr felett

Hozzon létre egy for hurkot a kontúrok áthurkolásához. Keresse meg a négy sarkú kontúrt, és határozza meg kerületét és koordinátáit. Tárolja a rendszámot tartalmazó kontúr képét. Végül rajzolja meg az eredeti képre a rendszám kontúrját, és jelenítse meg.

szám = 0
idx = 7

c-hez kontúrokban:
# közelítse meg a rendszám körvonalát
contour_perimeter = cv2.arcLength (c, Igaz)
kb = cv2.approxPolyDP(c, 0.018 * contour_perimeter, Igaz)

# Keressen kontúrokat 4 sarokkal
halen(kb)== 4:
képernyőCnt = kb

# keresse meg a rendszám kontúrjának koordinátáit
x, y, w, h = cv2.boundingRect (c)
new_img = eredeti_kép [ y: y + h, x: x + w]

# tárolja az új képet
cv2.imwrite('./'+str (idx)+".png",új_img)
idx += 1
szünet

# megrajzolja a rendszám kontúrját az eredeti képen
cv2.rajz Kontúrok(eredeti_kép, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("észlelt rendszám", eredeti_kép )

A ciklus után a program azonosította a rendszámot tartalmazó kontúrt. Csak a rendszám kontúrjára rajzol.

5. Az észlelt rendszám felismerése

A rendszám felismerése a rendszám kivágott képén lévő karakterek leolvasását jelenti. Töltse be a korábban eltárolt rendszámot, és jelenítse meg. Ezután hívja a pytesseract.image_to_string funkciót, és adja át a levágott rendszámot. Ez a funkció a kép karaktereit karakterláncokká alakítja.

# a levágott rendszám képének fájlneve
cropped_License_Plate = './7.png'
cv2.imshow("vágvaengedélylemez", cv2.imread(cropped_License_Plate))

# a rendszám karaktereit karakterláncokká alakítja
text = pytesseract.image_to_string (cropped_License_Plate, lang="hun")

A levágott rendszám alább látható. A rajta lévő karakterek azok a kimenetek, amelyeket később a képernyőre nyomtat.

A rendszám felismerése és felismerése után készen áll a kimenet megjelenítésére.

6. A kimenet megjelenítése

Ez az utolsó lépés. A kivont szöveget kinyomtatja a képernyőre. Ez a szöveg a rendszám karaktereit tartalmazza.

nyomtatás("A rendszám:", szöveg)
cv2.várj Key(0)
cv2.destroyAllWindows()

A program várható kimenetének hasonlónak kell lennie az alábbi képhez:

A rendszámtábla szövege a terminálon látható.

Élesítse Python-készségeit

Az autók rendszámtábláinak észlelése és felismerése Pythonban érdekes projekt. Kihívást jelent, ezért segíteni fog, hogy többet tudjon meg a Pythonról.

Ami a programozást illeti, a gyakorlat a nyelv elsajátításának alapja. Képességeinek gyakorlásához érdekes projekteken kell dolgoznia.