L'attività Riconoscimento gesti di MediaPipe ti consente di riconoscere i gesti delle mani in tempo reale e fornisce i risultati riconosciuti relativi ai gesti delle mani e i punti di riferimento dell'oggetto rilevato mani. Queste istruzioni mostrano come utilizzare il riconoscimento gesti con le applicazioni Python.
Puoi vedere questa attività in azione visualizzando la demo Per ulteriori informazioni su funzionalità, modelli e opzioni di configurazione questa attività, consulta la Panoramica.
Esempio di codice
Il codice di esempio del riconoscimento gesti fornisce un'implementazione completa un'attività in Python come riferimento. Questo codice ti consente di testare l'attività e ottenere ha iniziato a creare il tuo riconoscimento dei gesti della mano. Puoi visualizzare, eseguire Modifica l'esempio del Riconoscimento gesti codice usando solo il browser web.
Se implementi il riconoscimento gesti per Raspberry Pi, consulta le Esempio di Raspberry Pi Google Cloud.
Configurazione
Questa sezione descrive i passaggi chiave per configurare l'ambiente di sviluppo e che usano in modo specifico il riconoscimento dei gesti. Per informazioni generali su configurare l'ambiente di sviluppo per l'utilizzo delle attività di MediaPipe, tra cui: i requisiti di versione della piattaforma, consulta la Guida alla configurazione per Python.
Pacchetti
L'attività Riconoscimento gesti di MediaPipe richiede il pacchetto PyPI mediapipe. Puoi installare ed eseguire importa queste dipendenze con quanto segue:
$ python -m pip install mediapipe
Importazioni
Importa i seguenti corsi per accedere alle funzioni dell'attività Riconoscimento gesti:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Modello
L'attività Riconoscimento gesti di MediaPipe richiede un bundle di modelli addestrato compatibili con questa attività. Per ulteriori informazioni sui modelli addestrati disponibili per il riconoscimento gesti, consulta la sezione Modelli della panoramica delle attività.
Seleziona e scarica il modello, quindi archivialo in una directory locale:
model_path = '/absolute/path/to/gesture_recognizer.task'
Specifica il percorso del modello all'interno del parametro Model Name, come mostrato di seguito:
base_options = BaseOptions(model_asset_path=model_path)
Crea l'attività
L'attività Riconoscimento gesti di MediaPipe utilizza la funzione create_from_options
per configurare
dell'attività. La funzione create_from_options
accetta valori per la configurazione
e le opzioni da gestire. Per ulteriori informazioni sulle opzioni di configurazione, consulta
Opzioni di configurazione.
Il codice seguente illustra come creare e configurare questa attività.
Questi esempi mostrano anche le varianti della costruzione dell'attività per le immagini, file video e stream video in diretta.
Immagine
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions GestureRecognizer = mp.tasks.vision.GestureRecognizer GestureRecognizerOptions = mp.tasks.vision.GestureRecognizerOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a gesture recognizer instance with the image mode: options = GestureRecognizerOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.IMAGE) with GestureRecognizer.create_from_options(options) as recognizer: # The detector is initialized. Use it here. # ...
Video
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions GestureRecognizer = mp.tasks.vision.GestureRecognizer GestureRecognizerOptions = mp.tasks.vision.GestureRecognizerOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a gesture recognizer instance with the video mode: options = GestureRecognizerOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO) with GestureRecognizer.create_from_options(options) as recognizer: # The detector is initialized. Use it here. # ...
Live streaming
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions GestureRecognizer = mp.tasks.vision.GestureRecognizer GestureRecognizerOptions = mp.tasks.vision.GestureRecognizerOptions GestureRecognizerResult = mp.tasks.vision.GestureRecognizerResult VisionRunningMode = mp.tasks.vision.RunningMode # Create a gesture recognizer instance with the live stream mode: def print_result(result: GestureRecognizerResult, output_image: mp.Image, timestamp_ms: int): print('gesture recognition result: {}'.format(result)) options = GestureRecognizerOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.LIVE_STREAM, result_callback=print_result) with GestureRecognizer.create_from_options(options) as recognizer: # The detector is initialized. Use it here. # ...
Opzioni di configurazione
Questa attività include le seguenti opzioni di configurazione per le applicazioni Python:
Nome opzione | Descrizione | Intervallo di valori | Valore predefinito | |
---|---|---|---|---|
running_mode |
Imposta la modalità di esecuzione per l'attività. Esistono tre tipi di
modalità: IMAGE: la modalità per gli input di immagini singole. VIDEO: la modalità per i fotogrammi decodificati di un video. LIVE_STREAM: la modalità per un live streaming di input dati, ad esempio quelli di una videocamera. In questa modalità, resultListener deve essere per impostare un listener in modo che riceva risultati in modo asincrono. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
|
num_hands |
Il numero massimo di mani che può essere rilevato
GestureRecognizer .
|
Any integer > 0 |
1 |
|
min_hand_detection_confidence |
Il punteggio di confidenza minimo per il rilevamento della mano considerata efficace nel modello di rilevamento della palma. | 0.0 - 1.0 |
0.5 |
|
min_hand_presence_confidence |
Il punteggio di confidenza minimo del punteggio di presenza della mano nella mano modello di rilevamento dei punti di riferimento. In modalità Video e live streaming del riconoscimento gesti: se il punteggio di sicurezza della presenza della mano del modello di punto di riferimento della mano è inferiore a questa soglia, attiva il modello di rilevamento della mano. Altrimenti, un algoritmo leggero di rilevamento della mano per determinare la posizione mani per il successivo rilevamento dei punti di riferimento. | 0.0 - 1.0 |
0.5 |
|
min_tracking_confidence |
Il punteggio di confidenza minimo per cui deve essere preso in considerazione il monitoraggio della mano riuscito. Questa è la soglia di IoU del riquadro di delimitazione tra le mani nella il frame corrente e l'ultimo. In modalità Video e Stream di Riconoscimento gesti: se il rilevamento non va a buon fine, il riconoscimento attiva la mano il rilevamento automatico. In caso contrario, il rilevamento della mano viene ignorato. | 0.0 - 1.0 |
0.5 |
|
canned_gestures_classifier_options |
Opzioni per configurare il comportamento del classificatore dei gesti predefiniti. I gesti predefiniti sono ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"] |
|
|
|
custom_gestures_classifier_options |
Opzioni per configurare il comportamento del classificatore dei gesti personalizzati. |
|
|
|
result_callback |
Imposta il listener dei risultati in modo che riceva i risultati della classificazione
in modo asincrono quando il riconoscimento dei gesti è in modalità live streaming.
Può essere utilizzato solo quando la modalità di corsa è impostata su LIVE_STREAM |
ResultListener |
N/D | N/D |
Preparazione dei dati
Prepara l'input come file immagine o array numpy, quindi convertilo in un
mediapipe.Image
oggetto. Se l'input è un file video o un live streaming da un
webcam, puoi utilizzare una libreria esterna come
OpenCV per caricare i frame di input come numpy
di grandi dimensioni.
Immagine
import mediapipe as mp # Load the input image from an image file. mp_image = mp.Image.create_from_file('/path/to/image') # Load the input image from a numpy array. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)
Video
import mediapipe as mp # Use OpenCV’s VideoCapture to load the input video. # Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS # You’ll need it to calculate the timestamp for each frame. # Loop through each frame in the video using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
Live streaming
import mediapipe as mp # Use OpenCV’s VideoCapture to start capturing from the webcam. # Create a loop to read the latest frame from the camera using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
Esegui l'attività
Il riconoscimento dei gesti utilizza i metodi di riconoscimento, riconosci_for_video e riconosci_async per attivare le inferenze. Per il riconoscimento dei gesti, pre-elaborazione dei dati di input, rilevamento delle mani nell'immagine, rilevamento della mano punti di riferimento e riconoscimento dei gesti della mano da questi punti di riferimento.
Il seguente codice mostra come eseguire l'elaborazione con il modello di attività.
Immagine
# Perform gesture recognition on the provided single image. # The gesture recognizer must be created with the image mode. gesture_recognition_result = recognizer.recognize(mp_image)
Video
# Perform gesture recognition on the provided single image. # The gesture recognizer must be created with the video mode. gesture_recognition_result = recognizer.recognize_for_video(mp_image, frame_timestamp_ms)
Live streaming
# Send live image data to perform gesture recognition. # The results are accessible via the `result_callback` provided in # the `GestureRecognizerOptions` object. # The gesture recognizer must be created with the live stream mode. recognizer.recognize_async(mp_image, frame_timestamp_ms)
Tieni presente quanto segue:
- Quando è attiva la modalità video o live streaming, devi anche indica il timestamp del frame di input dell'attività Riconoscimento gesti.
- Quando viene eseguita nell'immagine o nel modello video, l'attività Riconoscimento gesti bloccare il thread corrente finché non termina di elaborare l'immagine di input o frame.
- Quando viene eseguita in modalità live streaming, l'attività Riconoscimento gesti non blocca il thread corrente, ma restituisce immediatamente. Richiamerà il suo risultato con il risultato del riconoscimento ogni volta che termina l'elaborazione un frame di input. Se la funzione di riconoscimento viene richiamata quando il riconoscimento dei gesti l'attività è impegnata a elaborare un altro frame, l'attività ignorerà il nuovo input frame.
Per un esempio completo dell'esecuzione di un riconoscimento dei gesti su un'immagine, consulta il codice esempio per maggiori dettagli.
Gestire e visualizzare i risultati
Il riconoscimento gesti genera un oggetto risultato del rilevamento dei gesti per ogni durante l'esecuzione del riconoscimento. L'oggetto risultato contiene punti di riferimento a mano nelle coordinate dell'immagine, mano, punti di riferimento nelle coordinate del mondo, mano(mano sinistra/destra) e mano categorie di gesti delle mani rilevate.
Di seguito è riportato un esempio dei dati di output di questa attività:
L'elemento GestureRecognizerResult
risultante contiene quattro componenti, ognuno dei quali è un array, in cui ogni elemento contiene il risultato rilevato di una singola mano rilevata.
Mano dominante
La mano indica se le mani rilevate sono mani sinistra o destra.
Gesti
Le categorie di gesti riconosciute delle mani rilevate.
Punti di riferimento
Ci sono 21 punti di riferimento a mano, ognuno composto da coordinate
x
,y
ez
. La Le coordinate dix
ey
sono normalizzate a [0,0, 1,0] in base alla larghezza dell'immagine e rispettivamente per l'altezza e l'altezza. La coordinataz
rappresenta la profondità del punto di riferimento, con la profondità al polso rappresenta l'origine. Più basso è il valore, più vicino sarà è la fotocamera. La grandezza diz
utilizza più o meno la stessa scala dix
.Punti di riferimento mondiali
I punti di riferimento con 21 mani sono anche presentati in coordinate mondiali. Ogni punto di riferimento è composto da
x
,y
ez
, che rappresentano le coordinate 3D del mondo reale metri con l'origine al centro geometrico della mano.
GestureRecognizerResult:
Handedness:
Categories #0:
index : 0
score : 0.98396
categoryName : Left
Gestures:
Categories #0:
score : 0.76893
categoryName : Thumb_Up
Landmarks:
Landmark #0:
x : 0.638852
y : 0.671197
z : -3.41E-7
Landmark #1:
x : 0.634599
y : 0.536441
z : -0.06984
... (21 landmarks for a hand)
WorldLandmarks:
Landmark #0:
x : 0.067485
y : 0.031084
z : 0.055223
Landmark #1:
x : 0.063209
y : -0.00382
z : 0.020920
... (21 world landmarks for a hand)
Le seguenti immagini mostrano una visualizzazione dell'output dell'attività:
Il codice di esempio del riconoscimento gesti mostra come visualizzare il riconoscimento i risultati restituiti dall'attività, consulta il codice esempio per maggiori dettagli.