Innehållsförteckning:

Ansiktsspårningsenhet! Python & Arduino: 5 steg
Ansiktsspårningsenhet! Python & Arduino: 5 steg

Video: Ansiktsspårningsenhet! Python & Arduino: 5 steg

Video: Ansiktsspårningsenhet! Python & Arduino: 5 steg
Video: CS50 2013 - Week 9 2024, November
Anonim
Image
Image
Ansiktsspårningsenhet! Python och Arduino
Ansiktsspårningsenhet! Python och Arduino
Ansiktsspårningsenhet! Python och Arduino
Ansiktsspårningsenhet! Python och Arduino

Av Techovator0819 Min Youtube -kanal Följ mer av författaren:

IoT: Weather Box (med anpassade larm och tidtagare)
IoT: Weather Box (med anpassade larm och tidtagare)
IoT: Weather Box (med anpassade larm och tidtagare)
IoT: Weather Box (med anpassade larm och tidtagare)
Den multifunktionella autonoma roboten: 'tillgång'
Den multifunktionella autonoma roboten: 'tillgång'
Den multifunktionella autonoma roboten: 'tillgång'
Den multifunktionella autonoma roboten: 'tillgång'

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: