Turinys:

Veido stebėjimo įrenginys! „Python“ir „Arduino“: 5 žingsniai
Veido stebėjimo įrenginys! „Python“ir „Arduino“: 5 žingsniai

Video: Veido stebėjimo įrenginys! „Python“ir „Arduino“: 5 žingsniai

Video: Veido stebėjimo įrenginys! „Python“ir „Arduino“: 5 žingsniai
Video: Leap Motion SDK 2024, Lapkritis
Anonim
Image
Image
Veido stebėjimo įrenginys! „Python“ir „Arduino“
Veido stebėjimo įrenginys! „Python“ir „Arduino“
Veido stebėjimo įrenginys! „Python“ir „Arduino“
Veido stebėjimo įrenginys! „Python“ir „Arduino“

Mano „Youtube“kanalasSekite daugiau autoriaus:

Daiktų internetas: orų dėžutė (su pasirinktiniais signalais ir laikmačiais)
Daiktų internetas: orų dėžutė (su pasirinktiniais signalais ir laikmačiais)
Daiktų internetas: orų dėžutė (su pasirinktiniais signalais ir laikmačiais)
Daiktų internetas: orų dėžutė (su pasirinktiniais signalais ir laikmačiais)
Daugiafunkcinis autonominis robotas: „turtas“
Daugiafunkcinis autonominis robotas: „turtas“
Daugiafunkcinis autonominis robotas: „turtas“
Daugiafunkcinis autonominis robotas: „turtas“

Apie: Man tiesiog patinka kurti naujus dalykus. Kaip ir dalykai, susiję su mikrovaldikliais, mechanine inžinerija, dirbtiniu intelektu, kompiuterių mokslu ir viskuo, kas mane domina. Čia rasite visas… Daugiau apie Techovator0819 »

Sveiki visi, skaitantys šią pamoką. Tai veido sekimo įrenginys, veikiantis „python“bibliotekoje „OpenCV“. CV reiškia „Kompiuterinė vizija“. Tada aš sukūriau nuosekliąją sąsają tarp kompiuterio ir „Arduino UNO“. Tai reiškia, kad tai veikia ne tik „Python“.

Šis prietaisas atpažįsta jūsų veidą rėmelyje, tada siunčia tam tikras komandas „Arduino“, kad fotoaparatas būtų pastatytas taip, kad jis liktų kadro viduje! Skamba gerai? Tada leiskimės į jį.

Prekės

1. Arduino UNO

2. 2 x servo varikliai (bet kokie servo varikliai bus tinkami, bet aš naudoju Tower Pro SG90)

3. Python diegimas

4. „OpenCV“diegimas

5. Interneto kamera

1 veiksmas: „Python“ir „OpenCV“diegimas

Įdiegti „Python“yra gana paprasta!

www.python.org/downloads/

Galite atsisiųsti aukščiau esančią nuorodą, kad atsisiųstumėte jums tinkamiausią „python“versiją („Mac“, „Windows“ar „Linux“) (64 bitų arba 32 bitų). Likusi diegimo proceso dalis yra paprasta ir jus vadovaus sąsaja.

Baigę diegti, atidarykite komandų eilutę ir įveskite:

pip įdiegti opencv-python

Tai turėtų įdiegti „openCV“biblioteką. Jei kyla problemų, galite peržiūrėti ŠĮ puslapį.

Nustatę aplinką ir visas būtinas sąlygas, pažiūrėkime, kaip tai iš tikrųjų galime sukurti!

2 žingsnis: Kokios yra į Haar panašios savybės?

Į „Haar“panašios savybės yra skaitmeninio vaizdo ypatybės. Pavadinimas kilęs iš „Haar wavelets“. Tai yra kvadrato formos bangų šeima, kuri naudojama skaitmeninio vaizdo bruožams atpažinti. „Haar kaskados“iš esmės yra klasifikatorius, padedantis aptikti objektus (mūsų atveju veidus), naudojant į ryklius panašias savybes.

Mūsų atveju paprastumo dėlei veidams identifikuoti naudosime iš anksto apmokytas „Haar Cascades“. Galite sekti ŠIĄ „github“puslapio nuorodą ir atsisiųsti „Haar Cascade“xml failą.

1. Spustelėkite „haarcascade_frontalface_alt.xml“

2. Viršutiniame dešiniajame kodo lango kampe spustelėkite mygtuką „Žalias“.

3. Tai nukreips jus į kitą puslapį, kuriame yra tik tekstas.

4. Dešiniuoju pelės mygtuku spustelėkite ir paspauskite „Išsaugoti kaip“.

5. Išsaugokite jį tame pačiame kataloge ar aplanke, kuriame yra „Python“kodas, kurį ketinate rašyti.

3 žingsnis: kodavimas „Python“

importuoti cv2

import numpy kaip np importuoti serijinio importo laiką

Importuojame visas reikalingas bibliotekas.

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

Mes sukuriame serijinį objektą, pavadintą „ard“. Taip pat kaip parametrus nurodome prievado pavadinimą ir „BaudRate“.

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

Mes sukuriame dar vieną objektą savo „Haar Cascade“. Įsitikinkite, kad „HaarCascade“failas lieka tame pačiame aplanke kaip ir ši „python“programa.

vid = cv2. VideoCapture (0)

Sukuriame objektą, kuris fiksuoja vaizdo įrašą iš internetinės kameros. 0 kaip parametras reiškia pirmąją interneto kamerą, prijungtą prie mano kompiuterio.

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

nors tiesa:

_, frame = vid.read ()#nuskaito dabartinį kadrą į kintamą rėmelį pilka = cv2.cvtColor (kadras, cv2. COLOR_BGR2GRAY)#konvertuoja rėmelį -> pilkos spalvos vaizdas#kita eilutė aptinka veidus. #Pirmasis parametras yra vaizdas, kurį norite aptikti #minSize = () nurodo minimalų veido dydį pikseliais #Spustelėkite aukščiau esančią nuorodą ir sužinokite daugiau apie „Cascade Classification“veidus = face_cascade.detectMultiScale (pilka, minSize = (80, 80), min. Kaimynai = 3) #A kilpa, skirta aptikti veidus. (x, y, w, h) veiduose: cv2. stačiakampis (rėmas, (x, y), (x+w, y+h), (255, 0, 0), 2) #brėžia stačiakampį aplink veidas Xpos = x+(w/2) #skaičiuoja veido centro X koordinatę. Ypos = y+(h/2) #skaičiuoja veido centro Y koordinatę, jei Xpos> 280: #Šie kodo blokai patikrina, ar veidas yra ard.write ('L'.encode ()) #on kairėn, dešinėn, viršuje arba apačioje laiko atžvilgiu.miegas (0,01) #rėmo centras. elif Xpos 280: ard.write ('D'.kodas ()) laikas.sleep (0.01) elifas Ypos <200: ard.write (' U'.encode ()) time.sleep (0.01) else: ard.write ('S'.kodas ()) time.sleep (0.01) break cv2.imshow (' kadras ', kadras)#rodomas kadras atskirame lange. k = cv2.waitKey (1) & 0xFF if (k == ord ('q')): #jei 'q' yra paspaustas klaviatūroje, jis išeina iš ciklo. pertrauka

cv2.destroyAllWindows () #uždaro visus langus

ard.close () #uždaro serijinį ryšį

vid.release () #nustoja gauti vaizdo įrašą iš žiniatinklio kameros.

4 žingsnis: „Arduino“programavimas

Nedvejodami pakeiskite programą pagal savo aparatūros sąranką pagal savo poreikius.

#įtraukti

Servo servoX;

Servo servoY;

int x = 90;

int y = 90;

void setup () {

// įdėkite čia savo sąrankos kodą, kad paleistumėte vieną kartą: Serial.begin (9600); servoX.attach (9); servoY.attach (10); servoX.write (x); servoY.write (y); vėlavimas (1000); }

char įvestis = ""; // serijinis įėjimas yra saugomas šiame kintamajame

void loop () {

// įdėkite čia savo pagrindinį kodą, kad jis būtų paleistas pakartotinai: if (Serial.available ()) {// patikrina, ar serijinio buferio įvestyje yra duomenų = Serial.read (); // nuskaito duomenis į kintamąjį, jei (įvestis == 'U') {servoY.write (y+1); // sureguliuoja servo kampą pagal įvestį y += 1; // atnaujina kampo reikšmę} else if (input == 'D') {servoY.write (y-1); y -= 1; } else {servoY.write (y); } if (įvestis == 'L') {servoX.write (x-1); x -= 1; } else if (įvestis == 'R') {servoX.write (x+1); x += 1; } else {servoX.write (x); } įvestis = ""; // išvalo kintamąjį} // procesas kartojasi !!:)}

5 žingsnis: Išvada

Tai vienas gražus ir interaktyvus būdas, kuriuo galite sukurti „Computer Vision“įtraukimą į savo „Arduino“projektus. Kompiuterinė vizija iš tikrųjų yra gana smagi. Ir aš tikrai tikiuosi, kad jums tai patiko. Jei taip, praneškite man komentaruose. Ir prašau užsiprenumeruoti mano youtube kanalą. Iš anksto dėkoju <3 <3

youtube.com/channel/UCNOSfI_iQ7Eb7-s8CrExGfw/videos

Rekomenduojamas: