Sommario:

FACE TRACKING CON ARDUINO !!!: 7 passaggi
FACE TRACKING CON ARDUINO !!!: 7 passaggi

Video: FACE TRACKING CON ARDUINO !!!: 7 passaggi

Video: FACE TRACKING CON ARDUINO !!!: 7 passaggi
Video: [DEMO] Headshot Tracking || OpenCV | Arduino 2024, Novembre
Anonim
FACE TRACKING CON ARDUINO !!!
FACE TRACKING CON ARDUINO !!!

In una precedente istruzione ho condiviso come puoi comunicare tra Arduino e Python usando il modulo "pyserial" e controllare un LED. Se non l'hai visto dai un'occhiata qui: COMUNICAZIONE TRA ARDUINO & PYTHON !

E come puoi rilevare il colore di un oggetto e seguirlo sullo schermo, controlla qui: RILEVAZIONE DEL COLORE UTILIZZANDO OPENCV E PYTHON.

In questo Instructable ti mostrerò come tracciare i volti usando Arduino e Python e fare in modo che la fotocamera segua il viso. Può sembrare difficile ma fidati di me non lo è, tutto ciò di cui hai bisogno è una conoscenza di base di Arduino e Python.

Quindi iniziamo…

Passaggio 1: cose di cui avrai bisogno:

Cose di cui avrai bisogno
Cose di cui avrai bisogno
Cose di cui avrai bisogno
Cose di cui avrai bisogno
Cose di cui avrai bisogno
Cose di cui avrai bisogno

I requisiti sono minimi. Qui ho fornito un elenco parziale di tutto ciò di cui hai bisogno:

Requisiti hardware:

  • Arduino UNO (Amazon USA / Amazon UE)
  • Web cam (Amazon USA / Amazon UE)
  • Servi x 2 (Amazon USA / Amazon UE)
  • Breadboard (Amazon USA / Amazon UE)
  • Kit Servo Pan Tilt (Amazon USA / Amazon UE)

Requisiti software:

  1. Python 2.7 (dovrebbe essere installato, il sistema operativo Linux di solito lo ha preinstallato)
  2. OpenCV (puoi scaricarlo separatamente o installarlo usando "pip install" spiegato ulteriormente)
  3. pyserial (può essere installato con pip)
  4. insensibile.
  5. Haarcascade.

Dopo che tutto è stato raccolto, possiamo passare alla fase di installazione…

Passaggio 2: configurazione dell'ambiente Python:

Configurazione dell'ambiente Python
Configurazione dell'ambiente Python
Configurazione dell'ambiente Python
Configurazione dell'ambiente Python
Configurazione dell'ambiente Python
Configurazione dell'ambiente Python

Installazione di Python:

Quindi prima abbiamo bisogno di Python 2.7 attivo e funzionante. Per fare ciò, prima scarica e installa python 2.7.14. Per verificare se è installato correttamente Vai a: Ricerca di Windows >> Digita "IDLE" >> Premi Invio. Dovrebbe apparire una shell Python.

O

Nella ricerca digita "CMD" e premi invio per aprire il prompt dei comandi. In CMD digita >> python e premi invio, l'interfaccia Python dovrebbe visualizzare.

Se vedi un errore in CMD, non farti prendere dal panico, probabilmente devi impostare la variabile di ambiente. Puoi seguire questo tutorial qui per impostare la variabile d'ambiente.

Installazione di "pyserial", "OpenCV" e "numpy" in python:

Per installare questi moduli useremo use pip install, Per prima cosa apri CMD e digita i seguenti codici: -

pip install serial

pip install opencv-python > pip install numpy

questi comandi installeranno i moduli necessari. Ora possiamo passare alla parte di codifica…

Passaggio 3: script Python:

Script Python
Script Python

Prima di iniziare a scrivere il codice, la prima cosa da fare è creare una nuova cartella poiché tutto il codice deve essere archiviato nella stessa cartella. Quindi crea una nuova cartella, chiamala come vuoi. e scarica 'Haarcascade' dal basso e incollalo nella cartella.

Ora apri il blocco note e scrivi lo script indicato di seguito, salvalo come "face.py" nella stessa cartella di haarcascade. (Puoi scaricare il codice che ho fornito nel file qui sotto):

#importa tutti i moduli richiesti

import numpy as np import serial import time import sys import cv2 #Setup Percorso di comunicazione per arduino (al posto di 'COM5' inserisci la porta a cui è connesso il tuo arduino) arduino = serial. Serial('COM5', 9600) time.sleep (2) print("Connesso ad arduino…") #importazione di Haarcascade per il rilevamento dei volti face_cascade = cv2. CascadeClassifier('haarcascade_frontalface_default.xml') #Per acquisire il flusso video dalla webcam. cap = cv2. VideoCapture(0) #Leggi l'immagine acquisita, convertila in immagine grigia e trova i volti 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) grigio = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) facce = face_cascade.detectMultiScale(grigio, 1.3) # rilevare il viso e creare un rettangolo attorno ad esso. per (x, y, w, h) nelle facce: cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 5) roi_gray = gray[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)) # Centro di roi (Rettangolo) xx = int(x+(x+h))/2 yy = int(y+(y+w))/2 print (xx) print (yy) center = (xx, yy) # invia i dati ad arduino print("Center of Rectangle is:", center) data = "X{0:d}Y{1:d}Z".format(xx, yy) print ("output = '" +data+ "'") arduino.write(data) #Visualizza il flusso. cv2.imshow('img', img) #Premi 'Esc' per terminare l'esecuzione k = cv2.waitKey(30) & 0xff if k == 27: break

Fatto ciò, passa alla scrittura del codice per arduino…

Passaggio 4: codice Arduino:

Codice Arduino
Codice Arduino

Dopo che lo script Python è pronto, abbiamo bisogno di Arduino Sketch per controllare il servo. Fare riferimento al codice di seguito, incollarlo nell'IDE di Arduino e salvarlo come "servo.ino" nella stessa cartella di face.py e haarcascade. caricare il codice e passare al passaggio successivo per effettuare le connessioni.

(File scaricabile indicato di seguito)

#includere

Servo servoVer; //Servo verticale Servo servoHor; //Servo orizzontale int x; int y; int prevX; int prevY; void setup() { Serial.begin(9600); servoVer.attach(5); //Collega il servo verticale al pin 5 servoHor.attach(6); //Collega il servo orizzontale 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 = map(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(); Posizione(); } } while(Serial.available() > 0) { Serial.read(); } } }

Passaggio 5: meccanismo pan-tilt:-

Meccanismo pan-tilt
Meccanismo pan-tilt
Meccanismo pan-tilt
Meccanismo pan-tilt

Ho usato un kit prontamente disponibile per il Pan-Tilt. Se vuoi puoi crearne uno tu stesso usando il legno / plastica o anche la stampa 3D.

Quello che ho usato è abbastanza economico e molto facile da montare. Tuttavia, se desideri istruzioni su come farlo, puoi trovarle qui.

Passaggio 6: creazione di collegamenti:

Fare collegamenti
Fare collegamenti
Fare collegamenti
Fare collegamenti

Il circuito è piuttosto semplice. Basta collegare due servi ad arduino.

  1. Verticale al Pin 5
  2. Orizzontale al Pin 6
  3. Alimentazione a +5V
  4. Terra a GND

Controllare lo schema del circuito per riferimento.

Passaggio 7: TEST:

  • Dopo che tutto è stato fatto, l'ultima cosa da fare è testare se funziona. Per testare prima assicurati che i servi siano collegati correttamente ad arduino e che lo sketch sia caricato.
  • Dopo aver caricato lo schizzo, assicurati di chiudere l'IDE in modo che la porta sia libera di connettersi a Python.
  • Ora apri "face.py" con Python IDLE e premi "F5" per eseguire il codice. Ci vorranno alcuni secondi per connettersi ad arduino e quindi dovresti essere in grado di vedere una finestra in streaming della web cam. Ora il codice rileverà il tuo viso e i servi lo seguiranno.
  • Il Servo dovrebbe muoversi mentre muovi l'oggetto. Ora basta collegare la fotocamera ai servi in modo che si muova insieme ai servi.

Grazie.

Consigliato: