Satura rādītājs:

Sejas izsekošana, izmantojot ARDUINO !!!: 7 soļi
Sejas izsekošana, izmantojot ARDUINO !!!: 7 soļi

Video: Sejas izsekošana, izmantojot ARDUINO !!!: 7 soļi

Video: Sejas izsekošana, izmantojot ARDUINO !!!: 7 soļi
Video: Andonstar AD409 Pro 10.1 inch Digital PCB Microscope 300X Magnifier with HDMI output 2024, Jūlijs
Anonim
Sejas izsekošana, izmantojot ARDUINO !!!
Sejas izsekošana, izmantojot ARDUINO !!!

Iepriekšējā pamācībā es dalījos, kā jūs varat sazināties starp Arduino un Python, izmantojot “pyserial” moduli, un vadīt LED. Ja neesat to redzējis, pārbaudiet to šeit: KOMUNIKĀCIJA ARDUINO & PYTHON!

Un kā jūs varat noteikt objekta krāsu un izsekot to ekrānā, pārbaudiet to šeit: KRĀSU NOTEIKŠANA, Izmantojot OPENCV UN PYTHON.

Šajā pamācībā es jums parādīšu, kā izsekot sejas, izmantojot Arduino un Python, un likt kamerai sekot sejai. Tas var likties grūti, bet ticiet man, ka tā nav, viss, kas jums nepieciešams, ir pamatzināšanas par Arduino un Python.

Tātad, sāksim…

1. darbība: lietas, kas jums būs nepieciešamas:

Lietas, kas jums būs nepieciešamas
Lietas, kas jums būs nepieciešamas
Lietas, kas jums būs nepieciešamas
Lietas, kas jums būs nepieciešamas
Lietas, kas jums būs nepieciešamas
Lietas, kas jums būs nepieciešamas

Prasības ir minimālas. Šeit es sniedzu visu nepieciešamo daļu sarakstu:

Aparatūras prasības:

  • Arduino UNO (Amazon ASV / Amazon ES)
  • Tīmekļa kamera (Amazon ASV / Amazon ES)
  • Servos x 2 (Amazon ASV / Amazon ES)
  • Maizes dēlis (Amazon ASV / Amazon ES)
  • Servo Pan noliekšanas komplekts (Amazon ASV / Amazon EU)

Prasība programmatūrai:

  1. Python 2.7 (jāinstalē, Linux OS parasti tā ir iepriekš instalēta)
  2. OpenCV (varat to lejupielādēt atsevišķi vai instalēt, izmantojot “pip install” Skaidrāk tālāk)
  3. pyserial (var uzstādīt ar pipi)
  4. dūšīgs.
  5. Haarcascade.

Pēc visu lietu apkopošanas mēs varam pāriet uz instalēšanas posmu …

2. darbība: Python vides iestatīšana:

Python vides iestatīšana
Python vides iestatīšana
Python vides iestatīšana
Python vides iestatīšana
Python vides iestatīšana
Python vides iestatīšana

Python instalēšana:

Tātad vispirms mums ir jāieslēdz Python 2.7. Lai to izdarītu, vispirms lejupielādējiet un instalējiet python 2.7.14. Lai pārbaudītu, vai tas ir pareizi instalēts, dodieties: Windows meklēšana >> Ierakstiet "IDLE" >> Nospiediet Enter. Jāparādās Python Shell.

VAI

Meklēšanas ierakstiet “CMD” un nospiediet taustiņu Enter, lai atvērtu komandu uzvedni. CMD tipa >> python un nospiediet taustiņu Enter, jāparāda Python saskarne.

Ja CMD redzat kļūdu, nekrītiet panikā, iespējams, ir jāiestata vides mainīgais. Jūs varat sekot šai apmācībai šeit, lai iestatītu vides mainīgo.

“Pyserial”, “OpenCV” un “numpy” instalēšana python:

Lai instalētu šos moduļus, mēs izmantosim pip install, Vispirms atveriet CMD un ierakstiet šādus kodus:-

pip instal sērijas

pip instalēt opencv-python> pip instalēt numpy

šīs komandas instalēs nepieciešamos moduļus. Tagad mēs varam pāriet uz kodēšanas daļu …

3. darbība: Python skripts:

Python skripts
Python skripts

Pirms sākat rakstīt kodu, vispirms jāizveido jauna mape, jo viss kods ir jāsaglabā tajā pašā mapē. Tāpēc izveidojiet jaunu mapi, nosauciet to par visu, ko vēlaties. un lejupielādējiet “Haarcascade” no apakšas un ielīmējiet to mapē.

Tagad atveriet piezīmju grāmatiņu un uzrakstiet zemāk norādīto skriptu. Saglabājiet to kā “face.py” tajā pašā mapē kā haarcascade. (Jūs varat lejupielādēt manu iesniegto kodu zemāk esošajā failā):

#importējiet visus nepieciešamos moduļus

importēt numpy kā np importēt sērijas importēšanas laiku importēt sys importēt cv2 #Setup Komunikācijas ceļš arduino (COM5 vietā ievietojiet portu, kuram ir pievienots jūsu arduino) arduino = serial. Serial ('COM5', 9600) time.sleep (2) print ("Savienots ar arduino …") #importing Haarcascade sejas noteikšanai face_cascade = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') #Lai uzņemtu video straumi no tīmekļa kameras. cap = cv2. VideoCapture (0) #Izlasiet uzņemto attēlu, pārveidojiet to pelēkā krāsā un atrodiet sejas, kamēr 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.aplis (img, (250, 250), 5, (255, 255, 255), -1) pelēks = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) sejas = face_cascade.detectMultiScale (pelēks, 1.3) # atklāt seju un ap to izveidot taisnstūri. (x, y, w, h) sejās: cv2. taisnstūris (img, (x, y), (x+w, y+h), (0, 255, 0), 5) roi_gray = pelēks [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)) drukāt (' Y: '+str (y)) drukāt (' x+w: '+str (x+w)) drukāt (' y+h: '+str (y+h))) # Roi centrs (taisnstūris) xx = int (x+(x+h))/2 yy = int (y+(y+w))/2 print (xx) print (yy) centrs = (xx, yy) # datu sūtīšana uz arduino print ("Taisnstūra centrs ir:", centrs) data = "X {0: d} Y {1: d} Z".format (xx, yy) print ("output = '" +data + "" ") arduino.write (dati) #Parādiet straumi. cv2.imshow ('img', img) #Hit 'Esc', lai pārtrauktu izpildi k = cv2.waitKey (30) & 0xff, ja k == 27: pārtraukums

Kad tas ir izdarīts, turpiniet rakstīt arduino kodu …

4. darbība: Arduino kods:

Arduino kods
Arduino kods

Kad python skripts ir gatavs, mums ir nepieciešama arduino skice, lai kontrolētu servo. Skatiet tālāk redzamo kodu, ielīmējiet to Arduino IDE un saglabājiet to kā “servo.ino” tajā pašā mapē, kurā atrodas face.py un haarcascade. augšupielādējiet kodu un pārejiet pie nākamās darbības, lai izveidotu savienojumus.

(Lejupielādējams fails ir norādīts zemāk)

#iekļaut

Servo servoVer; // Vertikālais servo servo servoHor; // Horizontālais servo int x; int y; int prevX; int iepriekšējais; void setup () {Serial.begin (9600); servoVer.attach (5); // Pievienojiet vertikālo servo pie tapas 5 servoHor.attach (6); // Pievienojiet horizontālo servo 6. tapai servoVer.write (90); servoHor.write (90); } void Pos () {if (prevX! = x || prevY! = y) {int servoX = karte (x, 600, 0, 70, 179); int servoY = karte (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 (); ja (Serial.read () == 'Y') {y = Serial.parseInt (); Pos (); }} while (Serial.available ()> 0) {Serial.read (); }}}

5. solis: Pan-Tilt mehānisms:-

Pan-Tilt mehānisms
Pan-Tilt mehānisms
Pan-Tilt mehānisms
Pan-Tilt mehānisms

Esmu izmantojis viegli pieejamu komplektu Pan-Tilt. Ja vēlaties, varat to izgatavot pats, izmantojot koka/plastmasas vai pat 3D druku.

Tas, ko izmantoju, ir diezgan lēts un ļoti viegli saliekams. Tomēr, ja vēlaties saņemt norādījumus par to, kā to izdarīt, to varat atrast šeit.

6. darbība. Savienojumu izveide:

Savienojumu veidošana
Savienojumu veidošana
Savienojumu veidošana
Savienojumu veidošana

Ķēde ir diezgan vienkārša. Vienkārši pievienojiet divus servo arduino.

  1. Vertikāli līdz tapai 5
  2. Horizontāli līdz 6. tapai
  3. Jauda līdz +5V
  4. Zeme līdz GND

Pārbaudiet ķēdes shēmu.

7. darbība: TESTĒŠANA:

  • Kad viss ir izdarīts, pēdējais, kas jādara, ir pārbaudīt, vai tas darbojas. Lai pārbaudītu, vispirms pārliecinieties, vai servo ir pareizi pievienots arduino un vai skice ir augšupielādēta.
  • Pēc skices augšupielādes noteikti aizveriet IDE, lai ports varētu brīvi izveidot savienojumu ar python.
  • Tagad atveriet “face.py” ar Python IDLE un nospiediet “F5”, lai palaistu kodu. Tas aizņems dažas sekundes, lai izveidotu savienojumu ar arduino, un tad jums vajadzētu redzēt logu, kas straumē tīmekļa kameru. Tagad kods atklās jūsu seju, un servos tas izsekos.
  • Servo vajadzētu pārvietoties, pārvietojot objektu. Tagad vienkārši pievienojiet kameru servos, lai tā pārvietotos kopā ar servo.

Paldies.

Ieteicams: