L'attività Punti di riferimento di MediaPipe consente di rilevare punti di riferimento di corpi umani in un'immagine o video. Puoi utilizzare questa attività per identificare le posizioni chiave del corpo, analizzare la postura, e classificare i movimenti. Questa attività utilizza modelli di machine learning (ML) che funzionano con singole immagini o video. L'attività restituisce le posizioni del corpo nell'immagine e in coordinate mondiali tridimensionali.
Queste istruzioni mostrano come utilizzare Pose Highlighter per il web e JavaScript app. Per ulteriori informazioni su funzionalità, modelli e configurazione opzioni di questa attività, consulta la Panoramica.
Esempio di codice
Il codice d'esempio di Pose Taper fornisce un'implementazione completa in JavaScript come riferimento. Questo codice ti consente di testare l'attività e ottenere ha iniziato a creare la tua app per creare punti di riferimento delle posizioni. Puoi visualizzare, eseguire Modifica il codice di esempio di POSIZIONATORI. usando solo il browser web.
Configurazione
Questa sezione descrive i passaggi chiave per configurare l'ambiente di sviluppo in modo specifico per usare Posizionatore di posa. Per informazioni generali su configurare l'ambiente di sviluppo web e JavaScript, incluse i requisiti di versione della piattaforma, consulta Guida alla configurazione per il web.
Pacchetti JavaScript
Il codice di Pose Taper è disponibile tramite MediaPipe @mediapipe/tasks-vision
Pacchetto NPM. Puoi
trovare e scaricare queste librerie seguendo le istruzioni nella piattaforma
Guida alla configurazione.
Puoi installare i pacchetti richiesti tramite Gestione dei partner di rete utilizzando il seguente comando:
npm install @mediapipe/tasks-vision
Se vuoi importare il codice dell'attività tramite una rete CDN (Content Delivery Network) servizio, aggiungi il seguente codice nel tag <head> nel file HTML:
<!-- You can replace JSDeliver with another CDN if you prefer -->
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
crossorigin="anonymous"></script>
</head>
Modello
L'attività Punti di riferimento di MediaPipe richiede un modello addestrato che sia compatibile con dell'attività. Per ulteriori informazioni sui modelli addestrati disponibili per Pose Taper, vedi la panoramica delle attività nella sezione Modelli.
Seleziona e scarica un modello, quindi archivialo nella directory del progetto:
<dev-project-root>/app/shared/models/
Crea l'attività
Usa una delle funzioni createFrom...()
di Posa punto di riferimento per
per preparare l'attività per l'esecuzione delle inferenze. Usa createFromModelPath()
con un percorso relativo o assoluto al file del modello addestrato.
Se il modello è già caricato in memoria, puoi utilizzare
createFromModelBuffer()
.
L'esempio di codice seguente mostra l'utilizzo della funzione createFromOptions()
per
configurare l'attività. La funzione createFromOptions()
ti consente di personalizzare
Posa punto di riferimento con opzioni di configurazione. Per ulteriori informazioni sulla configurazione
vedi Opzioni di configurazione.
Il codice seguente mostra come creare e configurare l'attività con opzioni:
const vision = await FilesetResolver.forVisionTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const poseLandmarker = await poseLandmarker.createFromOptions(
vision,
{
baseOptions: {
modelAssetPath: "path/to/model"
},
runningMode: runningMode
});
Opzioni di configurazione
Questa attività include le seguenti opzioni di configurazione per web e JavaScript applicazioni:
Nome opzione | Descrizione | Intervallo di valori | Valore predefinito |
---|---|---|---|
runningMode |
Imposta la modalità di esecuzione per l'attività. Esistono due metodi
modalità: IMAGE: la modalità per gli input di immagini singole. VIDEO: La modalità per i fotogrammi decodificati di un in un video o durante un live streaming di dati di input, ad esempio da una videocamera. |
{IMAGE, VIDEO } |
IMAGE |
numPoses |
Il numero massimo di pose che possono essere rilevate dal Punto di riferimento per la posa. | Integer > 0 |
1 |
minPoseDetectionConfidence |
Il punteggio di confidenza minimo per il rilevamento della posizione viene considerata riuscita. | Float [0.0,1.0] |
0.5 |
minPosePresenceConfidence |
Il punteggio di confidenza minimo della presenza della posa il punteggio nel rilevamento dei punti di riferimento della posizione. | Float [0.0,1.0] |
0.5 |
minTrackingConfidence |
Il punteggio di confidenza minimo per il monitoraggio della posizione per essere considerate efficaci. | Float [0.0,1.0] |
0.5 |
outputSegmentationMasks |
Consente di stabilire se mostrare o meno una maschera di segmentazione per l'oggetto rilevato posa. | Boolean |
False |
Preparazione dei dati
POSE segnaletica può rilevare le pose nelle immagini in qualsiasi formato supportato browser host. L'attività gestisce anche la pre-elaborazione dell'input di dati, tra cui ridimensionamento, rotazione e normalizzazione dei valori. Per le pose storiche nei video: puoi utilizzare l'API per elaborare rapidamente un frame alla volta, utilizzando il timestamp dell'inquadratura per determinare quando le pose compaiono nel video.
Esegui l'attività
La funzione di riferimento in posa utilizza detect()
(con modalità di corsa IMAGE
) e
Metodi detectForVideo()
(con modalità di esecuzione VIDEO
) per attivare
le inferenze. L'attività elabora i dati, prova a utilizzare le posizioni dei punti di riferimento e
quindi segnala i risultati.
Chiamate all'esecuzione dei metodi detect()
e detectForVideo()
di Pose Highlighter
in modo sincrono e bloccare l'interposizione del thread da parte dell'utente. Se rilevi le pose
nei fotogrammi video della videocamera di un dispositivo, ogni rilevamento blocca la
. Puoi ovviare a questo problema implementando i web worker per eseguire detect()
e detectForVideo()
su un altro thread.
Il seguente codice mostra come eseguire l'elaborazione con il modello di attività:
Immagine
const image = document.getElementById("image") as HTMLImageElement; const poseLandmarkerResult = poseLandmarker.detect(image);
Video
await poseLandmarker.setOptions({ runningMode: "VIDEO" }); let lastVideoTime = -1; function renderLoop(): void { const video = document.getElementById("video"); if (video.currentTime !== lastVideoTime) { const poseLandmarkerResult = poseLandmarker.detectForVideo(video); processResults(detections); lastVideoTime = video.currentTime; } requestAnimationFrame(() => { renderLoop(); }); }
Per un'implementazione più completa dell'esecuzione di un'attività di Punti di riferimento in posizioni, consulta la esempio di codice.
Gestire e visualizzare i risultati
La funzione di riferimento per le posizioni restituisce un oggetto poseLandmarkerResult
per ogni rilevamento
vengono eseguiti tutti i test delle unità. L'oggetto risultato contiene le coordinate di ogni punto di riferimento di posa.
Di seguito è riportato un esempio dei dati di output di questa attività:
PoseLandmarkerResult:
Landmarks:
Landmark #0:
x : 0.638852
y : 0.671197
z : 0.129959
visibility : 0.9999997615814209
presence : 0.9999984502792358
Landmark #1:
x : 0.634599
y : 0.536441
z : -0.06984
visibility : 0.999909
presence : 0.999958
... (33 landmarks per pose)
WorldLandmarks:
Landmark #0:
x : 0.067485
y : 0.031084
z : 0.055223
visibility : 0.9999997615814209
presence : 0.9999984502792358
Landmark #1:
x : 0.063209
y : -0.00382
z : 0.020920
visibility : 0.999976
presence : 0.999998
... (33 world landmarks per pose)
SegmentationMasks:
... (pictured below)
L'output contiene sia le coordinate normalizzate (Landmarks
) sia il mondo
coordinate (WorldLandmarks
) per ogni punto di riferimento.
L'output contiene le seguenti coordinate normalizzate (Landmarks
):
x
ey
: coordinate dei punti di riferimento normalizzate tra 0,0 e 1,0 in base al larghezza (x
) e altezza (y
) dell'immagine.z
: la profondità del punto di riferimento, con la profondità nel punto centrale dei fianchi come origine dati. Più basso è il valore, più il punto di riferimento è vicino alla fotocamera. La magnitude z utilizza più o meno la stessa scala dix
.visibility
: la probabilità che il punto di riferimento sia visibile all'interno dell'immagine.
L'output contiene le seguenti coordinate del mondo (WorldLandmarks
):
x
,y
ez
: coordinate 3dimensionali del mondo reale in metri, con parte centrale dei fianchi come origine.visibility
: la probabilità che il punto di riferimento sia visibile all'interno dell'immagine.
L'immagine seguente mostra una visualizzazione dell'output dell'attività:
La maschera di segmentazione facoltativa rappresenta la probabilità che ciascun pixel appartenga a una persona rilevata. Nell'immagine di seguito è riportata una maschera di segmentazione output dell'attività:
Il codice d'esempio di Pose Taper illustra come visualizzare i risultati restituiti dall'attività, controlla esempio di codice