Kazalo:

Robot za prepoznavanje prometnih znakov Raspberry Pi 4: 6 korakov
Robot za prepoznavanje prometnih znakov Raspberry Pi 4: 6 korakov

Video: Robot za prepoznavanje prometnih znakov Raspberry Pi 4: 6 korakov

Video: Robot za prepoznavanje prometnih znakov Raspberry Pi 4: 6 korakov
Video: The Choice is Ours (2016) Official Full Version 2024, November
Anonim
Robot za prepoznavanje prometnih znakov Raspberry Pi 4
Robot za prepoznavanje prometnih znakov Raspberry Pi 4

Ta pouk temelji na mojem univerzitetnem projektu. Cilj je bil ustvariti sistem, v katerem nevronsko omrežje analizira sliko in nato na podlagi prepoznavanja pove robotu arduino, naj se premika prek Ros.

Na primer, če je prepoznan znak za zavijanje desno, bo robot zavil desno, če je prepoznan znak za zavijanje levo, bo robot zavil levo, če ne bo prepoznan noben, bo robot nadaljeval naprej. Nabor podatkov, ki bo uporabljen, je uradno priznanje prometnih znakov iz INI (2019) (Institut Fur Neuroinformatik), ta nabor podatkov ima 43 razredov, vendar sta potrebna le dva; Mapa 00033 in 00034 v naboru podatkov sta levi in desni smernik.

1. korak: Zahteve

Zahteve
Zahteve
Zahteve
Zahteve
Zahteve
Zahteve

Zahteve za ta projekt so naslednje:

Arduino robot. (v bistvu arduino uno, gonilnik motorja in motorji) (ni potrebno, če ne uporabljate robota)

Malina pi 4.

Pi kamera.

Potrebna programska oprema:

Python 3.

OpenCV 4.

Tenzorski tok.

arduino IDE (ni potreben, če ne uporabljate robota)

Ros (ni potreben, če ne uporabljate robota)

Ne glede na vaš najljubši python ide (pri maline pi uporabljam Thonny).

Če želite nastaviti OpenCV in Tensorflow, sledite navodilom Adriana. Povezava:

Priporočam, da si ogledate čim več njegovih vaj, res so zanimive in so uporabne tako za začetnike kot tudi za vmesne.

2. korak: Usposabljanje podatkov

Skript vlaka je zasnovan za dostop do nabora podatkov, ki združuje približno 50.000 slik iz 43 razredov. Skript je napisan v pythonu z uporabo različnih knjižnic: os - to je za povezovanje skripta python s pravilnim imenikom, kjer se nahaja nabor podatkov. Matplotlib - to je za prikaz podatkov iz modela usposabljanja. Tensorflow in keras - to so knjižnice, ki se uporabljajo za ustvarjanje modela umetnega nevronskega omrežja, uporabljajo se za oblikovanje modela. Numpy - ta knjižnica je namenjena spreminjanju slik v matriko, ki jo je mogoče nato dati skozi model za pridobivanje napovedi.

Priloženi skript je koda python za izdelavo modela iz nabora podatkov. To je sestavljeno iz konvolucijskega 2D z vhodom (5, 5) in aktivacijo relu ter združevanjem, ko je to storjeno, vhod gre skozi drugo zvitko z vhodom (3, 3) z isto aktivacijo in združevanjem. To se zgodi še zadnjič, preden se splošči, nato pa se gostota uporabi za količino razredov, v tem primeru 43.

Naslednji korak je bil sestavljanje modela. To je del, ki določa optimizator, sgd pa je bil najbolj primeren, saj je bil podoben optimizatorju, uporabljenemu pri dodelitvi 1. Sgd pomeni stohastični gradientni spust. Tudi v prevajalniku je treba nastaviti izgubo, izbira izgube sparse_categorical_crossentropy se najbolje ujema, saj so kategorije kot cela števila, model pa bo za vsak razred izpisal napoved kot plavajočo vrednost med 0 in 1. 1, ki je 100% natančnost.

Ko je prevajalnik končan, je treba za model uporabiti generator, ki začne obdelavo vhodov slike. Generator je sestavljen iz več delov: training_set - to je povezava do nabora podatkov, ki se uporablja za usposabljanje, steps_per_epoch - to je število potrebnih korakov na epoho, epochs - to je, kolikokrat bo program ponovil celoten nabor podatkov, validation_data - to je povezava do nabora podatkov, ki se uporablja za preverjanje, validation_steps - število korakov, uporabljenih za preverjanje, preverjanje se zgodi na koncu vsakega obdobja.

Na splošno mora biti za celotno obdobje popolno brisanje celotnega nabora podatkov. Tako bo na primer nabor podatkov s 1024 slikami zahteval: Velikost serije = 32, Koraki na epoho = 32, Epohe = 1. Vsak korak vključuje celotno velikost serije, zato bodo z velikostjo serije 32 koraki 32. Na drugi strani roko, najbolje je, da je velikost serije večja od števila razredov, ker je velikost serije manjša, potem vsak korak ne more vključiti slike iz vsakega razreda.

Ko model konča usposabljanje, bo program z uporabo matplotliba naredil graf rezultatov, ki prikazuje zgodovino usposabljanja od začetka do konca. Graf je sestavljen iz natančnosti, točnosti potrditve, izgube in izgube pri preverjanju, ki je razdeljen na epoho, da se prikaže napredek usposabljanja. Zadnja faza je, da model shranimo kot datoteko.h5, do katere lahko kasneje dostopamo za postopek napovedovanja. Shranjevanje modela pomeni, da ob vsakem zagonu programa napovedovanja programa usposabljanja ni treba znova izvajati. Program usposabljanja lahko traja do 10 minut na epoho na maline pi.

Priložen je skript usposabljanja:

3. korak: Izvajanje napovedi kamere Pi

Naslednji program je predvidevanje in založniški scenarij.

Prva faza je nalaganje modela z uporabo modela.load (). Druga stopnja je ponoviti okvirje iz kamere pi z uporabo opencv in nato spremeniti velikost okvirja na enako velikost kot vhodne velikosti, uporabljene v fazi usposabljanja, 32 x 32 slikovnih pik. Ko je to narejeno, se novi spremenjeni okvir prenese skozi model z uporabo modela.predict (), ki oddaja matriko, vsak element matrike je plavajoči od 0 do 1, indeks elementov je enak razredu, ki ga predstavlja, zato prvi element je prvi razred in število je napoved gotovosti slike iz tega razreda. Npr.

OPOMBA: Če ne uporabljate robotske strani. Samo odstranite vrstice:

"uvoz rospy"

def talker (smer):

sporočilo = niz ()

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

rospy.init_node ('govornik', anonimno = res)

sporočilo = smer

rospy.loginfo (sporočilo)

pub.publish (sporočilo)"

"govornik (smer)"

Priložen je scenarij kamere Pi.

4. korak: Arduino robot

Zadnji korak je skript robotskega programa.

To je napisano v C ++ in je datoteka.ino za arduino uno. Program zahteva knjižnico ros, ki jo najdete v upravitelju knjižnic v ide. Ko je to uvoženo, so na voljo primeri datotek, zato sem se odločil razširiti datoteko LED utripa, ker bi to naredilo podoben cilj, kot sem ga potreboval. Program se nadaljuje, dokler se napajanje ne izklopi, najprej posluša tematskega robota, ko ujame ukaz iz te teme, bo imel stavek if, da vidi, kaj pove ukaz. Če je ukaz lev, potem skript zažene metodo turn left, če je ukaz desni, bo izvajal metodo turn right, drugače pa bo uporabil metodo forward. Te tri metode so si med seboj zelo podobne in sporočajo, da morajo biti digitalni zatiči nizki (ozemljitveni) ali 100 (PWM), zato robot ne bo prehiter, tako da vozniku motorja dovoli le nekaj izhodna napetost. Vrstni red teh izhodov je tisto, zaradi česar se robot obrne levo in desno ali gre naprej, kar je posledica orientacije napetosti, ki gre na motorje.

Priložen je skript.ino za arduino.

5. korak: Testiranje

Testiranje
Testiranje
Testiranje
Testiranje
Testiranje
Testiranje

Slike so priložene, tako da je projekt od začetka do konca. Prva slika prikazuje usposabljanje v teku. Ko je to končano, je prikazan izpis izdelanega modela. Tretja slika prikazuje napoved iz scenarija usposabljanja. to je zadnja stopnja scenarija usposabljanja. Če pogledate v mapo, v kateri je skript usposabljanja, sta narejena graf in model. Graf bi moral biti videti kot slika 4, ki prikazuje zgodovino usposabljanja od začetka do konca.

Končna slika je med izvajanjem scenarija pi kamere, to je prenos v živo iz kamere pi. na vsakem kadru se naredi napoved in napoved se natisne v terminalu. Okvir prikazuje, kaj kamera vidi.

V prilogi je moje univerzitetno poročilo za ta projekt. Za več podrobnosti o projektu preberite.

6. korak: Vse dodatne datoteke

Vse dodatne datoteke
Vse dodatne datoteke

Nekatere od teh so bile preskušanje datotek, ki sem jih naredil na poti.

Priporočena: