Inhoudsopgave:
- Benodigdheden
- Stap 1: Python en OpenCV installeren
- Stap 2: Wat zijn haar-achtige kenmerken?
- Stap 3: Coderen in Python
- Stap 4: Programmeren van de Arduino
- Stap 5: Conclusie
Video: Gezichtsvolgapparaat! Python en Arduino: 5 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
Door Techovator0819Mijn YouTube-kanaalVolg meer van de auteur:
Over: Ik hou er gewoon van om nieuwe dingen te maken. Zoals dingen die te maken hebben met microcontrollers, werktuigbouwkunde, kunstmatige intelligentie, informatica en alles wat me interesseert. En hier vind je alle… Meer over Techovator0819 »
Hallo iedereen die dit instructable leest. Dit is een apparaat voor het volgen van gezichten dat werkt op een python-bibliotheek genaamd OpenCV. CV staat voor 'Computervisie'. Daarna heb ik een seriële interface opgezet tussen mijn pc en mijn Arduino UNO. Dus dat betekent dat dit niet alleen op Python werkt.
Dit apparaatje herkent je gezicht in het frame, dan stuurt het bepaalde commando's naar de Arduino om de camera zo te positioneren dat het binnen het frame blijft! Klinkt goed? Laten we er dan meteen in springen.
Benodigdheden
1. Arduino UNO
2. 2 x servomotoren (alle servomotoren zijn prima, maar ik gebruikte Tower Pro SG90)
3. Python installeren
4. OpenCV installeren
5. Webcamera
Stap 1: Python en OpenCV installeren
Het installeren van Python is vrij eenvoudig!
www.python.org/downloads/
U kunt de bovenstaande link volgen om de python-versie (Mac, Windows of Linux) te downloaden die het beste bij u past (64 bit of 32 bit). De rest van het installatieproces is eenvoudig en u wordt door de interface geleid.
Zodra u klaar bent met de installatie, opent u uw opdrachtprompt en typt u het volgende:
pip installeer opencv-python
Dat zou de openCV-bibliotheek moeten installeren. Voor het oplossen van problemen kunt u DEZE pagina bekijken.
Na het opzetten van de Omgeving en alle randvoorwaarden, laten we eens kijken hoe we dit daadwerkelijk kunnen bouwen!
Stap 2: Wat zijn haar-achtige kenmerken?
Haarachtige kenmerken zijn kenmerken van een digitaal beeld. De naam komt van Haar wavelets. Dit is een familie van vierkante golven die worden gebruikt om kenmerken in een digitaal beeld te identificeren. Haarcascades is in feite een classificatie die ons helpt objecten (in ons geval gezichten) te detecteren met behulp van de haar-achtige functies.
In ons geval gebruiken we voor de eenvoud vooraf getrainde Haar Cascades om gezichten te identificeren. U kunt DEZE link van een github-pagina volgen en het xml-bestand voor de Haar Cascade downloaden.
1. Klik op 'haarcascade_frontalface_alt.xml'
2. Klik op de 'Raw'-knop rechtsboven in het codevenster.
3. Het zal je naar een andere pagina leiden met alleen tekst.
4. Klik met de rechtermuisknop en klik op 'Opslaan als..'
5. Sla het op in dezelfde map of map als die van de python-code die u gaat schrijven.
Stap 3: Coderen in Python
import cv2
import numpy als np import seriële importtijd
We importeren alle bibliotheken die we nodig hebben.
ard = serieel. Serial("COM3", 9600)
We maken een serieel object met de naam 'ard'. We specificeren ook de Port Name en de BaudRate als parameters.
face_cascade = cv2. CascadeClassifier('haarcascade_frontalface_default.xml')
We maken nog een object voor onze Haar Cascade. Zorg ervoor dat het HaarCascade-bestand in dezelfde map blijft als dit python-programma.
vid = cv2. VideoCapture(0)
We maken een object dat video van de webcam vastlegt. 0 als parameter betekent de eerste webcam die op mijn pc is aangesloten.
docs.opencv.org/2.4/modules/objdetect/doc/cascade_classification.html
terwijl waar:
_, frame = vid.read()#lees het huidige frame naar de variabele frame grey = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY)#converts frame -> greyscale image #de volgende regel detecteert gezichten. #Eerste parameter is de afbeelding waarop u wilt detecteren op #minSize=() specificeert de minimale grootte van het gezicht in termen van pixels #Klik op de bovenstaande link om meer te weten over de Cascade Classification-gezichten = face_cascade.detectMultiScale(grijs, minSize =(80, 80), minNeighbours=3) #A for-lus om de gezichten te detecteren. voor (x, y, w, h) in vlakken: cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)#tekent een rechthoek rond het gezicht Xpos = x+(w/2)#berekent de X-coördinaat van het midden van het gezicht. Ypos = y+(h/2)#berekent de Y-coördinaat van het midden van het gezicht als Xpos > 280: #De volgende codeblokken controleren of het gezicht ard.write('L'.encode()) is #on links, rechts, boven of onder met betrekking tot de tijd.slaap(0.01) #midden van het frame. elif Xpos 280: ard.write('D'.encode()) time.sleep(0.01) elif Ypos < 200: ard.write('U'.encode()) time.sleep(0.01) else: ard.write ('S'.encode()) time.sleep(0.01) break cv2.imshow('frame', frame)#geeft het frame in een apart venster weer. k = cv2.waitKey(1)&0xFF if(k == ord('q')): #als 'q' op het toetsenbord wordt ingedrukt, verlaat het de while-lus. pauze
cv2.destroyAllWindows() #sluit alle vensters
ard.close() #sluit de seriële communicatie
vid.release() #stopt met het ontvangen van video van de webcam.
Stap 4: Programmeren van de Arduino
Voel je vrij om het programma aan te passen aan je hardware-instellingen om aan je behoeften te voldoen.
#erbij betrekken
Servo-servoX;
Servo-servo;
intx = 90;
int y = 90;
ongeldige setup() {
// plaats hier uw setup-code om een keer uit te voeren: Serial.begin (9600); servoX.attach (9); servoY.attach(10); servoX.write(x); servoY.write(y); vertraging (1000); }
char-invoer = ""; // seriële invoer wordt opgeslagen in deze variabele
lege lus() {
// plaats hier uw hoofdcode om herhaaldelijk uit te voeren: if(Serial.available()){ //controleert of er gegevens in de seriële bufferinvoer = Serial.read(); // leest de gegevens in een variabele if (input == 'U') {servoY.write (y+1); // past de servohoek aan volgens de invoer y + = 1; // werkt de waarde van de hoek bij } else if (invoer == 'D') {servoY.write (y-1); y-= 1; } else{ servoY.write(y); } if(invoer == 'L'){ servoX.write(x-1); x -= 1; } else if(invoer == 'R'){ servoX.write(x+1); x += 1; } anders{ servoX.write(x); } invoer = ""; //wist de variabele } //proces blijft herhalen!!:) }
Stap 5: Conclusie
Dit is een leuke en interactieve manier waarmee je Computer Vision kunt ontwerpen in je Arduino-projecten. Computer Vision is eigenlijk best leuk. En ik hoop echt dat jullie het leuk vonden. Zo ja, laat het me weten in de comments. En abonneer je op mijn YouTube-kanaal. Bij voorbaat dank <3<3
youtube.com/channel/UCNOSfI_iQ7Eb7-s8CrExGfw/videos
Aanbevolen:
MIDI-drumkit op Python en Arduino: 5 stappen (met afbeeldingen)
MIDI-drumstel op Python en Arduino: ik wilde altijd al een drumstel kopen sinds ik een kind was. Destijds had alle muziekapparatuur niet alle digitale toepassingen zoals we er tegenwoordig veel hebben, vandaar dat de prijzen en de verwachtingen te hoog waren. Onlangs heb ik besloten om een c
Gezichtsherkenning en identificatie - Arduino Face ID met OpenCV Python en Arduino: 6 stappen
Gezichtsherkenning en identificatie | Arduino Face ID met behulp van OpenCV Python en Arduino. Gezichtsherkenning AKA face ID is tegenwoordig een van de belangrijkste functies op mobiele telefoons. Dus ik had een vraag "mag ik een gezichts-ID hebben voor mijn Arduino-project" en het antwoord is ja… Mijn reis begon als volgt: Stap 1: Toegang tot wij
Python (pySerial) + Arduino + DC-motor: 14 stappen
Python (pySerial) + Arduino + DC-motor: deze korte tutorial toont de eenvoudige bediening van een DC-motor met behulp van een Python-GUI. Om Python te laten communiceren met een Arduino-bord zullen we het pySerial-pakket gebruiken. pySerial is een Python-bibliotheek die ondersteuning biedt voor seriële verbindingen over
Arduino programmeren met Python: 8 stappen
Arduino-programmering met Python: in dit artikel gaan we Arduino besturen met GUI-python. werken met python is heel eenvoudig. Ik ga elke stap vanaf het begin in detail delen
Toegang tot Arduino YÚN beheren met MySQL, PHP5 en Python: 11 stappen (met afbeeldingen)
Beheer de toegang van Arduino YÚN met MySQL, PHP5 en Python: Hallo vrienden! Nou, zoals je weet, in september het nieuwe première schild van Arduino, Arduino YUN. Deze kleine vriend heeft een Linux embedded systeem waarmee we alles kunnen draaien wat je maar kunt bedenken (tenminste tot nu toe). Hoewel er weinig informatie is