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, Novembar
Anonim
Raspberry Pi 4 Robot za prepoznavanje saobraćajnih znakova
Raspberry Pi 4 Robot za prepoznavanje saobraćajnih znakova

Ovo uputstvo je zasnovano na mom univerzitetskom projektu. Cilj je bio stvoriti sistem u kojem neuronska mreža analizira sliku, a zatim će na osnovu 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, međutim potrebne su samo dvije; Mape 00033 i 00034 u skupu podataka su lijevi i desni pokazivači smjera.

Korak 1: Zahtjevi

Zahtevi
Zahtevi
Zahtevi
Zahtevi
Zahtevi
Zahtevi

Uslovi za ovaj projekat 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.

Tensorflow.

arduino IDE (nije potrebno ako ne koristite robota)

Ros (nije potrebno ako ne koristite robota)

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

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

Preporučujem da pogledate što više njegovih tutorijala, oni su zaista zanimljivi i korisni su kako za početnike, tako i za posrednike.

Korak 2: Obuka podataka

Skripta vlaka je dizajnirana za pristup skupu podataka koji sastavlja oko 50 000 slika iz 43 klase. Skripta je napisana na pythonu, koristeći različite biblioteke: os - ovo je 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 - ovo su biblioteke koje se koriste za stvaranje modela umjetne neuronske mreže, koriste se za dizajniranje modela. Numpy - ova biblioteka 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. Ovo se sastoji od konvolucionog 2D -a sa (5, 5) ulazom i aktivacijom relu -a zatim udruživanja, nakon što se to učini, ulaz prolazi kroz drugu konvoluciju sa (3, 3) ulazom sa 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, sgd je bio najprikladniji jer je to bilo slično optimizatoru koji se koristio u dodjeli 1. Sgd označava stohastičko gradijentno spuštanje. Također unutar kompajlera gubitak mora biti postavljen, odabirom sparse_categorical_crossentropy gubitak najbolje odgovara budući da su kategorije kao cijeli brojevi i model će za svaku klasu prikazati predviđanje kao float između 0 i 1. 1 koji je 100% tačnost.

Nakon što je kompajler dovršen, potrebno je primijeniti generator da bi model započeo obradu ulaza slike. Generator se sastoji od više dijelova: training_set - ovo je veza do skupa 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, validation_data - ovo je veza do skupa podataka koji se koristi za validaciju, validation_steps - broj koraka koji se koriste za provjeru valjanosti, provjera se događa na kraju svake epohe.

Općenito, potrebno je kompletno brisanje cijelog skupa podataka po epohi. Stoga će, na primjer, za skup podataka od 1024 slike biti potrebno: 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 historiju obuke od početka do kraja. Grafikon se sastoji od tačnosti, tačnosti validacije, gubitka i gubitka validacije, koji je podijeljen po epohama kako bi pokazao kako je obuka napredovala. Posljednja faza je spremanje modela kao.h5 datoteke kojoj se kasnije može pristupiti za proces predviđanja. Čuvanje modela znači da svaki put kada se pokrene program predviđanja, program obuke ne mora biti ponovo pokrenut. Program obuke može trajati do 10 minuta po epohi na pi od maline.

U prilogu je skripta obuke:

Korak 3: Implementacija predviđanja Pi kamere

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

Prva faza je učitavanje modela pomoću modela.load (). Druga faza je ponoviti okvire sa 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 robotsku stranu. Samo uklonite redove:

"import rospy"

def talker (smjer):

poruka = String ()

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

rospy.init_node ('govornik', anoniman = Tačno)

poruka = pravac

rospy.loginfo (poruka)

pub.publish (poruka)"

"govornik (smjer)"

U prilogu 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 koja se može pronaći u upravitelju biblioteka unutar ide. Nakon što se ovo uveze, postoje primjeri datoteka, odlučio sam proširiti LED blink datoteku 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 skreni lijevo, ako je naredba desna, tada će pokrenuti metodu skretanje udesno, a u suprotnom će pokrenuti metodu naprijed. Ove tri metode su vrlo slične jedna drugoj, govore da digitalni pinovi moraju biti ili NISKI (uzemljeni) ili 100 (PWM), za to kako robot ne bi bio prebrz, govoreći vozaču motora da samo pusti malo napon izlaz. Redoslijed ovih izlaza čini da robot skrene lijevo -desno ili ide naprijed, to je zbog orijentacije napona koji ide prema motorima.

U privitku je.ino skripta za arduino.

Korak 5: Testiranje

Testiranje
Testiranje
Testiranje
Testiranje
Testiranje
Testiranje

Slike su priložene kako bi se projekt od početka do kraja. Prva slika prikazuje obuku u toku. Nakon što se to završi, prikazuje se ispis napravljenog modela. Treća slika prikazuje predviđanje iz scenarija obuke. ovo je posljednja faza scenarija obuke. Ako pogledate u fasciklu u kojoj se nalazi skripta za obuku, napravljen je grafikon i model. Grafikon bi trebao izgledati kao slika 4, ovdje se prikazuje historija treninga od početka do kraja.

Konačna slika je dok se pokreće scenarij pi kamere, to je prijenos uživo s kamere pi. predviđanje se vrši na svakom okviru i predviđanje se štampa na terminalu. Okvir prikazuje šta kamera vidi.

U prilogu je moj univerzitetski izvještaj o ovom projektu. 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 testiranje datoteka koje sam napravio usput.

Preporučuje se: