Turinys:

VEIDO SEKIMAS NAUDOJANT ARDUINO !!!: 7 žingsniai
VEIDO SEKIMAS NAUDOJANT ARDUINO !!!: 7 žingsniai

Video: VEIDO SEKIMAS NAUDOJANT ARDUINO !!!: 7 žingsniai

Video: VEIDO SEKIMAS NAUDOJANT ARDUINO !!!: 7 žingsniai
Video: Introduction to HT16K33 4 Digit LED Seven Segment Display with Arduino 2024, Liepa
Anonim
VEIDO TEKIMAS NAUDOTI ARDUINO !!!
VEIDO TEKIMAS NAUDOTI ARDUINO !!!

Ankstesnėje instrukcijoje aš pasidalinau, kaip galite bendrauti tarp „Arduino“ir „Python“naudodami „pyserial“modulį ir valdyti šviesos diodą. Jei nematėte, patikrinkite čia: KOMUNIKACIJA TARP ARDUINO & PYTHON!

Ir kaip jūs galite aptikti objekto spalvą ir sekti ją ekrane, patikrinkite čia: SPALVŲ ATSISAKYMAS NAUDOJANT OPENCV IR PYTHON.

Šioje instrukcijoje parodysiu, kaip stebėti veidus naudojant „Arduino“ir „Python“ir priversti fotoaparatą sekti veidą. Tai gali atrodyti sunku, bet patikėkite, kad ne, viskas, ko jums reikia, yra pagrindinės žinios apie „Arduino“ir „Python“.

Taigi pradėkime…

1 žingsnis: reikalingi dalykai:

Dalykai, kurių jums reikės
Dalykai, kurių jums reikės
Dalykai, kurių jums reikės
Dalykai, kurių jums reikės
Dalykai, kurių jums reikės
Dalykai, kurių jums reikės

Reikalavimai minimalūs. Čia aš pateikiau dalių sąrašą visko, ko jums reikia:

Techninės įrangos reikalavimas:

  • „Arduino UNO“(„Amazon“JAV / „Amazon“ES)
  • Žiniatinklio kamera („Amazon“JAV / „Amazon“ES)
  • Servos x 2 („Amazon“JAV / „Amazon EU“)
  • Duonos lenta („Amazon“JAV / „Amazon EU“)
  • „Servo Pan Tilt Kit“(„Amazon“JAV / „Amazon EU“)

Programinės įrangos reikalavimas:

  1. „Python 2.7“(turėtų būti įdiegta, „Linux“OS paprastai turi būti iš anksto įdiegta)
  2. „OpenCV“(galite jį atsisiųsti atskirai arba įdiegti naudodami „pip install“, paaiškinta toliau)
  3. „pyserial“(gali būti montuojamas kartu su vamzdžiu)
  4. varginantis.
  5. „Haarcascade“.

Surinkę viską, galime pereiti prie diegimo žingsnio …

2 veiksmas: „Python“aplinkos nustatymas:

„Python“aplinkos nustatymas
„Python“aplinkos nustatymas
„Python“aplinkos nustatymas
„Python“aplinkos nustatymas
„Python“aplinkos nustatymas
„Python“aplinkos nustatymas

Python diegimas:

Taigi pirmiausia mums reikia „Python 2.7“. Norėdami tai padaryti, pirmiausia atsisiųskite ir įdiekite python 2.7.14. Norėdami patikrinti, ar jis tinkamai įdiegtas, eikite: „Windows“paieška >> Įveskite „IDLE“>> Paspauskite „Enter“. Turėtų pasirodyti „Python Shell“.

ARBA

Ieškodami įveskite „CMD“ir paspauskite „Enter“, kad atidarytumėte komandų eilutę. CMD tipo >> python ir paspauskite Enter, turėtų būti rodoma „Python“sąsaja.

Jei CMD matote klaidą, nepanikuokite, tikriausiai turite nustatyti aplinkos kintamąjį. Norėdami nustatyti aplinkos kintamąjį, galite vadovautis čia.

Įdiekite „pyserial“, „OpenCV“ir „numpy“į „python“:

Norėdami įdiegti šiuos modulius, naudosime pip install, Pirmiausia atidarykite CMD ir įveskite šiuos kodus:-

„pip install serial“

pip install opencv-python> pip install numpy

šios komandos įdiegs reikiamus modulius. Dabar galime pereiti prie kodavimo dalies …

3 žingsnis: „Python“scenarijus:

„Python“scenarijus
„Python“scenarijus

Prieš pradedant rašyti kodą, pirmiausia reikia sukurti naują aplanką, nes visas kodas turi būti saugomas tame pačiame aplanke. Taigi sukurkite naują aplanką, pavadinkite jį viskuo, ko norite. ir atsisiųskite „Haarcascade“iš apačios ir įklijuokite į aplanką.

Dabar atidarykite užrašų knygelę ir parašykite žemiau pateiktą scenarijų. Išsaugokite jį kaip „face.py“tame pačiame aplanke kaip „haarcascade“. (Mano pateiktą kodą galite atsisiųsti žemiau esančiame faile):

#importuokite visus reikalingus modulius

importuoti numpy kaip np importuoti serijinį importo laiką importuoti sys importuoti cv2 #Setup „Arduino“ryšio kelias (vietoj „COM5“įveskite prievadą, prie kurio prijungtas jūsų arduino) arduino = serial. Serial („COM5“, 9600) time.sleep (2) print ("Prisijungta prie arduino …") #importing Haarcascade veido aptikimui face_cascade = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') #Norėdami užfiksuoti vaizdo įrašo srautą iš internetinės kameros. cap = cv2. VideoCapture (0) #Skaitykite užfiksuotą vaizdą, paverskite jį pilku vaizdu ir raskite veidus, o 1: ret, img = cap.read () cv2.resizeWindow ('img', 500, 500) cv2.line (img, (500, 250), (0, 250), (0, 255, 0), 1) cv2.line (img, (250, 0), (250, 500), (0, 255, 0), 1) cv2.circle (img, (250, 250), 5, (255, 255, 255), -1) pilka = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) veidai = face_cascade.detectMultiScale (pilka, 1.3) # aptikti veidą ir padaryti aplink jį stačiakampį. (x, y, w, h) veiduose: cv2. stačiakampis (img, (x, y), (x+w, y+h), (0, 255, 0), 5) roi_gray = pilka [y: y+h, x: x+w] roi_color = img [y: y+h, x: x+w] arr = {y: y+h, x: x+w} print (arr) print ('X: '+str (x)) spausdinti (' Y: '+str (y)) spausdinti (' x+w: '+str (x+w)) spausdinti (' y+h: '+str (y+h))) # Roi centras (stačiakampis) xx = int (x+(x+h))/2 yy = int (y+(y+w))/2 print (xx) print (yy) centre = (xx, yy) # duomenų siuntimas į „arduino print“(„Stačiakampio centras yra:“, centras) data = "X {0: d} Y {1: d} Z".formatas (xx, yy) print ("output = '" +data + "" ") arduino.write (duomenys) #Rodyti srautą. cv2.imshow ('img', img) #Paspauskite 'Esc', kad nutrauktumėte vykdymą k = cv2.waitKey (30) & 0xff, jei k == 27: pertrauka

Kai tai bus padaryta, rašykite arduino kodą …

4 žingsnis: „Arduino“kodas:

„Arduino“kodas
„Arduino“kodas

Kai „Python“scenarijus yra paruoštas, mums reikia „arduino“eskizo, kad galėtume valdyti servo. Peržiūrėkite žemiau esantį kodą, įklijuokite jį į „Arduino IDE“ir išsaugokite kaip „servo.ino“tame pačiame aplanke kaip „face.py“ir „haarcascade“. įkelkite kodą ir pereikite prie kito žingsnio, kad užmegztumėte ryšį.

(Atsisiunčiamas failas pateiktas žemiau)

#įtraukti

Servo servoVer; // Vertikali servo servo servoHor; // Horizontali servo int x; int y; int prevX; int prevY; void setup () {Serial.begin (9600); servoVer.attach (5); // Pritvirtinkite vertikalią servo prie 5 kaiščio servoHor.attach (6); // Pritvirtinkite horizontalią servo prie 6 kaiščio servoVer.write (90); servoHor.write (90); } void Pos () {if (prevX! = x || prevY! = y) {int servoX = žemėlapis (x, 600, 0, 70, 179); int servoY = žemėlapis (y, 450, 0, 179, 95); servoX = min (servoX, 179); servoX = max (servoX, 70); servoY = min (servoY, 179); servoY = max (servoY, 95); servoHor.write (servoX); servoVer.write (servoY); }} void loop () {if (Serial.available ()> 0) {if (Serial.read () == 'X') {x = Serial.parseInt (); if (Serial.read () == 'Y') {y = Serial.parseInt (); Pos (); }} while (Serial.available ()> 0) {Serial.read (); }}}

5 žingsnis: „Pan-Tilt“mechanizmas:-

„Pan-Tilt“mechanizmas
„Pan-Tilt“mechanizmas
„Pan-Tilt“mechanizmas
„Pan-Tilt“mechanizmas

„Pan-Tilt“naudoju lengvai prieinamą rinkinį. Jei norite, galite tai padaryti patys naudodami medieną/plastiką ar net 3D spausdinimą.

Tas, kurį naudojau, yra gana pigus ir labai lengvai surenkamas. Tačiau jei norite instrukcijų, kaip tai padaryti, tai galite rasti čia.

6 veiksmas: jungčių užmezgimas:

Ryšių užmezgimas
Ryšių užmezgimas
Ryšių užmezgimas
Ryšių užmezgimas

Grandinė yra gana paprasta. Tiesiog prijunkite du servo prie arduino.

  1. Vertikaliai iki 5 kaiščio
  2. Horizontalus iki 6 kaiščio
  3. Maitinimas iki +5V
  4. Žemė iki GND

Patikrinkite grandinės schemą.

7 žingsnis: BANDYMAS:

  • Kai viskas bus padaryta, paskutinis dalykas, kurį reikia padaryti, yra patikrinti, ar jis veikia. Norėdami išbandyti, pirmiausia įsitikinkite, kad servos yra tinkamai prijungtos prie arduino ir eskizas įkeliamas.
  • Įkėlus eskizą, būtinai uždarykite IDE, kad prievadas galėtų laisvai prisijungti prie „python“.
  • Dabar atidarykite „face.py“naudodami „Python IDLE“ir paspauskite „F5“, kad paleistumėte kodą. Prireiks kelių sekundžių prisijungti prie „arduino“, tada turėtumėte pamatyti langą, transliuojantį žiniatinklio kamerą. Dabar kodas aptiks jūsų veidą ir servos stebės, kaip jis seka.
  • Servo turėtų judėti, kai jūs perkeliate objektą. Dabar tiesiog pritvirtinkite fotoaparatą prie servo, kad jis judėtų kartu su servo sistemomis.

Ačiū.

Rekomenduojamas: