Innholdsfortegnelse:

Ansiktssporingsenhet! Python og Arduino: 5 trinn
Ansiktssporingsenhet! Python og Arduino: 5 trinn

Video: Ansiktssporingsenhet! Python og Arduino: 5 trinn

Video: Ansiktssporingsenhet! Python og Arduino: 5 trinn
Video: Голубая стрела (1958) фильм 2024, November
Anonim
Image
Image
Ansiktssporingsenhet! Python og Arduino
Ansiktssporingsenhet! Python og Arduino
Ansiktsporingsenhet! Python og Arduino
Ansiktsporingsenhet! Python og Arduino

Av Techovator0819 Min Youtube -kanal Følg mer av forfatteren:

IoT: Weather Box (med tilpassede alarmer og tidtakere)
IoT: Weather Box (med tilpassede alarmer og tidtakere)
IoT: Weather Box (med tilpassede alarmer og tidtakere)
IoT: Weather Box (med tilpassede alarmer og tidtakere)
Den multifunksjonelle autonome roboten: 'Asset'
Den multifunksjonelle autonome roboten: 'Asset'
Den multifunksjonelle autonome roboten: 'Asset'
Den multifunksjonelle autonome roboten: 'Asset'

Om: Jeg liker bare å lage nye ting. Som ting som omhandler mikrokontrollere, maskinteknikk, kunstig intelligens, informatikk og alt som interesserer meg. Og her finner du alt… Mer om Techovator0819 »

Hei alle der ute som leser dette lærerikt. Dette er en ansiktssporingsenhet som fungerer på et python -bibliotek kalt OpenCV. CV står for 'Computer Vision'. Deretter satte jeg opp et serielt grensesnitt mellom min PC og min Arduino UNO. Så det betyr at dette ikke bare fungerer på Python.

Denne enheten gjenkjenner ansiktet ditt i rammen, så sender den visse kommandoer til Arduino for å plassere kameraet på en slik måte at det forblir inne i rammen! Høres kult ut? La oss hoppe rett inn i det da.

Rekvisita

1. Arduino UNO

2. 2 x Servomotorer (Alle servomotorer vil være fine, men jeg brukte Tower Pro SG90)

3. Installere Python

4. Installere OpenCV

5. Web-kamera

Trinn 1: Installere Python og OpenCV

Det er ganske rett frem å installere Python!

www.python.org/downloads/

Du kan følge koblingen ovenfor for å laste ned python -versjonen (Mac, Windows eller Linux) som passer deg best (64 bit eller 32 bit). Resten av installasjonsprosessen er enkel, og du blir guidet gjennom av grensesnittet.

Når du er ferdig med installasjonen, åpner du ledeteksten og skriver inn følgende:

pip installer opencv-python

Det bør installere openCV -biblioteket. Ved feilsøking kan du sjekke DENNE siden.

Etter å ha satt opp miljøet og alle forutsetninger, la oss se hvordan vi faktisk kan bygge dette!

Trinn 2: Hva er Haar-lignende funksjoner?

Haarlignende funksjoner er trekk ved et digitalt bilde. Navnet kommer fra Haar wavelets. Dette er en familie av firkantede bølger som brukes til å identifisere funksjoner i et digitalt bilde. Haar kaskader er i utgangspunktet en klassifisering som hjelper oss med å oppdage objekter (i ansiktene våre) ved hjelp av de hårlignende funksjonene.

I vårt tilfelle, for enkelhets skyld, bruker vi forhåndsutdannede Haar Cascades til å identifisere ansikter. Du kan følge DENNE lenken til en github-side og laste ned xml-filen for Haar Cascade.

1. Klikk på 'haarcascade_frontalface_alt.xml'

2. Klikk på "Raw" -knappen øverst til høyre i kodevinduet.

3. Det vil lede deg til en annen side med bare tekst.

4. Høyreklikk og klikk "Lagre som.."

5. Lagre den i samme katalog eller mappe som pythonkoden du skriver.

Trinn 3: Koding i Python

importer cv2

import numpy som np import seriell importtid

Vi importerer alle bibliotekene vi trenger.

ard = serial. Serial ("COM3", 9600)

Vi lager et serieobjekt kalt 'ard'. Vi spesifiserer også portnavnet og BaudRate som parametere.

face_cascade = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml')

Vi lager et annet objekt for Haar Cascade. Sørg for at HaarCascade -filen forblir i samme mappe som dette python -programmet.

vid = cv2. VideoCapture (0)

Vi lager et objekt som fanger video fra webkameraet. 0 som parameter betyr den første webkameraet som er koblet til min PC.

docs.opencv.org/2.4/modules/objdetect/doc/cascade_classification.html

mens det er sant:

_, frame = vid.read ()#leser gjeldende ramme til den variable rammen grå = cv2.cvtColor (ramme, cv2. COLOR_BGR2GRAY) #konverterer ramme -> gråtonet bilde#følgende linje oppdager ansikter. #First parameter er bildet du vil oppdage på #minSize = () angir minimumsstørrelsen på ansiktet når det gjelder piksler #Klikk på lenken ovenfor for å vite mer om Cascade Classification ansikter = face_cascade.detectMultiScale (grå, minSize = (80, 80), minNeighbors = 3) #A for sløyfe for å oppdage ansiktene. for (x, y, w, h) i ansikter: cv2.rektangel (ramme, (x, y), (x+w, y+h), (255, 0, 0), 2) #tegner et rektangel rundt ansiktet Xpos = x+(m/2) #c beregner X-koordinaten til ansiktets sentrum. Ypos = y+(h/2) #calcualtes Y-koordinaten til midten av ansiktet hvis Xpos> 280: #Følgende kodeblokker sjekker om ansiktet er ard.write ('L'.encode ()) #on venstre, høyre, topp eller bunn med hensyn til tiden. sove (0,01) #sentrum av rammen. 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'.kode ()) time.sleep (0.01) break cv2.imshow (' frame ', frame) #display the frame in a separate window. k = cv2.waitKey (1) & 0xFF hvis (k == ord ('q')): #if 'q' trykkes på tastaturet, forlater det mens -sløyfen. gå i stykker

cv2.destroyAllWindows () #lukker alle vinduer

ard.close () #lukker den serielle kommunikasjonen

vid.release () #slutter å motta video fra webkameraet.

Trinn 4: Programmering av Arduino

Du er velkommen til å endre programmet i henhold til maskinvareoppsettet som passer dine behov.

#inkludere

Servo servoX;

Servo servoY;

int x = 90;

int y = 90;

ugyldig oppsett () {

// legg oppsettskoden her for å kjøre en gang: Serial.begin (9600); servoX. fest (9); servoY.attach (10); servoX.write (x); servoY.write (y); forsinkelse (1000); }

char input = ""; // seriell inngang lagres i denne variabelen

void loop () {

// legg hovedkoden din her for å kjøre gjentatte ganger: if (Serial.available ()) {// sjekker om det er data i den serielle bufferinngangen = Serial.read (); // leser dataene inn i en variabel hvis (input == 'U') {servoY.write (y+1); // justerer servovinkelen i henhold til inngangen y += 1; // oppdaterer verdien av vinkelen} else if (input == 'D') {servoY.write (y-1); y -= 1; } annet {servoY.write (y); } if (input == 'L') {servoX.write (x-1); x -= 1; } annet hvis (input == 'R') {servoX.write (x+1); x += 1; } annet {servoX.write (x); } input = ""; // sletter variabelen} // prosessen fortsetter å gjenta !!:)}

Trinn 5: Konklusjon

Dette er en fin og interaktiv måte du kan designe inkorporere Computer Vision i dine Arduino -prosjekter. Computer Vision er faktisk ganske morsomt. Og jeg håper virkelig at dere har likt det. Hvis ja, gi meg beskjed i kommentarene. Og vær så snill å abonnere på min youtube -kanal. På forhånd takk <3 <3

youtube.com/channel/UCNOSfI_iQ7Eb7-s8CrExGfw/videos

Anbefalt: