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.
-
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.
A pytesseract könyvtár a Tesseact OCR motor a karakterfelismeréshez.csipog telepítés pytesseract
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:
- Nyissa meg bármelyik Chrome-alapú böngészőt
- Töltse le a Tesseact OCR beállít
- 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 = 7c-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.