Innholdsfortegnelse:
- Trinn 1: Krav
- Trinn 2: Trening av data
- Trinn 3: Implementere Pi -kameraets spådommer
- Trinn 4: Arduino Robot
- Trinn 5: Testing
- Trinn 6: Alle tilleggsfiler
Video: Raspberry Pi 4 Traffic Sign Recognition Robot: 6 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:22
Dette instruerbare er basert på mitt universitetsprosjekt. Målet var å lage et system hvor et nevralnettverk analyserer et bilde og deretter basert på gjenkjenningen vil fortelle en arduino -robot å bevege seg via Ros.
For eksempel hvis et sving til høyre blir gjenkjent, vil roboten svinge til høyre, hvis et sving til venstre blir gjenkjent, vil roboten svinge til venstre, hvis ingen av dem blir gjenkjent, vil roboten fortsette fremover. Datasettet som skal brukes er den offisielle trafikkskiltgjenkjenningen fra INI (2019) (Institut Fur Neuroinformatik), dette datasettet har 43 klasser, men bare to er nødvendig; 00033 og 00034 mapper i datasettet er venstre og høyre svingskilt.
Trinn 1: Krav
Kravene til dette prosjektet er følgende:
En arduino -robot. (i utgangspunktet en arduino uno, en motordriver og motorer) (ikke nødvendig hvis du ikke bruker en robot)
En bringebær pi 4.
Et pi -kamera.
Programvare som kreves:
Python 3.
OpenCV 4.
Tensorflyt.
arduino IDE (ikke nødvendig hvis du ikke bruker en robot)
Ros (ikke nødvendig hvis du ikke bruker en robot)
Uansett hva din favoritt python ide er (På bringebær pi bruker jeg Thonny).
Følg instruksjonene fra Adrian for å konfigurere OpenCV og Tensorflow. Lenke:
Jeg anbefaler å se på så mange av opplæringene hans som mulig, de er veldig interessante og er både nyttige for nybegynnere så vel som middels.
Trinn 2: Trening av data
Togskriptet er designet for å få tilgang til datasettet som samler rundt 50 000 bilder fra 43 klasser. Skriptet er skrevet i python, ved hjelp av en rekke biblioteker: os - dette er for å koble python -skriptet til den riktige katalogen der datasettet er plassert. Matplotlib - dette er for å vise dataene fra treningsmodellen. Tensorflow og keras - dette er bibliotekene som brukes til å lage den kunstige nevrale nettverksmodellen, de brukes til å designe modellen. Numpy - dette biblioteket er for å gjøre bilder til en matrise som deretter kan settes gjennom modellen for å hente en prediksjon.
Skriptet som er vedlagt er pythonkoden for å lage en modell fra datasettet. Dette består av konvolusjonell 2D med en (5, 5) inngang og en aktivering av relu deretter pooling, når dette er gjort går inngangen gjennom en annen konvolusjon med en (3, 3) inngang med samme aktivering og pooling. Dette skjer en siste gang før det blir flatet, og deretter brukes tettheten på mengden klasser det er, i dette tilfellet 43.
Det neste trinnet var å kompilere modellen. Dette er delen som setter optimeren, en sgd var den mest passende siden denne var lik optimalisereren som ble brukt i oppgave 1. Sgd står for Stokastisk gradient nedstigning. Også i kompilatoren må tapet stilles inn, det er best å velge et sparse_categorical_crossentropy -tap siden kategoriene er som heltall, og modellen vil gi en prediksjon for hver klasse som en flyt mellom 0 og 1. 1 er 100% nøyaktighet.
Når kompilatoren er fullført, må det brukes en generator for at modellen skal begynne å behandle bildeinngangene. Generatoren består av flere deler: training_set - dette er lenken til datasettet som brukes til trening, steps_per_epoch - dette er antall trinn per epoke som kreves, epoker - dette er hvor mange ganger programmet vil iterere gjennom et komplett sett med data, validation_data - dette er lenken til datasettet som brukes til validering, validation_steps - antall trinn som brukes for validering, validering skjer på slutten av hver epoke.
Generelt må en fullstendig sletting av hele datasettet være fullført per epoke. Derfor vil for eksempel et datasett med 1024 bilder kreve: Batchstørrelse = 32, trinn per epoke = 32, epoker = 1. Hvert trinn inkluderer hele batchstørrelsen, så med en batchstørrelse på 32 vil trinnene være 32. På den andre siden Det er best å ha en større batchstørrelse enn antall klasser, dette er fordi hvis batchstørrelsen er mindre, kan hvert trinn ikke inneholde et bilde fra hver klasse.
Når modellen er ferdig trent, vil programmet ved hjelp av matplotlib lage en graf over resultatene, dette viser treningens historie fra start til slutt. Grafen består av nøyaktighet, valideringsnøyaktighet, tap og valideringstap, dette deles opp per epoke for å vise hvordan treningen utviklet seg. Den siste fasen er å lagre modellen som en.h5 -fil som du kan få tilgang til senere for forutsigelsesprosessen. Lagring av modellen betyr at hver gang forutsigelsesprogrammet kjøres, trenger ikke treningsprogrammet å kjøres igjen. Treningsprogrammet kan ta opptil 10 minutter per epoke på en bringebærpi.
Vedlagt er opplæringsmanuset:
Trinn 3: Implementere Pi -kameraets spådommer
Det neste programmet er prediksjon og utgivermanus.
Det første trinnet er å laste inn modellen ved hjelp av model.load (). Den andre fasen er å iterere gjennom bildene fra pi -kameraet ved hjelp av opencv og deretter endre størrelsen på rammen til samme størrelse som inngangsstørrelsene som ble brukt i treningstrinnet, 32 x 32 piksler. Når dette er gjort, blir den nye størrelsen på rammen satt gjennom modellen ved hjelp av model.predict () som sender ut en matrise, hvert element i matrisen er en flyter fra 0 til 1, elementindeksen er den samme som klassen den representerer, derfor det første elementet er klasse ett, og tallet er forutsigelsen om at bildet er fra den klassen. F.eks.
MERK: Hvis du ikke bruker robotsiden. Bare fjern linjene:
"importer rospy"
def talker (retning):
melding = String ()
pub = rospy. Publisher ('robot', String, queue_size = 10)
rospy.init_node ('snakker', anonym = sant)
melding = retning
rospy.loginfo (melding)
pub.publish (melding)"
"snakker (retning)"
Vedlagt er Pi -kameraskriptet.
Trinn 4: Arduino Robot
Det siste trinnet er robotprogramskriptet.
Dette er skrevet i C ++ og er en.ino -fil for arduino uno. Programmet krever ros -biblioteket som finnes i biblioteksjefen i ideen. Når dette er importert, er det eksempelfiler, jeg valgte å utvide led -blink -filen siden dette ville gjøre et lignende mål som det jeg trengte. Programmet fortsetter å løkke til strømmen er frakoblet, først lytter det til emneroboten, når det fanger en kommando fra det emnet, vil det ha en if -setning for å se hva kommandoen sier. Hvis kommandoen er igjen, kjører skriptet sving til venstre -metoden, hvis kommandoen er høyre, kjører den sving til høyre -metoden, og ellers kjører den fremover -metoden. Disse tre metodene er veldig like hverandre, de sier at de digitale pinnene enten er LAVE (bakken) eller 100 (PWM) dette er for, slik at roboten ikke er for rask ved å fortelle motorføreren å bare la litt av spenning ut. Rekkefølgen på disse utgangene er det som får roboten til å svinge til venstre og høyre eller gå fremover, dette skyldes orienteringen til spenningen som går til motorene.
Vedlagt er.ino -skriptet for arduino.
Trinn 5: Testing
Bildene vedlagt slik at prosjektet fra start til slutt. Det første bildet viser opplæringen som er i gang. Når det er fullført, vises en utskrift av modellen som er laget. Det tredje bildet viser en prediksjon fra treningsmanuset. dette er den siste fasen av opplæringsmanuset. Hvis du ser i mappen som treningsskriptet er i, er det laget en graf og en modell. Grafen skal se ut som bilde 4 her, dette viser historien til treningen fra start til slutt.
Det siste bildet er mens du kjører pi -kameraskriptet, det er en direktesending fra pi -kameraet. det gjøres en prediksjon på hver ramme og prediksjonen skrives ut i terminalen. Rammen viser hva kameraet ser.
Vedlagt er min universitetsrapport for dette prosjektet. Les mer om prosjektet.
Trinn 6: Alle tilleggsfiler
Noen av disse testet filer jeg laget underveis.
Anbefalt:
Arduino Traffic Light Controller Bruke RBG Led - 4-veis: 3 trinn
Arduino Traffic Light Controller Bruke RBG Led | 4-veis: I dette innlegget skal du lære om hvordan du lager en Arduino-trafikklyskontroller. Denne lyskrysskontrolleren vil bli brukt til å kontrollere trafikkflyten. Disse kan brukes i områder med høy trafikk for å unngå trafikkblokker eller ulykker. Dette
Micro: bit MU Vision Sensor for Beginners - I2C and Shape Card Recognition: 8 Steps
Micro: bit MU Vision Sensor for Beginners - I2C og Shape Card Recognition: Jeg har fått tak i en MU vision sensor for Micro: bit. Det ser ut til å være et kult verktøy som gjør at jeg kan lage mange forskjellige visjonsbaserte prosjekter. Dessverre er det ikke så mange guider til det, og selv om dokumentasjonen virkelig er
Star Recognition Using Computer Vision (OpenCV): 11 trinn (med bilder)
Stjernegjenkjenning ved hjelp av Computer Vision (OpenCV): Denne instruksjonen vil beskrive for deg hvordan du lager et datasynprogram for å automatisk identifisere stjernemønstre i et bilde. Metoden bruker OpenCV (Open-Source Computer Vision) -biblioteket til å lage et sett med trente HAAR-kaskader som kan
The New Day of DF Gesture Recognition Sensors: 5 trinn
The New Day of DF Gesture Recognition Sensors: For et par dager siden fikk jeg en gestgjenkjenningssensor, som bildet viser. Brukte den i et par dager, jeg er ganske sikker på at denne Gravity: Gesture & Touch Sensor er et klassisk verk! Gesture Recognition, som alltid kommer med sci-fi, kult
Kart Traffic Robot: 8 trinn
Cardboard Traffic Control Robot: Jeg er med på pappkonkurransen. Hvis du liker min instruerbare, vennligst stem på den! Etter å ha studert denne instruksen, lærer du hvordan du designer og bruker Cruizmo Cis. Cruizmo Cis er en intelligent robot som styrer trafikk. Den styrer begge bilene