Sommario:
- Passaggio 1: cose di cui avrai bisogno:
- Passaggio 2: configurazione dell'ambiente Python:
- Passaggio 3: script Python:
- Passaggio 4: codice Arduino:
- Passaggio 5: meccanismo pan-tilt:-
- Passaggio 6: creazione di collegamenti:
- Passaggio 7: TEST:
Video: FACE TRACKING CON ARDUINO !!!: 7 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:00
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:
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:
- Python 2.7 (dovrebbe essere installato, il sistema operativo Linux di solito lo ha preinstallato)
- OpenCV (puoi scaricarlo separatamente o installarlo usando "pip install" spiegato ulteriormente)
- pyserial (può essere installato con pip)
- insensibile.
- Haarcascade.
Dopo che tutto è stato raccolto, possiamo passare alla fase di installazione…
Passaggio 2: 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:
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:
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:-
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:
Il circuito è piuttosto semplice. Basta collegare due servi ad arduino.
- Verticale al Pin 5
- Orizzontale al Pin 6
- Alimentazione a +5V
- 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:
Cornice per foto OSD Face Aware: 11 passaggi (con immagini)
Cornice per foto OSD con riconoscimento del viso: questo Instructables mostra come creare una cornice per foto con l'OSD (On Screen Display) con riconoscimento del viso. L'OSD può mostrare l'ora, il tempo o altre informazioni Internet desiderate
Time Cube - Arduino Time Tracking Gadget: 6 passaggi
Time Cube - Arduino Time Tracking Gadget: vorrei proporti un progetto arduino semplice ma davvero utile per tenere traccia degli eventi temporali lanciando alcuni gadget smart cube. Capovolgilo su "Lavoro" > "Impara" > "Lavori" > "Riposo" lato e conterà il
Controllo dell'array di matrici LED con Arduino Uno (Arduino Powered Robot Face): 4 passaggi (con immagini)
Controllo dell'array di matrici LED con Arduino Uno (Arduino Powered Robot Face): questa istruzione mostra come controllare un array di matrici LED 8x8 utilizzando un Arduino Uno. Questa guida può essere utilizzata per creare un display semplice (e relativamente economico) per i tuoi progetti. In questo modo potresti visualizzare lettere, numeri o animazioni personalizzate
Tfcd 3D Motion Tracking tramite rilevamento capacitivo e uscita LED: 6 passaggi (con immagini)
Tfcd 3D Motion Tracking attraverso il rilevamento capacitivo e l'uscita LED: In questa istruzione viene spiegato come il movimento di una mano può essere tracciato in uno spazio 3D utilizzando il principio del rilevamento capacitivo. Modificando la distanza tra un foglio di alluminio carico e la tua mano, la capacità del condensatore varierà
Texas Big Face - Proiezione del viso 3D Come: 10 Passaggi (con Immagini)
Texas Big Face - Proiezione facciale 3D Come: creare "statue viventi" proiettando il tuo viso sulle sculture.A How To By: David Sutherland, Kirk Moreno in collaborazione con Graffiti Research Lab Houston* Diversi commenti hanno affermato che ci sono alcuni problemi audio. È