Cuprins:

Robot de recunoaștere a semnelor de circulație Raspberry Pi 4: 6 pași
Robot de recunoaștere a semnelor de circulație Raspberry Pi 4: 6 pași

Video: Robot de recunoaștere a semnelor de circulație Raspberry Pi 4: 6 pași

Video: Robot de recunoaștere a semnelor de circulație Raspberry Pi 4: 6 pași
Video: Noul Renault ARKANA - sistem de recunoaștere a semnelor de circulație 2024, Noiembrie
Anonim
Robot de recunoaștere a semnelor de circulație Raspberry Pi 4
Robot de recunoaștere a semnelor de circulație Raspberry Pi 4

Acest instructable se bazează pe proiectul meu universitar. Scopul a fost crearea unui sistem în care o rețea neuronală analizează o imagine și apoi, pe baza recunoașterii, va spune unui robot arduino să se deplaseze prin Ros.

De exemplu, dacă se recunoaște un semn de viraj la dreapta, atunci robotul se va întoarce la dreapta, dacă este recunoscut un semn de viraj la stânga, atunci robotul va vira la stânga, dacă niciunul dintre aceștia nu este recunoscut, atunci robotul va continua înainte. Setul de date care va fi utilizat este recunoașterea oficială a semnelor de trafic de la INI (2019) (Institut Fur Neuroinformatik), acest set de date are 43 de clase, însă sunt necesare doar două; 00033 și 00034 dosarele din setul de date sunt semne de viraj la stânga și la dreapta.

Pasul 1: Cerințe

Cerințe
Cerințe
Cerințe
Cerințe
Cerințe
Cerințe

Cerințele pentru acest proiect sunt următoarele:

Un robot arduino. (practic un arduino uno, un driver de motor și motoare) (nu este necesar dacă nu utilizați un robot)

Un zmeură pi 4.

O cameră pi.

Software necesar:

Python 3.

OpenCV 4.

Tensorflow.

IDE arduino (nu este necesar dacă nu utilizați un robot)

Ros (nu este necesar dacă nu utilizați un robot)

Oricare ar fi ideea ta preferată de piton (Pe raspberry pi, eu folosesc Thonny).

Pentru a configura OpenCV și Tensorflow, urmați instrucțiunile lui Adrian. Link:

Vă recomand să vă uitați la cât mai multe dintre tutorialele sale, sunt cu adevărat interesante și sunt utile atât pentru începători, cât și pentru intermediari.

Pasul 2: Instruirea datelor

Scriptul trenului este conceput pentru a accesa setul de date care compune aproximativ 50 000 de imagini din 43 de clase. Scriptul este scris în python, utilizând o varietate de biblioteci: os - acesta este pentru a lega scriptul python la directorul corect în care este situat setul de date. Matplotlib - este pentru afișarea datelor din modelul de antrenament. Tensorflow și keras - acestea sunt bibliotecile utilizate pentru a crea modelul de rețea neuronală artificială, acestea sunt utilizate pentru proiectarea modelului. Numpy - această bibliotecă este destinată transformării imaginilor într-o matrice care poate fi apoi introdusă prin model pentru a prelua o predicție.

Scriptul atașat este codul python pentru realizarea unui model din setul de date. Aceasta constă în 2D convoluțional cu o intrare (5, 5) și o activare a relu-ului apoi pooling, odată ce acest lucru este făcut, intrarea trece printr-o altă convoluție cu o intrare (3, 3) cu aceeași activare și pooling. Acest lucru se întâmplă pentru ultima dată înainte de a fi aplatizat și apoi densitatea se aplică cantității de clase existente, în acest caz 43.

Următorul pas a fost compilarea modelului. Aceasta este partea care stabilește optimizatorul, un sgd a fost cel mai potrivit, deoarece acesta a fost similar cu optimizatorul folosit în misiunea 1. Sgd reprezintă descendența de gradient stochastic. De asemenea, în cadrul compilatorului, pierderea trebuie setată, alegerea unei pierderi sparse_categorical_crossentropy este cea mai bună potrivire, deoarece categoriile sunt întregi, iar modelul va afișa o predicție pentru fiecare clasă sub formă de float între 0 și 1. 1 fiind o precizie de 100%.

Odată ce compilatorul este complet, trebuie aplicat un generator pentru ca modelul să înceapă să proceseze intrările de imagine. Generatorul este format din mai multe părți: training_set - acesta este linkul către setul de date utilizat pentru training, steps_per_epoch - acesta este numărul de pași pe epocă necesari, epoci - acestea sunt de câte ori programul va itera printr-un set complet de date, validation_data - acesta este linkul către setul de date utilizat pentru validare, validation_steps - numărul de pași utilizați pentru validare, validarea are loc la sfârșitul fiecărei epoci.

În general, o ștergere completă a întregului set de date trebuie să fie completă pe epocă. De aceea, de exemplu, un set de date de 1024 de imagini va necesita: Dimensiunea lotului = 32, Pașii pe epocă = 32, Epocile = 1. Fiecare pas include întreaga dimensiune a lotului, deci cu o dimensiune a lotului de 32 pașii vor fi 32. Pe de altă parte mână, cel mai bine este să aveți o dimensiune a lotului mai mare decât numărul de clase, acest lucru se datorează faptului că dacă dimensiunea lotului este mai mică, atunci fiecare pas nu poate include o imagine din fiecare clasă.

Odată ce modelul a terminat antrenamentul, folosind matplotlib programul va face un grafic al rezultatelor, acesta arată istoricul antrenamentului de la început până la sfârșit. Graficul constă din acuratețe, precizie de validare, pierdere și pierdere de validare, aceasta este împărțită pe epocă pentru a arăta cum a progresat antrenamentul. Etapa finală este salvarea modelului ca fișier.h5 care poate fi accesat ulterior pentru procesul de predicție. Salvarea modelului înseamnă că de fiecare dată când programul de predicție este rulat, programul de instruire nu trebuie să fie rulat din nou. Programul de antrenament poate dura până la 10 minute pe epocă pe un pi de zmeură.

Atașat este scriptul de instruire:

Pasul 3: Implementarea predicțiilor camerei Pi

Următorul program este scriptul de predicție și editor.

Prima etapă este încărcarea modelului folosind model.load (). A doua etapă constă în iterarea cadrelor de pe camera pi folosind opencv și apoi redimensionarea cadrului la aceeași dimensiune cu dimensiunile de intrare utilizate în etapa de antrenament, 32 x 32 pixeli. Odată ce acest lucru este realizat, noul cadru redimensionat este trecut prin model folosind model.predict () care produce o matrice, fiecare element al matricei este un flotor de la 0 la 1, indicele elementului este același cu clasa pe care o reprezintă, prin urmare primul element este clasa unu, iar numărul este prezicerea certitudinii imaginii din această clasă. De exemplu.

NOTĂ: Dacă nu utilizați partea robotului. Eliminați doar liniile:

"import rospy"

„difuzor (direcție):

mesaj = String ()

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

rospy.init_node ('vorbitor', anonim = Adevărat)

mesaj = direcție

rospy.loginfo (mesaj)

pub.publish (mesaj)"

„vorbitor (direcție)”

Atașat este scriptul camerei Pi.

Pasul 4: Robot Arduino

Ultimul pas este scriptul programului robot.

Acesta este scris în C ++ și este un fișier.ino pentru arduino uno. Programul necesită biblioteca ros, care poate fi găsită în managerul de biblioteci din ide. Odată ce acesta este importat, există exemple de fișiere, am ales să mă extind pe fișierul cu clipire cu led, deoarece acest lucru ar face un obiectiv similar cu ceea ce aveam nevoie. Programul continuă să se bucle până când alimentarea este deconectată, mai întâi ascultă robotul subiect, când prinde o comandă din subiectul respectiv va avea o instrucțiune if pentru a vedea ce spune comanda. Dacă comanda este lăsată, atunci scriptul execută metoda viraj la stânga, dacă comanda este dreaptă, atunci va rula metoda viraj la dreapta și altfel va rula metoda înainte. Aceste trei metode sunt foarte asemănătoare, spun pinilor digitali să fie LOW (la sol) sau 100 (PWM), pentru ca robotul să nu fie prea rapid, spunând conducătorului motorului să lase doar un pic de de tensiune. Ordinea acestor ieșiri este ceea ce face ca robotul să se întoarcă la stânga și la dreapta sau să meargă înainte, acest lucru se datorează orientării tensiunii care merge spre motoare.

Atașat este scriptul.ino pentru arduino.

Pasul 5: Testare

Testarea
Testarea
Testarea
Testarea
Testarea
Testarea

Imaginile atașate astfel încât proiectul de la început până la sfârșit. Prima imagine arată antrenamentul în proces. Odată ce acest lucru este complet, este afișată o imprimare a modelului realizat. A treia imagine prezintă o predicție din scenariul de antrenament. aceasta este ultima etapă a scenariului de antrenament. Dacă vă uitați în folderul în care se află scriptul de antrenament, a fost realizat un grafic și un model. Graficul ar trebui să arate ca imaginea 4 aici, aceasta arată istoria antrenamentului de la început până la sfârșit.

Imaginea finală este în timpul rulării scriptului pi camera, este un flux live de la camera pi. se face o predicție pe fiecare cadru și predicția este imprimată în terminal. Cadrul arată ce vede camera.

Atașat este raportul meu universitar pentru acest proiect. Vă rugăm să citiți pentru mai multe detalii despre proiect.

Pasul 6: Toate fișierele suplimentare

Toate fișierele suplimentare
Toate fișierele suplimentare

Unele dintre acestea testau fișiere pe care le-am făcut pe parcurs.

Recomandat: