I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione. Per saperne di più.

Il tracciamento delle mani è il processo di utilizzo della visione artificiale per rilevare e seguire i movimenti della mano di una persona in tempo reale. L'applicazione più dominante del tracciamento delle mani è nelle cuffie per realtà virtuale. Le cuffie ti consentono di utilizzare le mani come input al posto dei controller touch. Questo a sua volta rende l'esperienza più coinvolgente.

Scopri come tenere traccia delle mani di una persona utilizzando Python, OpenCV per la visione artificiale e MediaPipe.

Google ha sviluppato il framework MediaPipe, che contiene molte soluzioni di apprendimento automatico. Una delle soluzioni è la soluzione di tracciamento di mani e dita chiamata Mani di MediaPipe. Per tenere traccia delle mani, MediaPipe Hands esegue due processi: rilevamento del palmo e rilevamento dei punti di riferimento.

instagram viewer

Rilevamento del palmo della mano

MediaPipe inizia identificando dove si trovano i palmi nell'immagine di input. Poiché la stima dei riquadri di delimitazione per oggetti rigidi è più semplice dell'identificazione delle mani con le dita articolate.

Rilevamento dei punti di riferimento della mano

Dopo il rilevamento del palmo, MediaPipe esegue il rilevamento dei punti di riferimento della mano. Il modello del punto di riferimento della mano può prevedere 21 coordinate precise della posizione di ciascun punto di riferimento della mano.

I numeri rappresentano un identificatore univoco per ogni punto di riferimento.

Configurazione dell'ambiente

Per seguire questo progetto, dovresti avere familiarità con il file basi di Python. Installa le seguenti librerie nel tuo ambiente:

  • OpenCV: utilizzerai questa libreria per la visione artificiale e per eseguire tecniche di elaborazione delle immagini sull'immagine di input.
  • MediaPipe: utilizzerai questa libreria per eseguire il rilevamento e il tracciamento delle mani sull'immagine di input.
  • imutils: utilizzerai questa libreria per ridimensionare il fotogramma video dell'input.

Esegui il seguente comando sul tuo terminale per installare le librerie OpenCV, MediaPipe e imutils. Installa pip: il gestore di pacchetti Python-se hai bisogno di. Assicurati di passare le librerie come un elenco delimitato da spazi.

pip installa OpenCV-Python MediaPipe imutils

Al termine dell'aggiornamento, l'ambiente è pronto per iniziare a scrivere codice.

Il codice sorgente completo per questo progetto è disponibile nel suo Deposito GitHub.

Importazione delle librerie richieste

Dovrai importare le librerie che hai installato in modo da poterle utilizzare. Apri qualsiasi IDE di Python, crea un file Python e aggiungi le seguenti importazioni:

importare cv2
importare mediapipe COME mp
importare imutils

Assicurati di importare OpenCV come cv2 e MediaPipe in minuscolo. In caso contrario, verrà generato un errore.

Utilizzerai mpHands per chiamare la soluzione mani di MediaPipe e l'oggetto mani per rilevare e tracciare l'input della mano. Utilizzerai l'oggetto mpDraw per disegnare le connessioni tra i punti di riferimento delle mani identificate.

mpHands = mp.solutions.hands
mani = mpMani. Mani()
mpDraw = mp.solutions.drawing_utils

È possibile ottimizzare il modello delle mani di MediaPipe passando vari parametri al costruttore Hands(). I valori predefiniti sono abbastanza buoni per questo progetto, ma puoi sperimentarli per vedere come influenzano il modello:

Dovresti lasciare il static_image_mode come False per assicurarsi che il modello rilevi le lancette una volta prima di iniziare a seguirle. Ripete il processo di tracciamento solo se l'attendibilità del rilevamento scende al di sotto del parametro dichiarato, rendendo più veloce l'elaborazione complessiva dell'input.

Esecuzione del tracciamento delle mani

Sono necessarie tre funzioni per eseguire il tracciamento della mano: una per elaborare l'input, una per tracciare le connessioni del punto di riferimento della mano e una funzione principale per controllare il flusso del programma.

Funzione di elaborazione dell'input

Questa funzione prende l'input, lo converte in scala di grigi e lo passa al modello di mani MediaPipe per rilevare e tracciare le mani nell'input.

# Elaborazione dell'immagine in ingresso
defprocess_image(immagine):
# Conversione dell'input in scala di grigi
gray_image = cv2.cvtColor (img, cv2.COLOR_BGR2RGB)
risultati = mani.processo (gray_image)

# Restituzione delle mani rilevate alla funzione di chiamata
ritorno risultati

La funzione restituisce i risultati sulla presenza o meno di mani rilevate sull'input.

La funzione di disegno delle connessioni dei punti di riferimento della mano

Questa funzione controlla se la funzione di elaborazione dell'input ha rilevato delle mani. Se vengono rilevate delle mani, passa su ogni punto di riferimento e disegna un cerchio attorno ad esso, tenendo traccia del punto di riferimento utilizzando La funzione di enumerazione di Python. Quindi disegna le connessioni tra i punti di riferimento sull'input video originale.

# Disegnare connessioni di punti di riferimento
defdraw_hand_connections(img, risultati):
Se results.multi_hand_landmarks:
per manoLms In results.multi_hand_landmarks:
per id, lm In enumerare (handLms.landmark):
h, w, c = img.forma

# Trovare le coordinate di ogni punto di riferimento
cx, cy = int (lm.x * w), int (lm.y * h)

# Stampa di ogni ID punto di riferimento e coordinate
# sul terminale
stampa (id, cx, cy)

# Creazione di un cerchio attorno a ciascun punto di riferimento
cv2.circle (img, (cx, cy), 10, (0, 255, 0),
cv2.RIEMPITO)
# Disegnare le connessioni dei punti di riferimento
mpDraw.draw_landmarks (img, handLms,
mpHands. CONNESSIONI_MANUALI)

ritorno imm

La funzione inizia cerchiando ogni punto di riferimento:

Quindi disegna le connessioni manuali:

Alla fine restituisce il suo output alla funzione chiamante.

La funzione principale

Crea una funzione principale che controllerà il flusso del tuo programma. Prenderà l'input e ridimensionerà il fotogramma video per garantire la coerenza dell'output. Passa l'input alla funzione di elaborazione che rileverà e seguirà le lancette. Porta i risultati restituiti alla funzione di disegno della connessione dei punti di riferimento della mano che disegnerà la connessione sull'input video originale. Alla fine mostrerà l'output all'utente.

defprincipale():
# Sostituisci 0 con il percorso video da utilizzare a
# video preregistrato
cap = cv2.VideoCapture(0)

MentreVERO:
# Prendere l'input
successo, immagine = cap.read()
immagine = imutils.resize (immagine, larghezza=500, altezza=500)
risultati = process_image (immagine)
draw_hand_connections (immagine, risultati)

# Visualizzazione dell'output
cv2.imshow("Tracciatore di mani", Immagine)

# Il programma termina quando viene premuto il tasto q
Se cv2.waitKey(1) == ord('Q'):
cap.rilascio()
cv2.destroyAllWindows()

L'ultimo passaggio è l'esecuzione del programma. Il codice seguente garantisce che quando si esegue il programma, la funzione main venga eseguita per prima.

Se __nome__ == "__principale__":
principale()

Quando il programma viene eseguito, produce un output come questo:

Il programma tiene traccia delle lancette in tempo reale.

Tracciamento delle mani per la realtà virtuale immersiva

Il tracciamento delle mani nella realtà virtuale rende la tecnologia più allettante. Le cuffie per realtà virtuale hanno iniziato a introdurre il tracciamento delle mani, portando un senso di realtà accresciuta nel mondo virtuale. Le cuffie consentono all'utente di inserire comandi utilizzando una mano virtuale.

Il tracciamento delle mani nelle cuffie virtuali è solo un'applicazione di questa tecnologia. Puoi incorporare il tracciamento delle mani in qualsiasi area applicabile di tuo gradimento.