Sadržaj:

Rob za prepoznavanje prometnih znakova Raspberry Pi 4: 6 koraka
Rob za prepoznavanje prometnih znakova Raspberry Pi 4: 6 koraka

Video: Rob za prepoznavanje prometnih znakova Raspberry Pi 4: 6 koraka

Video: Rob za prepoznavanje prometnih znakova Raspberry Pi 4: 6 koraka
Video: CS50 2015 – 10-я неделя 2024, Studeni
Anonim
Rob za prepoznavanje prometnih znakova Raspberry Pi 4
Rob za prepoznavanje prometnih znakova Raspberry Pi 4

Ovo uputstvo temelji se na mom sveučilišnom projektu. Cilj je bio stvoriti sustav u kojem neuronska mreža analizira sliku, a zatim će na temelju prepoznavanja reći arduino robotu da se kreće putem Ros -a.

Na primjer, ako se prepozna znak za skretanje udesno, robot će skrenuti udesno, ako se prepozna znak skretanja ulijevo, robot će skrenuti ulijevo, ako nijedan od njih nije prepoznat, robot će nastaviti naprijed. Skup podataka koji će se koristiti je službeno prepoznavanje prometnih znakova iz INI -a (2019) (Institut Fur Neuroinformatik), ovaj skup podataka ima 43 klase, no potrebne su samo dvije; Mape 00033 i 00034 u skupu podataka lijevi su i desni pokazivači smjera.

Korak 1: Zahtjevi

Zahtjevi
Zahtjevi
Zahtjevi
Zahtjevi
Zahtjevi
Zahtjevi

Uvjeti za ovaj projekt su sljedeći:

Arduino robot. (u osnovi arduino uno, vozač motora i motori) (nije potrebno ako ne koristite robota)

Malina pi 4.

Pi kamera.

Potreban softver:

Python 3.

OpenCV 4.

Tenzorski tok.

arduino IDE (nije potrebno ako ne koristite robota)

Ros (nije potrebno ako ne koristite robota)

Što god vam je omiljeni python ide (Na malini pi koristim Thonny).

Da biste postavili OpenCV i Tensorflow, slijedite upute Adriana. Veza:

Preporučujem da pogledate što je moguće više njegovih vodiča, oni su doista zanimljivi i korisni su kako za početnike, tako i za posrednike.

Korak 2: Obuka podataka

Skripta vlaka dizajnirana je za pristup skupu podataka koji okuplja oko 50 000 slika iz 43 razreda. Skripta je napisana na pythonu, koristeći različite biblioteke: os - ovo služi za povezivanje python skripte s ispravnim direktorijem u kojem se nalazi skup podataka. Matplotlib - ovo je za prikaz podataka iz modela obuke. Tensorflow i keras - to su knjižnice koje se koriste za izradu modela umjetne neuronske mreže, koriste se za projektiranje modela. Numpy - ova knjižnica služi za pretvaranje slika u niz koji se zatim može provesti kroz model za dohvaćanje predviđanja.

Priložena skripta je python kod za izradu modela iz skupa podataka. To se sastoji od konvolucijskog 2D -a s (5, 5) ulazom i aktivacijom relu -a zatim udruživanja, nakon što se to učini, ulaz prolazi kroz drugu konvoluciju s (3, 3) ulazom s istom aktivacijom i udruživanjem. To se događa posljednji put prije poravnavanja, a zatim se gustoća primjenjuje na količinu klasa koje postoje, u ovom slučaju 43.

Sljedeći korak bio je sastavljanje modela. Ovo je dio koji postavlja optimizator, a sgd je bio najprikladniji jer je to bilo slično optimizatoru koji se koristio u zadatku 1. Sgd označava stohastičko gradijentno spuštanje. Također unutar kompajlera potrebno je postaviti gubitak, odabirom sparse_categorical_crossentropy gubitak najbolje odgovara budući da su kategorije kao cijeli brojevi, a model će predvidjeti svaku klasu kao float između 0 i 1. 1 koji je 100% točnost.

Nakon što je kompajler dovršen, potrebno je primijeniti generator da bi model počeo obrađivati ulazne slike. Generator se sastoji od više dijelova: training_set - ovo je veza na skup podataka koji se koristi za obuku, steps_per_epoch - ovo je broj koraka po epohi koji su potrebni, epohe - ovo je koliko će puta program ponavljati kroz cijeli skup podataka, validacijski_data - ovo je veza na skup podataka koji se koristi za provjeru valjanosti, koraci provjere valjanosti - broj koraka koji se koriste za provjeru valjanosti, provjera se događa na kraju svake epohe.

Općenito, potpuno brisanje cijelog skupa podataka mora biti dovršeno po epohama. Stoga će, na primjer, skup podataka od 1024 slike zahtijevati: Veličina serije = 32, Koraci po epohi = 32, Epohe = 1. Svaki korak uključuje cijelu veličinu serije, pa će s veličinom serije 32 koraci biti 32. S druge strane S druge strane, najbolje je imati veću veličinu serije od broja klasa, to je zato što ako je veličina serije manja, onda svaki korak ne može uključivati sliku iz svake klase.

Nakon što model završi obuku, pomoću matplotliba program će napraviti grafikon rezultata, što prikazuje povijest obuke od početka do kraja. Grafikon se sastoji od točnosti, točnosti provjere valjanosti, gubitka i gubitka provjere valjanosti, koji se dijeli po epohama kako bi se pokazao napredak obuke. Posljednja faza je spremanje modela kao.h5 datoteke kojoj se kasnije može pristupiti za proces predviđanja. Spremanje modela znači da se svaki put kad se pokrene program predviđanja program obuke ne mora ponovno pokretati. Program osposobljavanja može trajati do 10 minuta po epohi na pi od maline.

U privitku se nalazi skripta obuke:

Korak 3: Provedba predviđanja Pi kamere

Sljedeći program je predviđanje i izdavačka skripta.

Prva faza je učitavanje modela pomoću modela.load (). Druga faza je ponoviti okvire s pi kamere pomoću opencv -a, a zatim promijeniti veličinu okvira na istu veličinu kao i ulazne veličine korištene u fazi obuke, 32 x 32 piksela. Nakon što se to učini, novi okvir s promjenom veličine prolazi kroz model koristeći model.predict () koji daje matricu, svaki element matrice je plutajući od 0 do 1, indeks elemenata je isti kao klasa koju predstavlja, stoga prvi element je klasa jedan, a broj predviđanje izvjesnosti slike iz te klase. Npr.

NAPOMENA: Ako ne koristite stranu robota. Samo uklonite retke:

"uvoz rospyja"

def talker (smjer):

poruka = String ()

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

rospy.init_node ('govornik', anoniman = Istina)

poruka = smjer

rospy.loginfo (poruka)

pub.publish (poruka)"

"govornik (smjer)"

U privitku je skripta Pi kamere.

Korak 4: Arduino robot

Posljednji korak je skripta programa robota.

Ovo je napisano na C ++ i.ino datoteka za arduino uno. Program zahtijeva biblioteku ros koju možete pronaći u upravitelju knjižnica unutar ide. Nakon što se to uveze, postoje primjeri datoteka, odlučio sam proširiti LED datoteku treptanja jer bi to učinilo sličan cilj onome što mi je potrebno. Program se nastavlja petljati sve dok se napajanje ne isključi, prvo sluša robota teme, kada uhvati naredbu iz te teme imat će if naredbu da vidi što naredba kaže. Ako je naredba lijeva, tada skripta pokreće metodu skretanja ulijevo, ako je naredba desna, tada će pokrenuti metodu skretanje udesno, a u suprotnom će pokrenuti metodu naprijed. Ove tri metode međusobno su vrlo slične i govore da digitalni pinovi moraju biti LOW (uzemljeni) ili 100 (PWM) za to kako robot ne bi bio prebrz, govoreći vozaču motora da samo pusti malo napon van. Redoslijed ovih izlaza čini da robot skrene lijevo -desno ili ide naprijed, to je zbog orijentacije napona koji ide prema motorima.

U privitku se nalazi.ino skripta za arduino.

Korak 5: Testiranje

Testiranje
Testiranje
Testiranje
Testiranje
Testiranje
Testiranje

Slike u prilogu tako da projekt od početka do kraja. Prva slika prikazuje obuku u toku. Nakon što se to završi, prikazuje se ispis izrađenog modela. Treća slika prikazuje predviđanje iz scenarija obuke. ovo je posljednja faza scenarija obuke. Ako pogledate u mapu u kojoj se nalazi skripta za obuku, napravljen je grafikon i model. Grafikon bi trebao izgledati kao slika 4, ovdje se prikazuje povijest treninga od početka do kraja.

Konačna slika je tijekom pokretanja skripte pi kamere, to je prijenos uživo s kamere kamere. predviđanje se vrši na svakom okviru, a predviđanje se ispisuje u terminalu. Okvir prikazuje ono što kamera vidi.

U privitku se nalazi moje sveučilišno izvješće za ovaj projekt. Molimo pročitajte za više detalja o projektu.

Korak 6: Sve dodatne datoteke

Sve dodatne datoteke
Sve dodatne datoteke

Neki od njih su bili datoteke za testiranje koje sam napravio usput.

Preporučeni: