Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu. Loe rohkem.

Numbrimärgi tuvastamise ja tuvastamise tehnoloogial on palju rakendusi. Seda saab kasutada teesüsteemides, piletita parklates, sõidukite juurdepääsukontrolli elamutes ja mujal. See tehnoloogia ühendab arvutinägemise ja tehisintellekti.

Numbrimärkide tuvastamise ja tuvastamise programmi loomiseks kasutate Pythonit. Programm võtab sisendpildi, töötleb seda numbrimärgi tuvastamiseks ja äratundmiseks ning lõpuks kuvab väljundina numbrimärgi märgid.

Pythoni keskkonna seadistamine

Selle õpetuse mugavaks järgimiseks peate olema tuttav Pythoni põhitõdedega. See algab programmi keskkonna seadistamisega.

Enne kodeerimise alustamist peate installima oma keskkonda mõned teegid. Avage mis tahes Pythoni IDE ja looge Pythoni fail. Vastava teegi installimiseks käivitage terminalis iga käsk. Sul peaks eelnev olema Python PIP installimine arvutisse.

  • OpenCV-Python: kasutate seda teeki sisendpildi eeltöötluseks ja erinevate väljundpiltide kuvamiseks.
    instagram viewer
    pip installida OpenCV-Python
  • imutils: kasutate seda teeki algse sisendpildi kärpimiseks soovitud laiuseks.
    pip installida imutils
  • pütesserakt: kasutate seda teeki numbrimärgi märkide eraldamiseks ja nende stringideks teisendamiseks.
    pip installida pütesserakt
    Pytesseracti teek tugineb Tesseact OCR mootor tegelaste tuvastamiseks.

Mis on Tesseract OCR ja kuidas seda arvutisse installida

Tesseract OCR on mootor, mis suudab tunnevad ära keele tähemärgid. Enne pytesseracti teegi kasutamist peaksite selle oma arvutisse installima. Selleks tehke järgmist.

  1. Avage mis tahes Chrome'i põhinev brauser
  2. Laadige alla Tesseact OCR seadistamine
  3. Käivitage seadistus ja installige see nagu mis tahes muu programm

Pärast keskkonna ettevalmistamist ja tesseract OCR-i installimist olete valmis programmi kodeerima.

1. Teekide importimine

Alustage keskkonda installitud teekide importimisega. Teekide importimine võimaldab helistada ja kasutada nende funktsioone projektis.

importida cv2
importida imutils
importida pütesserakt

Peate importima OpenCV-Python raamatukogu as cv2. Importige teised teegid samade nimedega, mida kasutasite nende installimisel.

2. Sisendi võtmine

Seejärel suunake pytesseract kohta, kuhu Tesseracti mootor on paigaldatud. Võtke auto pilt sisendiks, kasutades nuppu cv2.imread funktsiooni. Asendage pildi nimi kasutatava pildi nimega. Asjade hõlbustamiseks salvestage pilt projektiga samasse kausta.

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

Saate asendada järgmise sisendpildi kujutisega, mida soovite kasutada.

3. Sisestuse eeltöötlus

Muutke pildi laius 500 pikslini. Seejärel teisendage pilt halltooniks kaval serva tuvastamise funktsioon töötab ainult halltoonides piltidega. Lõpuks helistage kahepoolne filter funktsioon pildi müra vähendamiseks.

algne_pilt = imutils.resize (originaal_image, laius = 500)
gray_image = cv2.cvtColor (originaal_image, cv2.COLOR_BGR2GRAY)
gray_image = cv2.bilateralFilter (grey_image, 11, 17, 17)

4. Numbrimärgi tuvastamine sisendis

Numbrimärgi tuvastamine on protsess, mille käigus määratakse autol see osa, millel on numbrimärgi märgid.

Servatuvastuse teostamine

Alustage helistades cv2.Canny funktsioon, mis tuvastab automaatselt eeltöödeldud pildi servad.

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

Nendest servadest leiamegi kontuurid.

Kontuuride leidmine

Helistage cv2.findContours funktsiooni ja edastage koopia servaga pilt. See funktsioon tuvastab kontuurid. Joonistage tuvastatud kontuurid ümber originaalkujutisele, kasutades nuppu cv2.drawContours funktsiooni. Lõpuks väljastage originaalpilt koos kõigi joonistatud nähtavate kontuuridega.

kontuurid, uus = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = originaal_pilt.copy()
cv2.joonista Kontuurid(img1, kontuurid, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)

Programm joonistab kõik kontuurid, mis ta autopildilt leiab, eristavalt.

Pärast kontuuride leidmist peate need sorteerima, et tuvastada parimad kandidaadid.

Kontuuride sorteerimine

Sorteeri kontuurid minimaalse ala 30 alusel. Ignoreerige allolevaid, kuna need on väiksema tõenäosusega numbrimärgi kontuurid. Tehke originaalpildist koopia ja joonistage top 30 kontuurid pildil. Lõpuks kuvage pilt.

kontuurid = sorteeritud (kontuurid, võti = cv2.contourArea, tagurpidi = Tõsi)[:30]

# salvestab numbrimärgi kontuuri
screenCnt = Mitte ühtegi
img2 = originaal_pilt.copy()

# joonistab 30 parimat kontuuri
cv2.joonista Kontuurid(img2, kontuurid, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)

Nüüd on kontuure vähem kui alguses. Ainsad joonistatud kontuurid on need, mis ligikaudselt sisaldavad numbrimärki.

Lõpuks peate sorteeritud kontuurid üle tegema ja määrama, milline neist on numbrimärk.

Silmus üle 30 parima kontuuri

Loo silmus for kontuuride ületamiseks. Otsige üles nelja nurgaga kontuur ning määrake selle ümbermõõt ja koordinaadid. Salvestage numbrimärki sisaldava kontuuri kujutis. Lõpuks joonistage originaalpildile numbrimärgi kontuur ja kuvage see.

arv = 0
idx = 7

c kontuurides:
# ligikaudne numbrimärgi kontuur
contour_perimeter = cv2.arcLength (c, Tõsi)
umbkaudu = cv2.approxPolyDP(c, 0.018 * kontuur_perimeeter, Tõsi)

# Otsige 4 nurgaga kontuure
kuilen(umbes)== 4:
ekraani Cnt = u

# leidke numbrimärgi kontuuri koordinaadid
x, y, w, h = cv2.boundingRect (c)
uus_img = algne_pilt [ y: y + h, x: x + w]

# salvestab uue pildi
cv2.imwrite('./'+str (idx)+".png",uus_img)
idx += 1
murda

# joonistab originaalpildile numbrimärgi kontuuri
cv2.joonista Kontuurid(originaal_pilt, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("tuvastatud numbrimärk", originaal_pilt )

Pärast silmuse loomist on teie programm tuvastanud numbrimärki sisaldava kontuuri. See joonistab ainult numbrimärgi kontuuri.

5. Tuvastatud numbrimärgi tuvastamine

Numbrimärgi äratundmine tähendab numbrimärgi kärbitud pildil olevate märkide lugemist. Laadige varem salvestatud numbrimärgi kujutis ja kuvage see. Seejärel helistage pytesseract.image_to_string funktsiooni ja edastage kärbitud numbrimärgi kujutis. See funktsioon teisendab pildil olevad märgid stringiks.

# kärbitud numbrimärgi kujutise failinimi
cropped_License_Plate = './7.png'
cv2.imshow("kärbitudlitsentsplaat", cv2.lugesin(kärbitud_litsentsimärk))

# teisendab numbrimärgi märgid stringiks
text = pytesseract.image_to_string (cropped_License_Plate, lang='eng')

Kärbitud numbrimärk on näidatud allpool. Sellel olevad märgid on väljund, mille prindite hiljem ekraanile.

Olles numbrimärgi tuvastanud ja ära tundnud, olete valmis väljundit kuvama.

6. Väljundi kuvamine

See on viimane samm. Prindite väljatõmmatud teksti ekraanile. See tekst sisaldab numbrimärgi märke.

printida("Numbrimärk on:", tekst)
cv2.waitKey(0)
cv2.destroyAllWindows()

Programmi eeldatav väljund peaks olema sarnane allolevale pildile:

Numbrimärgi tekst on terminalis näha.

Täiustage oma Pythoni oskusi

Pythonis autode numbrimärkide tuvastamine ja äratundmine on huvitav projekt. See on keeruline, seega peaks see aitama teil Pythoni kohta rohkem teada saada.

Kui rääkida programmeerimisest, siis harjutamine on keele valdamise keskmes. Oma oskuste harjutamiseks peate tegelema huvitavate projektidega.