Valstybinio numerio aptikimo ir atpažinimo technologija turi daug pritaikymų. Jis gali būti naudojamas kelių sistemose, automobilių stovėjimo aikštelėse be bilietų, transporto priemonių prieigos kontrolės rezidencijose ir kt. Ši technologija sujungia kompiuterinį regėjimą ir dirbtinį intelektą.
Naudosite Python, kad sukurtumėte numerio ženklų aptikimo ir atpažinimo programą. Programa paims įvesties vaizdą, apdoros jį, kad aptiktų ir atpažintų numerio ženklą, ir galiausiai kaip išvestį parodys numerio ženklo simbolius.
Python aplinkos nustatymas
Norėdami patogiai sekti šią pamoką, turite būti susipažinę su Python pagrindais. Tai prasideda nuo programos aplinkos nustatymo.
Prieš pradėdami koduoti, turite įdiegti kai kurias bibliotekas savo aplinkoje. Atidarykite bet kurį Python IDE ir sukurkite Python failą. Vykdykite kiekvieną komandą terminale, kad įdiegtumėte atitinkamą biblioteką. Turėtumėte turėti išankstinį
Python PIP įdiegimas kompiuteryje.-
OpenCV-Python: šią biblioteką naudosite iš anksto apdoroti įvesties vaizdą ir rodyti įvairius išvesties vaizdus.
pip diegti OpenCV-Python
-
imutils: naudosite šią biblioteką, kad apkarpytumėte pradinį įvesties vaizdą iki norimo pločio.
pip diegti imutils
-
pytesseraktas: naudosite šią biblioteką valstybinio numerio ženklo simboliams išgauti ir konvertuoti į eilutes.
Pytesseract biblioteka remiasi Tesseact OCR simbolių atpažinimo variklis.pip diegti pytesseraktas
Kas yra Tesseract OCR ir kaip jį įdiegti kompiuteryje
Tesseract OCR yra variklis, kuris gali atpažinti kalbos simbolius. Prieš naudodami pytesseract biblioteką, turėtumėte ją įdiegti savo kompiuteryje. Norėdami tai padaryti:
- Atidarykite bet kurią „Chrome“ naršyklę
- Atsisiųskite Tesseact OCR sąranka
- Paleiskite sąranką ir įdiekite ją kaip bet kurią kitą programą
Paruošę aplinką ir įdiegę tesseract OCR, esate pasiruošę koduoti programą.
1. Bibliotekų importavimas
Pradėkite importuodami aplinkoje įdiegtas bibliotekas. Importuojant bibliotekas galite skambinti ir naudoti jų funkcijas projekte.
importuoti cv2
importuoti imutils
importuoti pytesseraktas
Turite importuoti OpenCV-Python biblioteka kaip cv2. Importuokite kitas bibliotekas naudodami tuos pačius pavadinimus, kuriuos naudojote jas diegdami.
2. Įvesties priėmimas
Tada nukreipkite pytesseract į vietą, kurioje įdiegtas Tesseract variklis. Paimkite automobilio vaizdą kaip įvestį naudodami cv2.imread funkcija. Pakeiskite vaizdo pavadinimą naudojamo vaizdo pavadinimu. Išsaugokite vaizdą tame pačiame aplanke kaip ir jūsų projektas, kad viskas būtų lengviau.
pytesseract.pytesseract.tesseract_cmd = „C:\\Program Files\\Tesseract-OCR\\tesseract.exe“
original_image = cv2.imread('image3.jpeg')
Toliau pateiktą įvesties vaizdą galite pakeisti tuo, kurį norite naudoti.
3. Išankstinis įvesties apdorojimas
Pakeiskite vaizdo plotį iki 500 pikselių. Tada konvertuokite vaizdą į pilkos spalvos tonus kaip „Canny“ krašto aptikimo funkcija veikia tik su pilkų atspalvių vaizdais. Galiausiai paskambinkite dvipusis filtras funkcija sumažinti vaizdo triukšmą.
originalus_image = imutils.resize (original_image, plotis = 500 )
gray_image = cv2.cvtColor (original_image, cv2.COLOR_BGR2GRAY)
pilkas_vaizdas = cv2.bilateralFilter (pilkas_vaizdas, 11, 17, 17)
4. Įvesties numerio ženklo aptikimas
Valstybinio numerio aptikimas – tai automobilio dalies, kuri turi valstybinio numerio ženklo simbolius, nustatymo procesas.
Atlieka kraštų aptikimą
Pradėkite skambindami cv2.Canny funkcija, kuri automatiškai aptiks iš anksto apdoroto vaizdo kraštus.
edged_image = cv2.Canny (grey_image, 30, 200)
Būtent iš šių kraštų ir rasime kontūrus.
Kontūrų radimas
Paskambinkite į cv2.findContours funkcija ir perduoti kopiją briaunos vaizdas. Ši funkcija aptiks kontūrus. Nubrėžkite aptiktus kontūrus pradiniame vaizde naudodami cv2.drawContours funkcija. Galiausiai išveskite originalų vaizdą su nubrėžtais visais matomais kontūrais.
kontūrai, naujas = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = originalus_vaizdas.copy()
cv2.nubrėžtiKontūras(img1, kontūrai, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)
Programa išskirtinai nubrėžia visus kontūrus, kuriuos randa automobilio vaizde.
Suradę kontūrus turite juos surūšiuoti, kad nustatytumėte geriausius kandidatus.
Kontūrų rūšiavimas
Rūšiuokite kontūrus pagal minimalų plotą 30. Nepaisykite žemiau pateiktų, nes mažiau tikėtina, kad jie bus valstybinio numerio kontūro. Padarykite originalaus vaizdo kopiją ir nupieškite 30 geriausių kontūrai paveiksle. Galiausiai parodykite vaizdą.
kontūrai = surūšiuoti (kontūrai, raktas = cv2.contourArea, atvirkštinis = Tiesa)[:30]
# saugo valstybinio numerio kontūrą
screenCnt = Nė vienas
img2 = originalus_vaizdas.copy()
# nubrėžia 30 geriausių kontūrų
cv2.nubrėžtiKontūras(img2, kontūrai, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)
Dabar kontūrų yra mažiau nei buvo pradžioje. Nubrėžti tik kontūrai, kuriuose yra apytikslis numerio ženklas.
Galiausiai reikia perbraukti surūšiuotus kontūrus ir nustatyti, kuris iš jų yra numerio ženklas.
Perkelti 30 geriausių kontūrų
Sukurkite for kilpą, kad apjungtumėte kontūrus. Ieškokite kontūro su keturiais kampais ir nustatykite jo perimetrą bei koordinates. Išsaugokite kontūro, kuriame yra valstybinio numerio ženklas, vaizdą. Galiausiai nubrėžkite valstybinio numerio kontūrą ant originalaus vaizdo ir parodykite jį.
skaičius = 0
idx = 7c kontūruose:
# apytikslis numerio ženklo kontūras
kontūro_perimetras = cv2.arcLength (c, Tiesa)
apytikslis = cv2.approxPolyDP(c, 0.018 * kontūro perimetras, Tiesa)# Ieškokite kontūrų su 4 kampais
jeigulen(apytiksliai)== 4:
ekrano Cnt = apytiksliai# suraskite valstybinio numerio kontūro koordinates
x, y, w, h = cv2.boundingRect (c)
naujas_img = originalus_vaizdas [ y: y + h, x: x + w]# išsaugo naują vaizdą
cv2.imwrite('./'+str (idx)+„.png“,new_img)
idx += 1
pertrauka
# piešia valstybinio numerio kontūrą originaliame paveikslėlyje
cv2.nubrėžtiKontūras(originalus_vaizdas, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("aptiktas valstybinis numeris", original_image )
Po kilpos jūsų programa nustatė kontūrą, kuriame yra numerio ženklas. Jis piešia tik valstybinio numerio kontūrą.
5. Aptikto valstybinio numerio ženklo atpažinimas
Atpažinti numerio ženklą reiškia perskaityti simbolius apkarpytame valstybinio numerio ženklo paveikslėlyje. Įkelkite anksčiau išsaugotą valstybinio numerio ženklo vaizdą ir parodykite jį. Tada skambinkite pytesseract.image_to_string funkcija ir perduoti apkarpytą valstybinio numerio ženklo vaizdą. Ši funkcija paveiksle esančius simbolius konvertuoja į eilutę.
# apkirpto valstybinio numerio vaizdo failo pavadinimas
cropped_License_Plate = './7.png'
cv2.imshow("apkarpytaslicencijaplokštelė", cv2.Neperskaičiau(apkarpytas_Licencijos_ženklas))
# paverčia valstybinio numerio simbolius į eilutę
text = pytesseract.image_to_string (cropped_License_Plate, lang='eng')
Apkarpytas numerio ženklas parodytas žemiau. Jame esantys simboliai bus išvestis, kurią vėliau atspausdinsite ekrane.
Aptikę ir atpažinę valstybinį numerį, esate pasirengę rodyti išvestį.
6. Išvesties rodymas
Tai paskutinis žingsnis. Ištrauktą tekstą spausdinate į ekraną. Šiame tekste yra numerio ženklo simboliai.
spausdinti("Nuolatinis numeris yra:", tekstas)
cv2.PalaukKey(0)
cv2.destroyAllWindows()
Numatoma programos išvestis turėtų būti panaši į toliau pateiktą paveikslėlį:
Valstybinio numerio tekstą galima pamatyti terminale.
Patobulinkite savo Python įgūdžius
Automobilių valstybinių numerių aptikimas ir atpažinimas „Python“ yra įdomus projektas. Tai sudėtinga, todėl turėtų padėti daugiau sužinoti apie Python.
Kalbant apie programavimą, praktika yra kalbos įvaldymo pagrindas. Norėdami praktikuoti savo įgūdžius, turite dirbti su įdomiais projektais.