Guida al rilevamento dei punti di riferimento della mano
L'attività MediaPipe Hand Landmarker consente di rilevare i punti di riferimento delle mani in un'immagine.
Puoi utilizzare questa operazione per individuare i punti chiave delle mani e applicare effetti visivi. Questa attività opera sui dati delle immagini con un modello di machine learning (ML) come
dati statici o uno stream continuo e genera punti di riferimento della mano nelle coordinate
dell'immagine, punti di riferimento della mano nelle coordinate del mondo e dominanza della mano(mano sinistra/destra)
di più mani rilevate.
Per iniziare a utilizzare questa attività, segui una di queste guide all'implementazione per la tua piattaforma di destinazione. Queste guide specifiche per la piattaforma illustrano un'implementazione di base di questa attività, incluso un modello consigliato e un esempio di codice con le opzioni di configurazione consigliate:
Questa sezione descrive le funzionalità, gli input, gli output e le opzioni di configurazione di questa attività.
Funzionalità
Elaborazione delle immagini di input: l'elaborazione include la rotazione, il ridimensionamento, la normalizzazione e la conversione dello spazio colore delle immagini.
Soglia di punteggio: filtra i risultati in base ai punteggi di previsione.
Input delle attività
Output delle attività
Il rilevamento di punti di riferimento della mano accetta uno dei seguenti tipi di dati:
Immagini statiche
Fotogrammi video decodificati
Feed video in diretta
Il rilevamento di punti di riferimento della mano genera i seguenti risultati:
Mano dominante delle mani rilevate
Punti di riferimento delle mani rilevate nelle coordinate dell'immagine
Punti di riferimento delle mani rilevate in coordinate mondiali
Opzioni di configurazione
Questa attività ha le seguenti opzioni di configurazione:
Nome opzione
Descrizione
Intervallo di valori
Valore predefinito
running_mode
Imposta la modalità di esecuzione dell'attività. Esistono tre
modalità:
IMMAGINE: la modalità per l'inserimento di singole immagini.
VIDEO: la modalità per i fotogrammi decodificati di un video.
LIVE_STREAM: la modalità per un live streaming di dati di input, ad esempio da una videocamera. In questa modalità, resultListener deve essere chiamato per configurare un ascoltatore per ricevere i risultati in modo asincrono.
{IMAGE, VIDEO, LIVE_STREAM}
IMAGE
num_hands
Il numero massimo di mani rilevate dal Rilevamento di punti di riferimento della mano.
Any integer > 0
1
min_hand_detection_confidence
Il punteggio di attendibilità minimo per il rilevamento della mano deve essere considerato positivo nel modello di rilevamento del palmo.
0.0 - 1.0
0.5
min_hand_presence_confidence
Il punteggio di attendibilità minimo per il punteggio di presenza della mano nel
modello di rilevamento dei punti di riferimento della mano. In modalità Video e Live streaming,
se il punteggio di confidenza della presenza della mano del modello di landmark della mano è inferiore
a questa soglia, il rilevamento dei landmark della mano attiva il modello di rilevamento del palmo. In caso contrario, un
algoritmo di monitoraggio delle mani leggero determina la posizione
delle mani per i rilevamenti successivi dei punti di riferimento.
0.0 - 1.0
0.5
min_tracking_confidence
Il punteggio di attendibilità minimo per il rilevamento delle mani deve essere considerato positivo. Questa è la soglia IoU del riquadro di delimitazione tra le mani nel
frame corrente e nell'ultimo frame. In modalità Video e Stream di
Hand Landmarker, se il monitoraggio non va a buon fine, Hand Landmarker attiva il rilevamento della mano. In caso contrario, salta il rilevamento della mano.
0.0 - 1.0
0.5
result_callback
Imposta l'ascoltatore dei risultati in modo da ricevere i risultati del rilevamento
in modo asincrono quando il rilevamento di punti di riferimento della mano è in modalità live streaming.
Applicabile solo quando la modalità di esecuzione è impostata su LIVE_STREAM
N/D
N/D
Modelli
Il rilevamento di punti di riferimento della mano utilizza un bundle di modelli con due modelli pacchettizzati: un modello di rilevamento del palmo e un modello di rilevamento dei punti di riferimento della mano. Per eseguire questa attività, è necessario un bundle di modelli che contenga entrambi questi modelli.
Il bundle del modello di punti di riferimento della mano rileva la localizzazione dei punti chiave di 21
coordinate delle nocche delle mani all'interno delle regioni delle mani rilevate. Il modello è stato addestrato su circa 30.000 immagini del mondo reale, nonché su diversi modelli di mani sintetiche resi su vari sfondi.
Il bundle di modelli di indicatori della mano contiene un modello di rilevamento del palmo e un modello di rilevamento degli indicatori della mano. Il modello di rilevamento della mano individua le mani all'interno dell'immagine di input, mentre il modello di rilevamento dei punti di riferimento della mano identifica punti di riferimento specifici della mano nell'immagine della mano ritagliata definita dal modello di rilevamento della mano.
Poiché l'esecuzione del modello di rilevamento del palmo è un processo che richiede tempo, in modalità di esecuzione di video o live streaming, il rilevamento dei punti di riferimento della mano utilizza la casella delimitante definita dal modello dei punti di riferimento della mano in un fotogramma per localizzare la regione delle mani per i fotogrammi successivi. Il rilevamento dei punti di riferimento della mano riattiva il modello di rilevamento del palmo solo se il modello dei punti di riferimento della mano non identifica più la presenza delle mani o non riesce a monitorarle all'interno dell'inquadratura. In questo modo si riduce il numero di volte in cui il rilevamento dei punti di riferimento della mano attiva il modello di rilevamento del palmo.
Benchmark delle attività
Ecco i benchmark delle attività per l'intera pipeline in base ai modelli preaddestrati sopra indicati. Il risultato della latenza è la latenza media su Pixel 6 che utilizza CPU / GPU.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-01-13 UTC."],[],[],null,["# Hand landmarks detection guide\n\nThe MediaPipe Hand Landmarker task lets you detect the landmarks of the hands in an image.\nYou can use this task to locate key points of hands and render visual effects on\nthem. This task operates on image data with a machine learning (ML) model as\nstatic data or a continuous stream and outputs hand landmarks in image\ncoordinates, hand landmarks in world coordinates and handedness(left/right hand)\nof multiple detected hands.\n\n[Try it!arrow_forward](https://mediapipe-studio.webapps.google.com/demo/hand_landmarker)\n\nGet Started\n-----------\n\nStart using this task by following one of these implementation guides for your\ntarget platform. These platform-specific guides walk you through a basic\nimplementation of this task, including a recommended model, and code example\nwith recommended configuration options:\n\n- **Android** - [Code\n example](https://github.com/google-ai-edge/mediapipe-samples/tree/main/examples/hand_landmarker/android)\n - [Guide](./android)\n- **Python** - [Code\n example](https://colab.research.google.com/github/googlesamples/mediapipe/blob/main/examples/hand_landmarker/python/hand_landmarker.ipynb)\n - [Guide](./python)\n- **Web** - [Code example](https://codepen.io/mediapipe-preview/pen/gOKBGPN) - [Guide](./web_js)\n\nTask details\n------------\n\nThis section describes the capabilities, inputs, outputs, and configuration\noptions of this task.\n\n### Features\n\n- **Input image processing** - Processing includes image rotation, resizing, normalization, and color space conversion.\n- **Score threshold** - Filter results based on prediction scores.\n\n| Task inputs | Task outputs |\n|----------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| The Hand Landmarker accepts an input of one of the following data types: - Still images \u003c!-- --\u003e - Decoded video frames \u003c!-- --\u003e - Live video feed | The Hand Landmarker outputs the following results: - Handedness of detected hands \u003c!-- --\u003e - Landmarks of detected hands in image coordinates \u003c!-- --\u003e - Landmarks of detected hands in world coordinates |\n\n### Configurations options\n\nThis task has the following configuration options:\n\n| Option Name | Description | Value Range | Default Value |\n|---------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------|---------------|\n| `running_mode` | Sets the running mode for the task. There are three modes: \u003cbr /\u003e IMAGE: The mode for single image inputs. \u003cbr /\u003e VIDEO: The mode for decoded frames of a video. \u003cbr /\u003e LIVE_STREAM: The mode for a livestream of input data, such as from a camera. In this mode, resultListener must be called to set up a listener to receive results asynchronously. | {`IMAGE, VIDEO, LIVE_STREAM`} | `IMAGE` |\n| `num_hands` | The maximum number of hands detected by the Hand landmark detector. | `Any integer \u003e 0` | `1` |\n| `min_hand_detection_confidence` | The minimum confidence score for the hand detection to be considered successful in palm detection model. | `0.0 - 1.0` | `0.5` |\n| `min_hand_presence_confidence` | The minimum confidence score for the hand presence score in the hand landmark detection model. In Video mode and Live stream mode, if the hand presence confidence score from the hand landmark model is below this threshold, Hand Landmarker triggers the palm detection model. Otherwise, a lightweight hand tracking algorithm determines the location of the hand(s) for subsequent landmark detections. | `0.0 - 1.0` | `0.5` |\n| `min_tracking_confidence` | The minimum confidence score for the hand tracking to be considered successful. This is the bounding box IoU threshold between hands in the current frame and the last frame. In Video mode and Stream mode of Hand Landmarker, if the tracking fails, Hand Landmarker triggers hand detection. Otherwise, it skips the hand detection. | `0.0 - 1.0` | `0.5` |\n| `result_callback` | Sets the result listener to receive the detection results asynchronously when the hand landmarker is in live stream mode. Only applicable when running mode is set to `LIVE_STREAM` | N/A | N/A |\n\nModels\n------\n\nThe Hand Landmarker uses a model bundle with two packaged models: a palm detection\nmodel and a hand landmarks detection model. You need a model bundle that\ncontains both these models to run this task.\n| **Attention:** This MediaPipe Solutions Preview is an early release. [Learn more](/edge/mediapipe/solutions/about#notice).\n\n| Model name | Input shape | Quantization type | Model Card | Versions |\n|----------------------------------------------------------------------------------------------------------------------------------------------|----------------------|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------|\n| [HandLandmarker (full)](https://storage.googleapis.com/mediapipe-models/hand_landmarker/hand_landmarker/float16/latest/hand_landmarker.task) | 192 x 192, 224 x 224 | float 16 | [info](https://storage.googleapis.com/mediapipe-assets/Model%20Card%20Hand%20Tracking%20(Lite_Full)%20with%20Fairness%20Oct%202021.pdf) | [Latest](https://storage.googleapis.com/mediapipe-models/hand_landmarker/hand_landmarker/float16/latest/hand_landmarker.task) |\n\nThe hand landmark model bundle detects the keypoint localization of 21\nhand-knuckle coordinates within the detected hand regions. The model was trained\non approximately 30K real-world images, as well as several rendered synthetic\nhand models imposed over various backgrounds.\n\nThe hand landmarker model bundle contains a palm detection model and a hand\nlandmarks detection model. The Palm detection model locates hands within the\ninput image, and the hand landmarks detection model identifies specific hand\nlandmarks on the cropped hand image defined by the palm detection model.\n\nSince running the palm detection model is time consuming, when in video or live\nstream running mode, Hand Landmarker uses the bounding box defined by the hand\nlandmarks model in one frame to localize the region of hands for subsequent\nframes. Hand Landmarker only re-triggers the palm detection model if the hand\nlandmarks model no longer identifies the presence of hands or fails to track the\nhands within the frame. This reduces the number of times Hand Landmarker tiggers\nthe palm detection model.\n\nTask benchmarks\n---------------\n\nHere's the task benchmarks for the whole pipeline based on the above pre-trained\nmodels. The latency result is the average latency on Pixel 6 using CPU / GPU.\n\n| Model Name | CPU Latency | GPU Latency |\n|-----------------------|-------------|-------------|\n| HandLandmarker (full) | 17.12ms | 12.27ms |"]]