Taula de continguts:

SEGUIMENT CARA AMB ARDUINO !!!: 7 passos
SEGUIMENT CARA AMB ARDUINO !!!: 7 passos

Vídeo: SEGUIMENT CARA AMB ARDUINO !!!: 7 passos

Vídeo: SEGUIMENT CARA AMB ARDUINO !!!: 7 passos
Vídeo: Утилизация светодиодных экранов DVD-плееров — несвязанные действия 2024, Juliol
Anonim
SEGUIMENT CARA AMB ARDUINO !!!
SEGUIMENT CARA AMB ARDUINO !!!

En un instructable anterior vaig compartir com es pot comunicar entre Arduino i Python mitjançant el mòdul 'pyserial' i controlar un LED. Si no ho heu vist, consulteu-lo aquí: COMUNICACIÓ ENTRE ARDUINO & PYTHON.

I com podeu detectar el color d’un objecte i fer-ne un seguiment a la pantalla, comproveu-ho aquí: DETECCIÓ DEL COLOR FENT OPENCV I PITÓ.

En aquest instructiu us mostraré com fer un seguiment de cares amb Arduino i Python i fer que la càmera segueixi la cara. Pot semblar difícil, però confieu en mi que no ho és, tot el que necessiteu és coneixement bàsic d’Arduino i Python.

Comencem doncs …

Pas 1: coses que necessitareu:

Coses que necessitareu
Coses que necessitareu
Coses que necessitareu
Coses que necessitareu
Coses que necessitareu
Coses que necessitareu

Els requisits són mínims. Aquí he proporcionat una llista de parts de tot el que necessiteu:

Requisit de maquinari:

  • Arduino UNO (Amazon EUA / Amazon UE)
  • Càmera web (Amazon EUA / Amazon UE)
  • Servos x 2 (Amazon EUA / Amazon UE)
  • Taula de pa (Amazon EU / Amazon EU)
  • Kit d'inclinació del Servo Pan (Amazon EUA / Amazon UE)

Requisit de programari:

  1. Python 2.7 (s'hauria d'instal·lar, el sistema operatiu Linux sol tenir-lo preinstal·lat)
  2. OpenCV (Podeu descarregar-lo per separat o instal·lar-lo utilitzant 'pip install').
  3. pyserial (Es pot instal·lar amb pip)
  4. numpy.
  5. Haarcascade.

Després de recollir totes les coses, podem passar al pas d'instal·lació …

Pas 2: Configuració de l'entorn Python:

Configuració de l'entorn Python
Configuració de l'entorn Python
Configuració de l'entorn Python
Configuració de l'entorn Python
Configuració de l'entorn Python
Configuració de l'entorn Python

Instal·lació de Python:

Per tant, primer necessitem Python 2.7 en funcionament. Per fer-ho, primer descarregueu i instal·leu python 2.7.14. Per comprovar si està instal·lat correctament Aneu a: Cerca de Windows >> Escriviu "IDLE" >> Premeu Retorn. Ha d’aparèixer una petxina Python.

O

A la cerca, escriviu "CMD" i premeu Retorn per obrir el símbol del sistema. A CMD escriviu >> python i premeu Enter, s'hauria de mostrar la interfície de Python.

Si veieu un error a CMD, no us espanteu, probablement haureu d'establir la variable d'entorn. Podeu seguir aquest tutorial aquí per configurar la variable d'entorn.

Instal·lació de 'pyserial', 'OpenCV "i" numpy "a Python:

Per instal·lar aquests mòduls utilitzarem pip install, Primer obriu CMD i escriviu els codis següents: -

sèrie d'instal·lació de pip

pip install opencv-python> pip install numpy

aquestes ordres instal·laran els mòduls necessaris. Ara podem passar a la part de codificació …

Pas 3: Python Script:

Script Python
Script Python

Abans de començar a escriure codi, el primer que cal fer és crear una nova carpeta, ja que tot el codi s’ha d’emmagatzemar a la mateixa carpeta. Per tant, creeu una carpeta nova, anomeneu-la com vulgueu. i descarregueu "Haarcascade" des de baix i enganxeu-lo a la carpeta.

Ara obriu el bloc de notes i escriviu l'script que es mostra a continuació, deseu-lo com a 'face.py' a la mateixa carpeta que haarcascade. (Podeu descarregar el codi que he proporcionat el fitxer següent):

#importar tots els mòduls necessaris

import numpy as np import serial importation time import sys import cv2 #Setup Camí de comunicació per a arduino (en lloc de 'COM5', poseu el port al qual està connectat el vostre arduino) arduino = serial. Serial ('COM5', 9600) time.sleep (2) print ("Connectat a arduino …") #importing Haarcascade per a la detecció de cares face_cascade = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') #Per capturar el flux de vídeo des de la càmera web. cap = cv2. VideoCapture (0) #Llegeix la imatge capturada, converteix-la en imatge gris i cerca cares mentre 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) gris = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (gris, 1.3) # detectar la cara i fer un rectangle al seu voltant. per a (x, y, w, h) a les cares: cv2.rectangle (img, (x, y), (x + w, y + h), (0, 255, 0), 5) roi_gray = gris [y: y + h, x: x + w] roi_color = img [y: y + h, x: x + w] arr = {y: y + h, x: x + w} imprimir (arr) imprimir ('X: '+ str (x)) print (' Y: '+ str (y)) print (' x + w: '+ str (x + w)) print (' y + h: '+ str (y + h)) # Centre de roi (Rectangle) xx = int (x + (x + h)) / 2 yy = int (y + (y + w)) / 2 print (xx) print (yy) center = (xx, yy) # enviament de dades a arduino print ("Centre de rectangle és:", centre) data = "X {0: d} Y {1: d} Z".format (xx, yy) print ("output = '" + data + "'") arduino.write (data) #Display the stream. cv2.imshow ('img', img) #Hit 'Esc' per finalitzar l'execució k = cv2.waitKey (30) & 0xff si k == 27: interrupció

Un cop fet això, passeu a escriure el codi per a arduino …

Pas 4: Codi Arduino:

Codi Arduino
Codi Arduino

Després que el script Python estigui llest, necessitem un esbós arduino per controlar el servo. Consulteu el codi següent, enganxeu-lo a Arduino IDE i deseu-lo com a "servo.ino" a la mateixa carpeta que face.py i haarcascade. pengeu el codi i passeu al següent pas per establir les connexions.

(Arxiu descarregable que es mostra a continuació)

#incloure

Servo servoVer; // Servo vertical Servo servoHor; // Servo horitzontal int x; int y; int prevX; int prevY; configuració nul·la () {Serial.begin (9600); servoVer.attach (5); // Connecteu el servo vertical al pin 5 servoHor.attach (6); // Connecteu el servo horitzontal al 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 = mapa (y, 450, 0, 179, 95); servoX = min (servoX, 179); servoX = màx (servoX, 70); servoY = min (servoY, 179); servoY = màx (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 (); }}}

Pas 5: Mecanisme d’inclinació panoràmica: -

Mecanisme Pan-Tilt
Mecanisme Pan-Tilt
Mecanisme Pan-Tilt
Mecanisme Pan-Tilt

He utilitzat un kit fàcilment disponible per al Pan-Tilt. Si ho desitgeu, podeu fer-ne un amb fusta / plàstic o fins i tot imprimir-ne un de 3D.

El que he utilitzat és bastant barat i molt fàcil de muntar. Tot i això, si voleu instruccions sobre com fer-ho, podeu trobar-les aquí.

Pas 6: establir connexions:

Creació de connexions
Creació de connexions
Creació de connexions
Creació de connexions

El Circuit és bastant senzill. Simplement connecteu dos servos a arduino.

  1. Vertical al pin 5
  2. Horitzontal al pin 6
  3. Potència a + 5V
  4. De terra a GND

Consulteu el diagrama del circuit per obtenir-ne referència.

Pas 7: PROVES:

  • Després de fer-ho tot, l'últim que cal fer és provar si funciona. Per provar primer, assegureu-vos que els servos estan correctament connectats a arduino i que es carrega l'esbós.
  • Després de carregar l'esbós, assegureu-vos de tancar l'IDE per tal que el port es pugui connectar lliurement a Python.
  • Ara obriu 'face.py' amb Python IDLE i premeu 'F5' per executar el codi. La connexió a arduino trigarà uns segons i hauríeu de poder veure una finestra que transmet la càmera web. Ara el codi detectarà la vostra cara i els servos en faran un seguiment.
  • El Servo s’ha de moure a mesura que moveu l’objecte. Ara només cal que connecteu la càmera als servos perquè es mogui amb els servos.

Gràcies.

Recomanat: