Inhoudsopgave:
- Stap 1: Vereisten
- Stap 2: Training van gegevens
- Stap 3: De voorspellingen van de Pi-camera implementeren
- Stap 4: Arduino-robot
- Stap 5: Testen
- Stap 6: Alle extra bestanden
Video: Raspberry Pi 4 verkeersbordherkenningsrobot - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
Deze instructable is gebaseerd op mijn universitaire project. Het doel was om een systeem te creëren waarbij een neuraal netwerk een afbeelding analyseert en vervolgens op basis van de herkenning een arduino-robot vertelt om via Ros te bewegen.
Als bijvoorbeeld een bord rechtsaf wordt herkend, gaat de robot naar rechts, als een bord voor linksaf wordt herkend, draait de robot naar links, als geen van beide wordt herkend, gaat de robot vooruit. De dataset die zal worden gebruikt is de officiële verkeersbordherkenning van de INI (2019) (Institut Fur Neuroinformatik), deze dataset heeft 43 klassen, maar er zijn er maar twee nodig; De mappen 00033 en 00034 in de dataset zijn links en rechts afslaande borden.
Stap 1: Vereisten
De vereisten voor dit project zijn de volgende:
Een arduino-robot. (eigenlijk een arduino uno, een motordriver en motoren) (niet nodig als je geen robot gebruikt)
Een framboos pi 4.
Een pi-camera.
Benodigde software:
Python3.
Open CV 4.
tensorstroom.
arduino IDE (niet nodig als je geen robot gebruikt)
Ros (niet nodig als je geen robot gebruikt)
Wat je favoriete python-idee ook is (op de Raspberry Pi gebruik ik Thonny).
Volg de instructies van Adrian om OpenCV en Tensorflow in te stellen. Link:
Ik raad aan om zoveel mogelijk van zijn tutorials te bekijken, ze zijn erg interessant en zijn zowel nuttig voor beginners als voor gevorderden.
Stap 2: Training van gegevens
Het treinscript is ontworpen om toegang te krijgen tot de dataset die bestaat uit ongeveer 50.000 afbeeldingen uit 43 klassen. Het script is geschreven in python, met behulp van verschillende bibliotheken: os – dit is om het python-script te koppelen aan de juiste map waar de dataset zich bevindt. Matplotlib – dit is voor het weergeven van de gegevens uit het trainingsmodel. Tensorflow en keras - dit zijn de bibliotheken die worden gebruikt om het kunstmatige neurale netwerkmodel te maken, ze worden gebruikt om het model te ontwerpen. Numpy - deze bibliotheek is bedoeld om afbeeldingen om te zetten in een array die vervolgens door het model kan worden gehaald om een voorspelling op te halen.
Het bijgevoegde script is de python-code voor het maken van een model uit de dataset. Dit bestaat uit convolutionele 2D met een (5, 5) input en een activatie van relu dan pooling, zodra dit gedaan is gaat de input door een andere convolutie met een (3, 3) input met dezelfde activatie en pooling. Dit gebeurt nog een laatste keer voordat het wordt afgevlakt en dan wordt de dichtheid toegepast op het aantal klassen dat er is, in dit geval 43.
De volgende stap was het samenstellen van het model. Dit is het deel dat de optimiser instelt, een sgd was het meest passend omdat deze vergelijkbaar was met de optimiser die in opdracht 1 werd gebruikt. Sgd staat voor Stochastische gradiëntafdaling. Ook binnen de compiler moet het verlies worden ingesteld, het kiezen van een sparse_categorical_crossentropy-verlies is het beste omdat de categorieën als gehele getallen zijn en het model een voorspelling voor elke klasse zal uitvoeren als een float tussen 0 en 1. 1 is 100% nauwkeurigheid.
Zodra de compiler is voltooid, moet een generator worden toegepast om het model de beeldinvoer te laten verwerken. De generator bestaat uit meerdere delen: training_set – dit is de link naar de dataset die wordt gebruikt voor training, steps_per_epoch – dit is het aantal stappen per epoch dat nodig is, epochs – dit is hoe vaak het programma een volledige set gegevens zal doorlopen, validation_data - dit is de link naar de dataset die wordt gebruikt voor validatie, validation_steps - het aantal stappen dat wordt gebruikt voor validatie, validatie vindt plaats aan het einde van elk tijdperk.
Over het algemeen moet per tijdperk een volledige wipe van de hele dataset zijn voltooid. Daarom vereist een dataset van 1024 afbeeldingen bijvoorbeeld: Batchgrootte = 32, Stappen per epoch = 32, epochs = 1. Elke stap omvat de hele batchgrootte, dus bij een batchgrootte van 32 zijn de stappen 32. Aan de andere kant hand, het is het beste om een grotere batchgrootte te hebben dan het aantal klassen, dit komt omdat als de batchgrootte kleiner is, elke stap geen afbeelding van elke klasse kan bevatten.
Zodra het model klaar is met trainen, maakt het programma met behulp van matplotlib een grafiek van de output, dit toont de geschiedenis van de training van begin tot eind. De grafiek bestaat uit nauwkeurigheid, validatienauwkeurigheid, verlies en validatieverlies, dit is opgesplitst per tijdperk om te laten zien hoe de training vorderde. De laatste fase is om het model op te slaan als een.h5-bestand dat later kan worden geopend voor het voorspellingsproces. Het model opslaan betekent dat elke keer dat het voorspellingsprogramma wordt uitgevoerd, het trainingsprogramma niet opnieuw hoeft te worden uitgevoerd. Het trainingsprogramma kan tot 10 minuten per tijdperk duren op een Raspberry Pi.
Bijgevoegd is het trainingsscript:
Stap 3: De voorspellingen van de Pi-camera implementeren
Het volgende programma is het voorspellings- en uitgeversscript.
De eerste stap is om het model te laden met model.load(). De tweede fase is om de frames van de pi-camera te doorlopen met behulp van opencv en vervolgens het formaat van het frame te wijzigen in dezelfde grootte als de invoerformaten die in de trainingsfase worden gebruikt, 32 x 32 pixels. Zodra dit is gebeurd, wordt het nieuwe formaat van het frame door het model geplaatst met behulp van model.predict () dat een matrix uitvoert, elk element van de matrix is een float van 0 tot 1, de elementindex is hetzelfde als de klasse die het vertegenwoordigt, vandaar het eerste element is klasse één en het getal is de voorspelling van de zekerheid dat het beeld uit die klasse komt. bijv.
OPMERKING: Als u de robotzijde niet gebruikt. Verwijder gewoon de regels:
"Rospy importeren"
def prater(richting):
bericht = String()
pub = rospy. Publisher('robot', String, queue_size=10)
rospy.init_node('prater', anoniem=True)
bericht = richting
rospy.loginfo(bericht)
pub.publish(bericht)"
"prater (richting)"
Bijgevoegd is het Pi-camerascript.
Stap 4: Arduino-robot
De laatste stap is het script van het robotprogramma.
Dit is geschreven in C++ en is een.ino-bestand voor de arduino uno. Het programma vereist de ros-bibliotheek die te vinden is in de bibliothekenmanager binnen de ide. Zodra dit is geïmporteerd, zijn er voorbeeldbestanden, ik heb ervoor gekozen om het led-knipperbestand uit te breiden, omdat dit een vergelijkbaar doel zou hebben als wat ik nodig had. Het programma blijft in een lus lopen totdat de stroom wordt losgekoppeld, eerst luistert het naar de onderwerprobot, wanneer het een commando van dat onderwerp opvangt, zal het een if-statement hebben om te zien wat het commando zegt. Als de opdracht links is, voert het script de methode linksaf uit, als de opdracht goed is, wordt de methode rechtsom uitgevoerd en anders wordt de methode vooruit uitgevoerd. Deze drie methoden lijken erg op elkaar, ze vertellen de digitale pinnen of ze LAAG (aarde) of 100 (PWM) zijn, dit is voor zodat de robot niet te snel is door de motorbestuurder te vertellen dat hij slechts een beetje van spanning uit. De volgorde van deze uitgangen zorgt ervoor dat de robot naar links en rechts draait of vooruit gaat, dit komt door de oriëntatie van de spanning die naar de motoren gaat.
Bijgevoegd is het.ino-script voor arduino.
Stap 5: Testen
De afbeeldingen bijgevoegd, zodat het project van begin tot eind is. De eerste afbeelding toont de training in uitvoering. Zodra dat is voltooid, wordt een afdruk van het gemaakte model getoond. De derde afbeelding toont een voorspelling uit het trainingsscript. dit is de laatste fase van het trainingsscript. Als je in de map kijkt waar het trainingsscript in staat, is er een grafiek en een model gemaakt. De grafiek zou hier moeten lijken op afbeelding 4, dit toont de geschiedenis van de training van begin tot eind.
De uiteindelijke afbeelding is tijdens het uitvoeren van het pi-camerascript, het is een livestream van de pi-camera. op elk frame wordt een voorspelling gemaakt en de voorspelling wordt afgedrukt in de terminal. Het frame laat zien wat de camera ziet.
Bijgevoegd is mijn universiteitsrapport voor dit project. Lees voor meer informatie over het project.
Stap 6: Alle extra bestanden
Sommige hiervan waren testbestanden die ik onderweg maakte.
Aanbevolen:
DIY Raspberry Pi-downloadbox: 4 stappen
DIY Raspberry Pi Downloadbox: Ben je vaak bezig met het downloaden van grote bestanden zoals films, torrents, cursussen, tv-series, etc dan ben je hier aan het juiste adres. In deze Instructable zouden we onze Raspberry Pi zero in een downloadmachine veranderen. Die elke
Raspberry Pi-scorebord: 4 stappen
Raspberry Pi-scorebord: Vandaag zal ik uitleggen hoe ik dit scorebord heb gemaakt dat wordt bestuurd door een Raspberry Pi en wordt aangedreven door een 5V-voeding. Het gebruikt een combinatie van ws2811- en ws2812b-leds voor de verlichting en de structuur is gemaakt van multiplex en rood eiken. Voor een besch
Smart Home van Raspberry Pi: 5 stappen (met afbeeldingen)
Smart Home van Raspberry Pi: er zijn al verschillende producten die uw flat slimmer maken, maar de meeste zijn eigen oplossingen. Maar waarom heb je een internetverbinding nodig om een lamp te schakelen met je smartphone? Dat was voor mij een reden om mijn eigen Smar te bouwen
LED-knipper met Raspberry Pi - Hoe GPIO-pinnen op Raspberry Pi te gebruiken: 4 stappen
LED-knipper met Raspberry Pi | Hoe GPIO-pinnen op Raspberry Pi te gebruiken: Hallo allemaal, in deze instructables zullen we leren hoe we GPIO's van Raspberry Pi kunnen gebruiken. Als je ooit Arduino hebt gebruikt, weet je waarschijnlijk dat we een LED-schakelaar enz. op de pinnen kunnen aansluiten en het zo kunnen laten werken. laat de LED knipperen of krijg input van de schakelaar zodat
Raspbian installeren in Raspberry Pi 3 B zonder HDMI - Aan de slag met Raspberry Pi 3B - Uw Raspberry Pi instellen 3: 6 stappen
Raspbian installeren in Raspberry Pi 3 B zonder HDMI | Aan de slag met Raspberry Pi 3B | Je Raspberry Pi 3 instellen: Zoals sommigen van jullie weten, zijn Raspberry Pi-computers best geweldig en kun je de hele computer op een klein bordje krijgen. De Raspberry Pi 3 Model B heeft een quad-core 64-bit ARM Cortex A53 geklokt op 1,2 GHz. Dit zet de Pi 3 ongeveer 50