Kazalo:
- 1. korak: Zahteve
- 2. korak: Usposabljanje podatkov
- 3. korak: Izvajanje napovedi kamere Pi
- 4. korak: Arduino robot
- 5. korak: Testiranje
- 6. korak: Vse dodatne datoteke
Video: Robot za prepoznavanje prometnih znakov Raspberry Pi 4: 6 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:04
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 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
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
Nekatere od teh so bile preskušanje datotek, ki sem jih naredil na poti.
Priporočena:
LCD Invaders: Space Invaders Like Game na 16x2 LCD -prikazovalniku znakov: 7 korakov
LCD Invaders: Space Invaders Like Game na 16x2 LCD -prikazovalniku znakov: Ni potrebe po uvajanju legendarne igre "Space Invaders". Najbolj zanimiva značilnost tega projekta je, da uporablja zaslon besedila za grafični izhod. To se doseže z izvajanjem 8 meri characters.You lahko prenesete celoten Arduino
Priključitev LCD -ja Arduino in znakov v BreadShield: 6 korakov
Priključitev Arduina in Character LCD v BreadShield: Številni projekti Arduino vključujejo LCD -je z znaki, ki v veliki večini uporabljajo protokol HD44780 za pridobivanje podatkov iz Arduina. Priključitev Arduina na HD44780 običajno (v 4-bitnem načinu) traja 12 žic! To bo na koncu povzročilo veliko zmesi špagetov iz žične skale. Potrebno je
Kako ustvariti 2d znak z krmilnikom znakov v Unreal Engine 4 z uporabo Visual Script za računalnik: 11 korakov
Kako ustvariti 2d znak z krmilnikom znakov v sistemu Unreal Engine 4 Uporaba Visual Script za osebni računalnik: Kako ustvariti 2d znak z krmilnikom znakov v sistemu Unreal Engine 4 z uporabo vizualnega skripta za računalnik Živjo, jaz sem Jordan Steltz. Video igre razvijam od svojega 15. leta. Ta vadnica vas bo naučila, kako ustvariti osnovnega lika z v
Analizator prometnih vzorcev z zaznavanjem objektov v živo: 11 korakov (s slikami)
Analizator prometnih vzorcev z zaznavanjem objektov v živo: V današnjem svetu so semaforji bistveni za varno cesto. Velikokrat pa so lahko semaforji moteči v situacijah, ko se nekdo približuje luči, ko ta postane rdeča. To zapravlja čas, še posebej, če je luč pr
Kako narediti vezja z rezalnikom znakov Roland CAMM: 6 korakov
Kako narediti vezja z Rolandovim rezalnikom znakov CAMM: Jedkanje PCB -jev doma ustvarja veliko strupenih kemičnih odpadkov, vendar je vseeno lepo, da jih ni treba poslati stran na PCB. Ta navodila govorijo o tem, kako uporabiti rezalnik za vinil Roland za izdelavo vezja za rezanje vinila. Potrebni materiali: CAMM-1 Servo GX