Taula de continguts:

Robot de reconeixement de senyals de trànsit Raspberry Pi 4: 6 passos
Robot de reconeixement de senyals de trànsit Raspberry Pi 4: 6 passos

Vídeo: Robot de reconeixement de senyals de trànsit Raspberry Pi 4: 6 passos

Vídeo: Robot de reconeixement de senyals de trànsit Raspberry Pi 4: 6 passos
Vídeo: Все осталось позади! - Невероятный заброшенный викторианский особняк в Бельгии 2024, Desembre
Anonim
Robot de reconeixement de senyals de trànsit Raspberry Pi 4
Robot de reconeixement de senyals de trànsit Raspberry Pi 4

Aquest instructiu es basa en el meu projecte universitari. L’objectiu era crear un sistema on una xarxa neuronal analitzés una imatge i, a partir del reconeixement, li dirà a un robot arduino que es mogui per Ros.

Per exemple, si es reconeix un signe de gir a la dreta, el robot girarà a la dreta; si es reconeix un signe de gir a l'esquerra, el robot girarà a l'esquerra; si no es reconeix cap dels dos, el robot continuarà endavant. El conjunt de dades que s’utilitzarà és el reconeixement oficial de senyals de trànsit de l’INI (2019) (Institut Fur Neuroinformatik), aquest conjunt de dades té 43 classes, però només se’n necessiten dues; Les carpetes 00033 i 00034 del conjunt de dades són signes de gir a l'esquerra i a la dreta.

Pas 1: requisits

Requisits
Requisits
Requisits
Requisits
Requisits
Requisits

Els requisits per a aquest projecte són els següents:

Un robot arduino. (bàsicament un arduino uno, un controlador de motor i motors) (no cal si no utilitzeu un robot)

Un pi 4 de gerds.

Una càmera pi.

Es requereix programari:

Python 3.

OpenCV 4.

Tensorflow.

ID d'arduino (no cal si no utilitzeu un robot)

Ros (no cal si no utilitzeu un robot)

Sigui quina sigui la vostra idea de pitó preferida (al raspberry pi, faig servir Thonny).

Per configurar OpenCV i Tensorflow, seguiu les instruccions d'Adrian. Enllaç:

Recomano mirar tants tutorials com sigui possible, són realment interessants i són útils tant per a principiants com per a intermedis.

Pas 2: formació de dades

El guió del tren està dissenyat per accedir al conjunt de dades que compila al voltant de 50.000 imatges de 43 classes. L’escriptura s’escriu en python, utilitzant diverses biblioteques: os: serveix per enllaçar l’escriptura python al directori correcte on es troba el conjunt de dades. Matplotlib: serveix per mostrar les dades del model d'entrenament. Tensorflow i keras: són les biblioteques que s’utilitzen per crear el model de xarxa neuronal artificial, que s’utilitzen per dissenyar el model. Numpy: aquesta biblioteca serveix per convertir imatges en una matriu que després es pot transmetre pel model per recuperar una predicció.

El script adjunt és el codi python per fer un model a partir del conjunt de dades. Això consisteix en 2D convolucional amb una entrada (5, 5) i una activació de relu i agrupació, un cop fet això, l'entrada passa per una altra convolució amb una entrada (3, 3) amb la mateixa activació i agrupació. Això passa per última vegada abans de ser aplanat i després s'aplica la densitat a la quantitat de classes que hi ha, en aquest cas 43.

El següent pas va ser compilar el model. Aquesta és la part que defineix l’optimitzador, un sgd era el més adequat ja que era similar a l’optimitzador utilitzat en la tasca 1. Sgd significa descens de gradient estocàstic. També dins del compilador cal definir la pèrdua, escollir una pèrdua sparse_categorical_crossentropy és el millor ajust, ja que les categories són enteres i el model produirà una predicció per a cada classe com a float entre 0 i 1. 1 amb una precisió del 100%.

Un cop finalitzat el compilador, cal aplicar un generador perquè el model comenci a processar les entrades d’imatge. El generador consta de diverses parts: training_set - aquest és l’enllaç al conjunt de dades utilitzat per a la formació, steps_per_epoch - aquest és el nombre de passos per època que es requereixen, èpoques - són les vegades que el programa iterarà a través d’un conjunt complet de dades., validation_data: aquest és l’enllaç al conjunt de dades utilitzat per a la validació, validation_steps: el nombre de passos utilitzats per a la validació, la validació passa al final de cada època.

En general, cal esborrar completament el conjunt de dades per època. Per tant, per exemple, un conjunt de dades de 1024 imatges requerirà: Mida del lot = 32, Passos per època = 32, Èpoques = 1. Cada pas inclou la mida del lot sencer, de manera que amb una mida de lot de 32 els passos seran 32. mà, és millor tenir una mida de lot més gran que el nombre de classes, ja que si la mida del lot és més petita, cada pas no pot incloure una imatge de cada classe.

Un cop el model hagi acabat la formació, mitjançant matplotlib el programa farà un gràfic de les sortides, que mostra la història de la formació de principi a fi. El gràfic consta de precisió, precisió de validació, pèrdua i pèrdua de validació, que es divideix per època per mostrar com va avançar la formació. La fase final consisteix a desar el model com a fitxer.h5 al qual es pot accedir més endavant per al procés de predicció. Desar el model significa que cada cop que s’executa el programa de predicció, no cal tornar a executar el programa d’entrenament. El programa d’entrenament pot trigar fins a 10 minuts per època en un raspberry pi.

Adjuntem el guió de formació:

Pas 3: implementació de les prediccions de la càmera Pi

El següent programa és el script de predicció i editor.

La primera etapa és carregar el model mitjançant model.load (). La segona etapa consisteix a recórrer els fotogrames de la càmera pi mitjançant opencv i, a continuació, canviar la mida del fotograma a la mateixa mida que les mides d'entrada utilitzades a l'etapa d'entrenament, 32 x 32 píxels. Un cop fet això, el nou marc redimensionat es posa a través del model mitjançant model.predict () que genera una matriu, cada element de la matriu és un flotant de 0 a 1, l’índex d’element és el mateix que la classe que representa, per tant el primer element és la classe un i el nombre és la predicció de la certesa que la imatge és d’aquesta classe. Per exemple.

NOTA: Si no utilitzeu la part del robot. Només cal que traieu les línies:

"importar rospy"

def talker (direcció):

missatge = Cadena ()

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

rospy.init_node ('parlador', anònim = True)

missatge = direcció

rospy.loginfo (missatge)

pub.publish (missatge)"

"parlador (direcció)"

S'adjunta l'script de la càmera Pi.

Pas 4: robot Arduino

L’últim pas és l’escriptura del programa del robot.

Això està escrit en C ++ i és un fitxer.ino per a l’arduino uno. El programa requereix la biblioteca ros que es pot trobar al gestor de biblioteques de l’ide. Un cop importat, hi ha fitxers d'exemple, he optat per ampliar el fitxer de parpelleig de led, ja que això faria un objectiu similar al que necessitava. El programa continua en bucle fins que es desconnecta l’alimentació, primer escolta el robot tema, quan agafa una ordre d’aquest tema tindrà una sentència if per veure què diu l’ordre. Si es deixa l'ordre, l'script executa el mètode de gir a l'esquerra, si l'ordre és correcte, s'executarà el mètode de gir a la dreta i, en cas contrari, s'executarà el mètode de reenviament. Aquests tres mètodes són molt similars entre ells, diuen que els pins digitals són BAIXOS (terra) o 100 (PWM), perquè el robot no sigui massa ràpid dient al conductor del motor que només deixi una mica de tensió fora. L'ordre d'aquestes sortides és el que fa que el robot giri a l'esquerra i la dreta o vagi cap endavant, això es deu a l'orientació del voltatge que va als motors.

S'adjunta l'escriptura.ino per a arduino.

Pas 5: proves

Proves
Proves
Proves
Proves
Proves
Proves

Les imatges adjuntes permeten el projecte de principi a fi. La primera imatge mostra la formació en procés. Un cop completat, es mostra una impressió del model realitzat. La tercera imatge mostra una predicció del guió de formació. aquesta és l'última etapa del guió de formació. Si mireu a la carpeta on es troba el guió d’entrenament, s’ha creat un gràfic i un model. El gràfic hauria d’assemblar-se a la imatge 4 aquí, mostra la història de l’entrenament de principi a fi.

La imatge final és mentre s'executa l'script de la càmera pi, és un flux en directe des de la càmera pi. es fa una predicció a cada fotograma i la predicció s’imprimeix al terminal. El marc mostra el que veu la càmera.

Adjuntem el meu informe de la Universitat d’aquest projecte. Llegiu per obtenir més informació sobre el projecte.

Pas 6: tots els fitxers addicionals

Tots els fitxers addicionals
Tots els fitxers addicionals

Alguns d’aquests eren proves de fitxers que vaig fer pel camí.

Recomanat: