Sisukord:

Raspberry Pi 4 liiklusmärkide äratundmisrobot: 6 sammu
Raspberry Pi 4 liiklusmärkide äratundmisrobot: 6 sammu

Video: Raspberry Pi 4 liiklusmärkide äratundmisrobot: 6 sammu

Video: Raspberry Pi 4 liiklusmärkide äratundmisrobot: 6 sammu
Video: Traffic Sign Detection using Haar Cascade Classifier in OpenCV with Python 2024, November
Anonim
Raspberry Pi 4 liiklusmärkide äratundmisrobot
Raspberry Pi 4 liiklusmärkide äratundmisrobot

See juhendamine põhineb minu ülikooliprojektil. Eesmärk oli luua süsteem, kus närvivõrk analüüsib pilti ja seejärel käsib äratundmisel arduino robotil Ros -i kaudu liikuda.

Näiteks kui tuvastatakse parempoolse pöörde märk, pöörab robot paremale, kui tuvastatakse vasakpöördemärk, pöörab robot vasakule, kui kumbagi ei tunta, jätkab robot edasi. Kasutatav andmekogum on INI (2019) (Institut Fur Neuroinformatik) ametlik liiklusmärkide äratundmine, see andmekogum sisaldab 43 klassi, kuid vaja on ainult kahte; Andmestiku kaustad 00033 ja 00034 on vasak- ja parempoolsed pöördemärgid.

Samm: nõuded

Nõuded
Nõuded
Nõuded
Nõuded
Nõuded
Nõuded

Selle projekti nõuded on järgmised:

Arduino robot. (põhimõtteliselt arduino uno, mootorijuht ja mootorid) (pole vaja, kui te ei kasuta robotit)

Vaarika pi 4.

Pi kaamera.

Vajalik tarkvara:

Python 3.

OpenCV 4.

Tensorflow.

arduino IDE (pole vaja, kui te ei kasuta robotit)

Ros (pole vajalik, kui te ei kasuta robotit)

Ükskõik, mis teie lemmik pythoniidee on (vaarika pi puhul kasutan Thonnyt).

OpenCV ja Tensorflow seadistamiseks järgige Adriani juhiseid. Link:

Soovitan vaadata võimalikult palju tema õpetusi, need on tõesti huvitavad ja kasulikud nii algajatele kui ka vahepealsetele.

2. samm: andmete koolitamine

Rongi skript on loodud juurdepääsuks andmekogumile, mis sisaldab umbes 50 000 pilti 43 klassist. Skript on kirjutatud pythonis, kasutades erinevaid teeke: os - see on pythoni skripti sidumine õige kataloogiga, kus andmestik asub. Matplotlib - see on mõeldud koolitusmudeli andmete kuvamiseks. Tensorflow ja keras - need on teegid, mida kasutatakse tehisnärvivõrgu mudeli loomiseks, neid kasutatakse mudeli kujundamisel. Numpy - see raamatukogu on mõeldud piltide muutmiseks massiiviks, mille saab seejärel mudeli kaudu ennustuse hankimiseks läbi viia.

Lisatud skript on python -kood andmestikust mudeli tegemiseks. See koosneb konvolutsioonilisest 2D -st (5, 5) sisendiga ja relu aktiveerimisest ning seejärel koondamisest, kui see on tehtud, läbib sisend teise konvolutsiooni koos (3, 3) sisendiga, millel on sama aktiveerimine ja koondamine. See juhtub viimast korda enne lamestamist ja seejärel rakendatakse tihedust klasside hulgale, antud juhul 43.

Järgmine samm oli mudeli koostamine. See on osa, mis määrab optimeerija, sgd oli kõige sobivam, kuna see sarnanes ülesandes 1 kasutatud optimeerijaga. Sgd tähistab stohhastilist gradiendi laskumist. Ka kompilaatoris tuleb kaotus määrata, valides kadu sparse_categorical_crossentropy, on see kõige sobivam, kuna kategooriad on täisarvud ja mudel väljastab iga klassi jaoks prognoosi ujukina vahemikus 0 kuni 1. 1 on 100% täpsus.

Kui kompilaator on valmis, tuleb mudeli jaoks rakendada generaator, mis hakkab pildisisendeid töötlema. Generaator koosneb mitmest osast: training_set - see on link koolituseks kasutatud andmekogumile, steps_per_epoch - see on nõutud sammude arv epohhi kohta, epohhid - need on mitu korda programm kordab kogu andmekogumi kaudu, validation_data - see on link valideerimiseks kasutatud andmekogumile, validation_steps - valideerimiseks kasutatud sammude arv, valideerimine toimub iga ajastu lõpus.

Üldiselt peab kogu andmestiku täielik pühkimine olema ajastu kohta täielik. Seega on näiteks vaja 1024 pildist koosnevat andmestikku: Partii suurus = 32, Sammud epohhi kohta = 32, epohh = 1. Iga samm sisaldab kogu partii suurust, seega kui partii suurus on 32, on sammud 32. Teisel juhul parem on see, kui partii suurus on suurem kui klasside arv. Seda seetõttu, et kui partii suurus on väiksem, ei saa iga samm sisaldada iga klassi pilti.

Kui mudel on treeningu lõpetanud, koostab programm matplotlibi abil väljundite graafiku, mis näitab treeningu ajalugu algusest lõpuni. Graafik koosneb täpsusest, valideerimistäpsusest, kaotusest ja valideerimiskaost, see on jagatud ajastu kohta, et näidata, kuidas koolitus edenes. Viimane etapp on mudeli salvestamine.h5 -failina, millele saab ennustusprotsessi jaoks hiljem juurde pääseda. Mudeli salvestamine tähendab, et iga kord, kui ennustusprogramm käivitatakse, ei pea treeningprogrammi uuesti käivitama. Koolitusprogramm võib vaarikapiiril võtta aega kuni 10 minutit.

Lisatud on koolituse skript:

3. samm: Pi -kaamera ennustuste rakendamine

Järgmine programm on ennustus ja kirjastaja skript.

Esimene etapp on mudeli laadimine mudeli.load () abil. Teine etapp on iteratsioon pirakaamerast raamide abil opencv abil ja seejärel kaadri suuruse muutmine koolitusetapis kasutatud sisendsuurustega sama suuruseks (32 x 32 pikslit). Kui see on tehtud, pannakse uus suurusega kaader läbi mudeli, kasutades mudelit.predict (), mis väljastab maatriksi, iga maatriksi element on ujuk vahemikus 0 kuni 1, elementide indeks on sama, mida see klass esindab, seega esimene element on esimene klass ja number on selle klassi kujutise kindluse ennustus. Nt.

MÄRKUS. Kui te ei kasuta roboti külge. Lihtsalt eemaldage read:

"impordi rospy"

def talker (suund):

sõnum = string ()

pub = rospy. Publisher ('robot', String, queue_size = 10)

rospy.init_node ('kõneleja', anonüümne = tõsi)

sõnum = suund

rospy.loginfo (sõnum)

pub.publish (sõnum)"

"kõneleja (suund)"

Lisatud on Pi kaamera skript.

Samm: Arduino robot

Viimane samm on robotprogrammi skript.

See on kirjutatud C ++ keeles ja on.ino fail arduino uno jaoks. Programm nõuab ros -raamatukogu, mille leiate idee raamatukogude haldurist. Kui see on imporditud, on olemas näidisfailid, otsustasin laiendada LED -i vilkumisfaili, kuna see teeks sarnase eesmärgi kui mul oli vaja. Programm jätkab tsüklit kuni toite väljalülitamiseni, esiteks kuulab ta teemarobotit, kui ta saab sellest teemast käsu, on sellel if -käsk, et näha, mida käsk ütleb. Kui käsk on vasakule jäetud, käivitab skript vasakpöörde meetodi, kui käsk on õige, siis käivitab see pöörde paremale meetodi ja muidu käivitab edasisuunamismeetodi. Need kolm meetodit on üksteisega väga sarnased, nad ütlevad, et digitaalsed tihvtid peavad olema kas LOW (jahvatatud) või 100 (PWM). Seda tehakse selleks, et robot ei oleks liiga kiire, öeldes mootori juhile, et ta lubab ainult natuke pinge välja. Nende väljundite järjekord paneb roboti vasakule ja paremale pöörama või edasi liikuma, see on tingitud mootoritele suunatud pinge orientatsioonist.

Lisatud on.ino skript arduino jaoks.

Samm: testimine

Testimine
Testimine
Testimine
Testimine
Testimine
Testimine

Pildid lisatud, nii et projekt algusest lõpuni. Esimene pilt näitab koolitust. Kui see on lõpule jõudnud, kuvatakse tehtud mudeli väljatrükk. Kolmas pilt näitab ennustust treeningskripti järgi. see on koolituse stsenaariumi viimane etapp. Kui vaatate kausta, kus treeningskript asub, on tehtud graafik ja mudel. Graafik peaks siin välja nägema nagu pilt 4, see näitab treeningu ajalugu algusest lõpuni.

Lõplik pilt kuvatakse pi -kaamera skripti ajal, see on pi -kaamera otseülekanne. igale kaadrile tehakse ennustus ja see trükitakse terminali. Raam näitab, mida kaamera näeb.

Lisatud on minu ülikooli aruanne selle projekti kohta. Palun lugege projekti üksikasju.

6. toiming: kõik täiendavad failid

Kõik täiendavad failid
Kõik täiendavad failid

Mõned neist olid testimisfailid, mille tegin teel.

Soovitan: