Innehållsförteckning:
- Tillbehör
- Steg 1: Installera Python och OpenCV
- Steg 2: Vad är Haar-liknande funktioner?
- Steg 3: Kodning i Python
- Steg 4: Programmering av Arduino
- Steg 5: Slutsats
Video: Ansiktsspårningsenhet! Python & Arduino: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
Av Techovator0819 Min Youtube -kanal Följ mer av författaren:
Om: Jag älskar bara att göra nya saker. Som saker som handlar om mikrokontroller, maskinteknik, artificiell intelligens, datavetenskap och allt som intresserar mig. Och här hittar du allt… Mer om Techovator0819 »
Hej alla där ute som läser detta instruerbara. Detta är en ansiktsspårningsenhet som fungerar på ett pythonbibliotek som heter OpenCV. CV står för 'Computer Vision'. Sedan satte jag upp ett seriellt gränssnitt mellan min dator och min Arduino UNO. Så det betyder att det här inte bara fungerar på Python.
Den här enheten känner igen ditt ansikte i ramen, sedan skickar den vissa kommandon till Arduino för att placera kameran på ett sådant sätt att den stannar inuti ramen! Låter coolt? Låt oss hoppa direkt in i det då.
Tillbehör
1. Arduino UNO
2. 2 x Servomotorer (Alla servomotorer blir bra men jag använde Tower Pro SG90)
3. Installera Python
4. Installera OpenCV
5. Webbkamera
Steg 1: Installera Python och OpenCV
Att installera Python är ganska rakt fram!
www.python.org/downloads/
Du kan följa länken ovan för att ladda ner python -versionen (Mac, Windows eller Linux) som passar dig bäst (64 bitar eller 32 bitar). Resten av installationsprocessen är enkel och du guidas igenom av gränssnittet.
När du är klar med installationen öppnar du kommandotolken och skriver följande:
pip installera opencv-python
Det borde installera openCV -biblioteket. I händelse av felsökning kan du kolla in den här sidan.
Efter att ha ställt in miljön och alla förutsättningar, låt oss se hur vi faktiskt kan bygga detta!
Steg 2: Vad är Haar-liknande funktioner?
Haarliknande funktioner är funktioner i en digital bild. Namnet kommer från Haar wavelets. Dessa är en familj av fyrkantiga vågor som används för att identifiera funktioner i en digital bild. Haarkaskader är i grunden en klassificerare som hjälper oss att upptäcka föremål (i våra fall ansikten) med hjälp av de hårliknande funktionerna.
I vårt fall, för enkelhetens skull, använder vi förutbildade Haar Cascades för att identifiera ansikten. Du kan följa DENNA länk till en github-sida och ladda ner xml-filen för Haar Cascade.
1. Klicka på 'haarcascade_frontalface_alt.xml'
2. Klicka på "Raw" -knappen längst upp till höger i kodfönstret.
3. Det leder dig till en annan sida med endast text.
4. Högerklicka och klicka på "Spara som.."
5. Spara den i samma katalog eller mapp som den för pythonkoden som du ska skriva.
Steg 3: Kodning i Python
importera cv2
importera numpy som np importera serieimporttid
Vi importerar alla de bibliotek vi behöver.
ard = serial. Serial ("COM3", 9600)
Vi skapar ett serieobjekt som heter 'ard'. Vi anger också portnamnet och BaudRate som parametrar.
face_cascade = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml')
Vi skapar ett annat objekt för vår Haar Cascade. Se till att HaarCascade -filen finns kvar i samma mapp som detta pythonprogram.
vid = cv2. VideoCapture (0)
Vi skapar ett objekt för att fånga video från webbkameran. 0 som parameter betyder den första webbkameran som är ansluten till min dator.
docs.opencv.org/2.4/modules/objdetect/doc/cascade_classification.html
medan det är sant:
_, frame = vid.read ()#läser den aktuella ramen till variabelramen grå = cv2.cvtColor (ram, cv2. COLOR_BGR2GRAY) #konverterar ram -> gråskalad bild#följande rad upptäcker ansikten. #First parameter är bilden som du vill upptäcka på #minSize = () anger minsta storlek på ansiktet i form av pixlar #Klicka på länken ovan för att veta mer om Cascade Classification ansikten = face_cascade.detectMultiScale (grå, minSize = (80, 80), minNeighbors = 3) #A för loop för att detektera ansikten. för (x, y, w, h) i ansikten: cv2.rektangel (ram, (x, y), (x+w, y+h), (255, 0, 0), 2)#ritar en rektangel runt ansiktet Xpos = x+(w/2) #c beräknar X-koordinaten för ansiktets mitt. Ypos = y+(h/2) #calcualtes Y-koordinaten för ansiktets mitt om Xpos> 280: #Följande kodblock kontrollerar om ansiktet är ard.write ('L'.encode ()) #on vänster, höger, övre eller nedre med avseende på tiden. sov (0,01) #center i ramen. elif Xpos 280: ard.write ('D'.code ()) time.sleep (0.01) elif Ypos <200: ard.write (' U'.encode ()) time.sleep (0.01) else: ard.write ('S'.kod ()) time.sleep (0.01) break cv2.imshow (' frame ', frame)#visar ramen i ett separat fönster. k = cv2.waitKey (1) & 0xFF om (k == ord ('q')): #if 'q' trycks på tangentbordet, det går ur medan loop. ha sönder
cv2.destroyAllWindows () #stänger alla fönster
ard.close () #stänger den seriella kommunikationen
vid.release () #slutar ta emot video från webbkameran.
Steg 4: Programmering av Arduino
Känn dig fri att ändra programmet enligt din maskinvaruinstallation som passar dina behov.
#omfatta
Servo servoX;
ServoservoY;
int x = 90;
int y = 90;
void setup () {
// lägg din installationskod här för att köra en gång: Serial.begin (9600); servoX.attach (9); servoY.attach (10); servoX.write (x); servoY.write (y); fördröjning (1000); }
char input = ""; // seriell ingång lagras i denna variabel
void loop () {
// lägg din huvudkod här för att köra upprepade gånger: if (Serial.available ()) {// kontrollerar om det finns data i den seriella bufferten input = Serial.read (); // läser in data i en variabel om (input == 'U') {servoY.write (y+1); // justerar servovinkeln enligt ingången y += 1; // uppdaterar vinkelns värde} annars if (input == 'D') {servoY.write (y-1); y -= 1; } annat {servoY.write (y); } if (input == 'L') {servoX.write (x-1); x -= 1; } annars if (input == 'R') {servoX.write (x+1); x += 1; } annat {servoX.write (x); } input = ""; // rensar variabeln} // processen upprepas hela tiden !!:)}
Steg 5: Slutsats
Detta är ett trevligt och interaktivt sätt genom vilket du kan utforma integrera Computer Vision i dina Arduino -projekt. Computer Vision är faktiskt ganska kul. Och jag hoppas verkligen att ni har gillat det. Om ja, meddela mig i kommentarerna. Och prenumerera på min youtube -kanal. Tack på förhand <3 <3
youtube.com/channel/UCNOSfI_iQ7Eb7-s8CrExGfw/videos
Rekommenderad:
Python Introduction - Katsuhiko Matsuda & Edwin Cijo - Grunder: 7 steg
Python Introduction - Katsuhiko Matsuda & Edwin Cijo - Grunder: Hej, vi är 2 studenter i MYP 2. Vi vill lära dig grunderna för hur du kodar Python.Det skapades i slutet av 1980 -talet av Guido van Rossum i Nederländerna. Det gjordes som en efterträdare till ABC -språket. Dess namn är " Python " för när
Visualisera din Bitcoin -vinst och förlust med Arduino & Python: 6 steg
Visualisera din Bitcoin -vinst och förlust med Arduino & Python: Grundidé Personligen är jag en kryptovalutainvesterare. Men jag har också en stor belastning på jobbet. Så jag kan inte fortsätta spåra bitcoinpriset tio gånger i minuten. Men jag vill fortfarande veta om jag tjänar eller förlorar pengar. Således,
Smart kontroll av Raspberry Pi -fläkt med Python & Thingspeak: 7 steg
Smart styrning av Raspberry Pi -fläkt med Python & Thingspeak: Kort översikt Som standard är fläkten direkt ansluten till GPIO - det innebär att den fungerar konstant. Trots den relativt tysta driften av fläkten är dess kontinuerliga drift inte en effektiv användning av ett aktivt kylsystem. Samtidigt
Esp32 Temperatur- och luftfuktighetswebbserver med PYTHON & Zerynth IDE: 3 steg
Esp32 Temperatur- och luftfuktighetsserver med PYTHON & Zerynth IDE: Esp32 är en magnifik mikrokontroller, den är kraftfull precis som en Arduino men ännu bättre! Den har Wifi-anslutning, så att du kan utveckla IOT-projekt billigt och enkelt. enheter är frustrerande, först är det inte stabilt, Secon
One More Arduino Weather Station (ESP-01 & BMP280 & DHT11 & OneWire): 4 steg
One More Arduino Weather Station (ESP-01 & BMP280 & DHT11 & OneWire): Här kan du hitta en iteration av att använda OneWire med de få få stiften på en ESP-01. val (du måste ha meriter …) Samlar in sensoriska data från en BMP280 och en DHT11