Satura rādītājs:

Raspberry Pi 4 ceļa zīmju atpazīšanas robots: 6 soļi
Raspberry Pi 4 ceļa zīmju atpazīšanas robots: 6 soļi

Video: Raspberry Pi 4 ceļa zīmju atpazīšanas robots: 6 soļi

Video: Raspberry Pi 4 ceļa zīmju atpazīšanas robots: 6 soļi
Video: Traffic Sign Detection using Haar Cascade Classifier in OpenCV with Python 2024, Novembris
Anonim
Raspberry Pi 4 ceļa zīmju atpazīšanas robots
Raspberry Pi 4 ceļa zīmju atpazīšanas robots

Šī pamācība ir balstīta uz manu universitātes projektu. Mērķis bija izveidot sistēmu, kurā neironu tīkls analizē attēlu un pēc tam, pamatojoties uz atpazīšanu, liks arduino robotam pārvietoties caur Ros.

Piemēram, ja tiek atpazīta zīme par pagriezienu pa labi, tad robots pagriezīsies pa labi, ja tiks atpazīta zīme pagriezties pa kreisi, tad robots pagriezīsies pa kreisi, ja neviens netiks atpazīts, robots turpinās virzīties uz priekšu. Datu kopa, kas tiks izmantota, ir oficiālā ceļa zīmju atpazīšana no INI (2019) (Institut Fur Neuroinformatik), šai datu kopai ir 43 klases, tomēr nepieciešamas tikai divas; 00033 un 00034 mapes datu kopā ir pagrieziena zīmes pa kreisi un pa labi.

1. darbība. Prasības

Prasības
Prasības
Prasības
Prasības
Prasības
Prasības

Prasības šim projektam ir šādas:

Arduino robots. (būtībā arduino uno, motora vadītājs un motori) (nav nepieciešams, ja neizmantojat robotu)

Aveņu pi 4.

Pi kamera.

Nepieciešamā programmatūra:

Python 3.

OpenCV 4.

Tensorflow.

arduino IDE (nav nepieciešams, ja neizmantojat robotu)

Ros (nav nepieciešams, ja neizmantojat robotu)

Lai kāda būtu jūsu iecienītākā python ide (uz aveņu pi, es izmantoju Thonny).

Lai iestatītu OpenCV un Tensorflow, izpildiet Adriana norādījumus. Saite:

Es iesaku apskatīt pēc iespējas vairāk viņa pamācību, tās ir patiešām interesantas un noder gan iesācējiem, gan starpniekiem.

2. darbība. Datu apmācība

Vilciena skripts ir paredzēts, lai piekļūtu datu kopai, kurā apkopoti aptuveni 50 000 attēlu no 43 klasēm. Skripts ir rakstīts python, izmantojot dažādas bibliotēkas: os - tas ir paredzēts python skripta saistīšanai ar pareizo direktoriju, kurā atrodas datu kopa. Matplotlib - tas ir paredzēts, lai parādītu datus no apmācības modeļa. Tensorflow un keras - tās ir bibliotēkas, ko izmanto mākslīgā neironu tīkla modeļa izveidošanai, tās tiek izmantotas modeļa izstrādei. Numpy - šī bibliotēka ir paredzēta attēlu pārvēršanai masīvā, kuru pēc tam var izlaist modelī, lai izgūtu prognozi.

Pievienotais skripts ir pitona kods modeļa izveidei no datu kopas. Tas sastāv no konvolūcijas 2D ar (5, 5) ievadi un relu aktivizēšanu, pēc tam apvienojot, kad tas ir izdarīts, ievade iziet citu konvolūciju ar (3, 3) ievadi ar tādu pašu aktivizēšanu un apvienošanu. Tas notiek pēdējo reizi, pirms tiek saplacināts, un pēc tam blīvums tiek piemērots esošo klašu skaitam, šajā gadījumā 43.

Nākamais solis bija modeļa apkopošana. Šī ir daļa, kas nosaka optimizētāju, sgd bija vispiemērotākais, jo tas bija līdzīgs optimizatoram, kas tika izmantots 1. uzdevumā. Sgd apzīmē stohastisko gradienta nolaišanos. Arī kompilētājā ir jāiestata zaudējumi, vispiemērotākais ir izvēlēties retos_kategoriskos_crossentropijas zaudējumus, jo kategorijas ir veseli skaitļi, un modelis katrai klasei sniegs prognozi kā peldošo vērtību no 0 līdz 1. 1 ir 100% precizitāte.

Kad kompilators ir pabeigts, modelim ir jāpielieto ģenerators, lai sāktu apstrādāt attēla ievades. Ģenerators sastāv no vairākām daļām: training_set - šī ir saite uz apmācībai izmantoto datu kopu, steps_per_epoch - tas ir nepieciešamo soļu skaits vienā laikmetā, laikmeti - tie ir cik reizes programma atkārtos pilnu datu kopu, validation_data - šī ir saite uz validācijai izmantoto datu kopu, validation_steps - validācijai izmantoto soļu skaits, validācija notiek katra laikmeta beigās.

Parasti katrai laikmetai ir pilnībā jānoslauka visa datu kopa. Tādējādi, piemēram, 1024 attēlu datu kopai būs nepieciešams: partijas lielums = 32, soļi vienā laikmetā = 32, laikmeti = 1. Katrs solis ietver visu partijas lielumu, tāpēc, ja partijas lielums ir 32, soļi būs 32. Labāk, ja partijas lielums ir lielāks nekā klašu skaits, tas ir tāpēc, ka, ja partijas lielums ir mazāks, tad katrā solī nevar iekļaut attēlu no katras klases.

Kad modelis ir beidzis apmācību, programma, izmantojot matplotlib, izveidos rezultātu grafiku, kas parāda apmācības vēsturi no sākuma līdz beigām. Diagramma sastāv no precizitātes, validācijas precizitātes, zaudējumiem un validācijas zudumiem; tas ir sadalīts pa katru laikmetu, lai parādītu, kā apmācība noritēja. Pēdējais posms ir modeļa saglabāšana kā.h5 fails, kuram vēlāk var piekļūt prognozēšanas procesā. Modeļa saglabāšana nozīmē, ka katru reizi, kad tiek palaista prognozēšanas programma, apmācības programma nav jāsāk vēlreiz. Mācību programma aveņu pi var ilgt līdz 10 minūtēm vienā laikmetā.

Pievienots apmācības skripts:

3. darbība: Pi kameras prognožu ieviešana

Nākamā programma ir prognozēšana un izdevēja skripts.

Pirmais posms ir modeļa ielāde, izmantojot model.load (). Otrais posms ir atkārtot rāmjus no pi kameras, izmantojot opencv, un pēc tam mainīt rāmja izmērus tādā pašā izmērā kā ievades izmēri, kas tika izmantoti apmācības posmā, 32 x 32 pikseļi. Kad tas ir izdarīts, jaunais mainītā izmēra rāmis tiek izvadīts caur modeli, izmantojot modeli. pirmais elements ir pirmā klase, un skaitlis paredz noteiktību, ka attēls ir no šīs klases. Piem.

PIEZĪME: ja neizmantojat robota pusi. Vienkārši noņemiet rindas:

"importēt rospy"

def runātājs (virziens):

ziņojums = virkne ()

pub = rospy. Publisher ('robots', virkne, rindas_izmērs = 10)

rospy.init_node ('runātājs', anonīms = True)

ziņa = virziens

rospy.loginfo (ziņojums)

pub.publish (ziņojums)"

"runātājs (virziens)"

Pievienots Pi kameras skripts.

4. solis: Arduino robots

Pēdējais solis ir robota programmas skripts.

Tas ir rakstīts C ++ un ir.ino fails arduino uno. Programmai ir nepieciešama ros bibliotēka, kuru var atrast bibliotēku pārvaldniekā ide. Kad tas ir importēts, ir piemēru faili, es izvēlējos paplašināt LED mirgojošo failu, jo tas būtu līdzīgs man vajadzīgajam mērķim. Programma turpina darboties, līdz tiek atvienota barošana, pirmkārt, tā klausās tēmas robotu, kad noķer komandu no šīs tēmas, tai būs paziņojums if, lai redzētu, ko komanda saka. Ja komanda tiek atstāta pa kreisi, tad skripts palaiž pagrieziena pa kreisi metodi, ja komanda ir pareiza, tad tā palaidīs pagrieziena pa labi metodi, un pretējā gadījumā tā darbosies uz priekšu. Šīs trīs metodes ir ļoti līdzīgas viena otrai, tās norāda, ka digitālās tapas ir vai nu LOW (slīpētas), vai 100 (PWM), tāpēc robots nav pārāk ātrs, liekot motora vadītājam atļaut tikai mazliet spriegums ārā. Šo izeju secība liek robotam griezties pa kreisi un pa labi vai iet uz priekšu, tas ir saistīts ar sprieguma orientāciju uz motoriem.

Pievienots arinoino.ino skripts.

5. darbība: pārbaude

Testēšana
Testēšana
Testēšana
Testēšana
Testēšana
Testēšana

Attēli pievienoti, tāpēc projekts no sākuma līdz beigām. Pirmais attēls parāda apmācību procesā. Kad tas ir pabeigts, tiek parādīta izgatavotā modeļa izdruka. Trešais attēls parāda prognozi no apmācības skripta. šis ir pēdējais apmācības scenārija posms. Ja paskatāties mapē, kurā atrodas apmācības skripts, tiek izveidots grafiks un modelis. Grafikam šeit vajadzētu izskatīties kā 4. attēlā, tas parāda apmācības vēsturi no sākuma līdz beigām.

Pēdējais attēls tiek rādīts, kamēr tiek palaists pi kameras skripts, un tā ir tiešraide no pi kameras. uz katra kadra tiek veikta prognoze un terminālī tiek izdrukāta prognoze. Rāmis parāda to, ko redz kamera.

Pievienots mans universitātes ziņojums par šo projektu. Lūdzu, izlasiet sīkāku informāciju par projektu.

6. darbība: visi papildu faili

Visi papildu faili
Visi papildu faili

Daži no tiem bija testēšanas faili, kurus izveidoju pa ceļam.

Ieteicams: