Kazalo:

Sledenje obrazu z uporabo ARDUINO !!!: 7 korakov
Sledenje obrazu z uporabo ARDUINO !!!: 7 korakov

Video: Sledenje obrazu z uporabo ARDUINO !!!: 7 korakov

Video: Sledenje obrazu z uporabo ARDUINO !!!: 7 korakov
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, November
Anonim
Sledenje obrazu z uporabo ARDUINA !!!
Sledenje obrazu z uporabo ARDUINA !!!

V prejšnjem navodilu sem delil, kako lahko komunicirate med Arduinom in Pythonom z uporabo modula 'pyserial' in nadzorujete LED. Če ga niste videli, preverite tukaj: KOMUNIKACIJA MED ARDUINOM & PYTHONOM!

In kako lahko zaznate barvo predmeta in mu sledite na zaslonu, preverite tukaj: BOLJNO DETEKCIJO Z UPORABO OPENCV IN PITONA.

V tem navodilu vam bom pokazal, kako slediti obrazom z uporabo Arduino & Python in kamero slediti obrazu. Morda se sliši težko, ampak verjemite mi, da ni, vse kar potrebujete je osnovno znanje o Arduinu in Pythonu.

Pa začnimo…

1. korak: Stvari, ki jih boste potrebovali:

Stvari, ki jih boste potrebovali
Stvari, ki jih boste potrebovali
Stvari, ki jih boste potrebovali
Stvari, ki jih boste potrebovali
Stvari, ki jih boste potrebovali
Stvari, ki jih boste potrebovali

Zahteve so minimalne. Tukaj sem predložil seznam delov vsega, kar potrebujete:

Strojna zahteva:

  • Arduino UNO (Amazon ZDA / Amazon EU)
  • Spletna kamera (Amazon ZDA / Amazon EU)
  • Servos x 2 (Amazon ZDA / Amazon EU)
  • Ogledna plošča (Amazon ZDA / Amazon EU)
  • Servo Pan Tilt Kit (Amazon ZDA / Amazon EU)

Zahteve glede programske opreme:

  1. Python 2.7 (Moral bi biti nameščen, običajno ima OS Linux vnaprej nameščen)
  2. OpenCV (Lahko ga prenesete ločeno ali namestite s 'pip install' Razloženo naprej)
  3. pyserial (lahko ga namestite s pipom)
  4. numpy.
  5. Haarcascade.

Ko se vse zbere, lahko preidemo na korak namestitve …

2. korak: Nastavitev okolja Python:

Nastavitev okolja Python
Nastavitev okolja Python
Nastavitev okolja Python
Nastavitev okolja Python
Nastavitev okolja Python
Nastavitev okolja Python

Namestitev Pythona:

Zato najprej potrebujemo in zaženite Python 2.7. Če želite to narediti, najprej prenesite in namestite python 2.7.14. Če želite preveriti, ali je pravilno nameščen, pojdite na: Iskanje sistema Windows >> Vnesite "IDLE" >> Pritisnite Enter. Pojaviti bi se morala lupina Python.

ALI

Pri iskanju vnesite 'CMD' in pritisnite enter, da odprete ukazni poziv. V vrsti CMD >> python in pritisnite enter, bi se moral prikazati vmesnik Python.

Če vidite napako v CMD, brez panike, verjetno morate nastaviti spremenljivko okolja. Če želite nastaviti spremenljivko okolja, lahko sledite tej vadnici.

Namestitev "pyserial", "OpenCV" in "numpy" v python:

Za namestitev teh modulov bomo uporabili pip install, Najprej odprite CMD in vnesite naslednje kode:-

pip install serijski

pip install opencv-python> pip install numpy

ti ukazi bodo namestili potrebne module. Zdaj lahko preidemo na kodirni del …

3. korak: Python Script:

Python skript
Python skript

Preden začnete pisati kodo, najprej naredite novo mapo, saj je treba vso mapo shraniti v isto mapo. Zato ustvarite novo mapo, poimenujte jo karkoli želite. in od spodaj prenesite 'Haarcascade' in jo prilepite v mapo.

Zdaj odprite beležnico in napišite spodnji skript, shranite ga kot 'face.py' v isto mapo kot haarcascade. (Lahko prenesete kodo, ki sem jo posredoval spodaj):

#uvozite vse potrebne module

import numpy as np import serijski čas uvoza import sys import cv2 #Setup Komunikacijska pot za arduino (Namesto 'COM5' postavite vrata, na katera je povezan vaš arduino) arduino = serial. Serial ('COM5', 9600) time.sleep (2) print ("Povezano z arduinom …") #uvoz Haarcascade za zaznavanje obrazov face_cascade = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') #Za zajem videotoka iz spletne kamere. cap = cv2. VideoCapture (0) #Preberite posneto sliko, jo pretvorite v sivo sliko in poiščite obraze, medtem ko 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) grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) obrazov = face_cascade.detectMultiScale (sivo, 1.3) # zaznati obraz in okoli njega narediti pravokotnik. za (x, y, w, h) v obrazih: cv2.rectangle (img, (x, y), (x+w, y+h), (0, 255, 0), 5) roi_gray = siva [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)) print (' Y: '+str (y)) print (' x+w: '+str (x+w)) print (' y+h: '+str (y+h)) # Center roi (Pravokotnik) xx = int (x+(x+h))/2 yy = int (y+(y+w))/2 tisk (xx) tisk (yy) center = (xx, yy) # pošiljanje podatkov v arduino print ("Center pravokotnika je:", center) data = "X {0: d} Y {1: d} Z".format (xx, yy) print ("output = '" +data + "'") arduino.write (data) #Prikaži tok. cv2.imshow ('img', img) #Hit 'Esc' za prekinitev izvajanja k = cv2.waitKey (30) & 0xff če je k == 27: break

Ko to storite, nadaljujte s pisanjem kode za arduino …

4. korak: Koda Arduino:

Koda Arduino
Koda Arduino

Ko je skript python pripravljen, potrebujemo arduino skico za nadzor servo. Glejte spodnjo kodo, jo prilepite v Arduino IDE in jo shranite kot 'servo.ino' v isto mapo kot face.py in haarcascade. naložite kodo in pojdite na naslednji korak, da vzpostavite povezavo.

(Spodaj naložena datoteka)

#vključi

Servo servoVer; // Navpični servo servo servoHor; // Vodoravni servo int x; int y; int prevX; int prevY; void setup () {Serial.begin (9600); servoVer.attach (5); // Pritrdite navpični servo na pin 5 servoHor.attach (6); // Pritrdite vodoravni servo na pin 6 servoVer.write (90); servoHor.write (90); } void Pos () {if (prevX! = x || prevY! = y) {int servoX = map (x, 600, 0, 70, 179); int servoY = zemljevid (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. korak: Mehanizem nagiba:-

Mehanizem nagiba
Mehanizem nagiba
Mehanizem nagiba
Mehanizem nagiba

Za Pan-Tilt sem uporabil že na voljo komplet. Če želite, ga lahko naredite sami z uporabo lesa/plastike ali celo s 3D tiskanjem.

Ta, ki sem ga uporabil, je precej poceni in ga je zelo enostavno sestaviti. Če pa želite navodila, kako to storiti, jih lahko najdete tukaj.

6. korak: Vzpostavitev povezav:

Vzpostavljanje povezav
Vzpostavljanje povezav
Vzpostavljanje povezav
Vzpostavljanje povezav

Vezje je precej preprosto. Na arduino samo priključite dva servomotorja.

  1. Navpično na pin 5
  2. Vodoravno na pin 6
  3. Napajanje do +5V
  4. Ozemljitev do GND

Za referenco preverite diagram vezja.

7. korak: TESTIRANJE:

  • Ko je vse narejeno, morate najprej preveriti, ali deluje. Najprej preverite, ali so servomotorji pravilno povezani z arduinom in je naložena skica.
  • Ko naložite skico, zaprite IDE, da se vrata lahko prosto povežejo s pythonom.
  • Zdaj odprite 'face.py' s Python IDLE in pritisnite 'F5', da zaženete kodo. Za povezavo z arduinom bo trajalo nekaj sekund, nato pa boste lahko videli okno, ki pretaka spletno kamero. Zdaj bo koda zaznala vaš obraz, servomotorji pa ji bodo sledili.
  • Servo se mora premikati, ko premikate predmet. Zdaj samo pritrdite kamero na servomotorje, da se bo premikala skupaj s servomotorji.

Hvala vam.

Priporočena: