Guida al rilevamento dei punti di riferimento dei volti per il web

L'attività Punti di riferimento per volti di MediaPipe consente di rilevare i punti di riferimento dei volti e le espressioni facciali in come immagini e video. Puoi utilizzare questa attività per identificare le espressioni facciali umane, applicare filtri ed effetti facciali e creare avatar virtuali. Questa attività utilizza modelli di machine learning (ML) che possono funzionare con immagini singole o flusso di immagini. L'attività produce punti di riferimento tridimensionali per i volti, smoothshape (coefficienti che rappresentano l'espressione facciale) per dedurre superfici in tempo reale e matrici di trasformazione per eseguire trasformazioni necessarie per il rendering degli effetti.

Queste istruzioni mostrano come utilizzare Face riferimentoer 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 Face Taper fornisce un'implementazione completa in JavaScript come riferimento. Questo codice ti consente di testare l'attività e ottenere ha iniziato a creare un'app personalizzata per i punti di riferimento. Puoi visualizzare, eseguire Modifica il codice di esempio di Face Taper usando solo il browser web.

Configurazione

Questa sezione descrive i passaggi chiave per configurare l'ambiente di sviluppo in particolare per usare Face riferimentoer. 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 Face Lookouter è 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 to -->
<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
    crossorigin="anonymous"></script>
</head>

Modello

L'attività Tappa per viso di MediaPipe richiede un modello addestrato compatibile con questo dell'attività. Per ulteriori informazioni sui modelli addestrati disponibili per Face Scoreer, 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...() Face Taper 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 Quadrante di volto con opzioni di configurazione. Per ulteriori informazioni, 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 faceLandmarker = await faceLandmarker.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
running_mode 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
numFaces Il numero massimo di volti che possono essere rilevati FaceLandmarker. Il perfezionamento viene applicato solo quando num_faces è impostato su 1. Integer > 0 1
minFaceDetectionConfidence Il punteggio di confidenza minimo per il rilevamento dei volti viene considerata riuscita. Float [0.0,1.0] 0.5
minFacePresenceConfidence Il punteggio di confidenza minimo della presenza di volti di riconoscimento facciale nel rilevamento dei punti di riferimento. Float [0.0,1.0] 0.5
minTrackingConfidence Il punteggio di confidenza minimo per il monitoraggio dei volti per essere considerate efficaci. Float [0.0,1.0] 0.5
outputFaceBlendshapes Consente di stabilire se l'output di Face Taper crea combinazioni di forme. Le forme del volto vengono utilizzate per il rendering del modello del volto 3D. Boolean False
outputFacialTransformationMatrixes Se FaceLandmarker restituisce il volto una matrice di trasformazione. FaceLandmarker utilizza lo strumento per trasformare i punti di riferimento dei volti da un modello di volto canonico a volto rilevato, per consentire agli utenti di applicare effetti sui punti di riferimento rilevati. Boolean False

Preparazione dei dati

La funzione Face Taper è in grado di rilevare i volti 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 contrassegnare i volti nei video: puoi utilizzare l'API per elaborare rapidamente un frame alla volta, utilizzando il timestamp dell'inquadratura per determinare quando i volti compaiono nel video.

Esegui l'attività

Punti di riferimento per i volti utilizza detect() (con modalità di corsa IMAGE) e Metodi detectForVideo() (con modalità di esecuzione VIDEO) per attivare le inferenze. L'attività elabora i dati, tenta di identificare i volti dei punti di riferimento e quindi segnala i risultati.

Chiamate all'esecuzione dei metodi detect() e detectForVideo() di Face Taper in modo sincrono e bloccare il thread dell'interfaccia utente. Se rilevi volti 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 faceLandmarkerResult = faceLandmarker.detect(image);

Video

await faceLandmarker.setOptions({ runningMode: "VIDEO" });

let lastVideoTime = -1;
function renderLoop(): void {
  const video = document.getElementById("video");

  if (video.currentTime !== lastVideoTime) {
    const faceLandmarkerResult = faceLandmarker.detectForVideo(video);
    processResults(detections);
    lastVideoTime = video.currentTime;
  }

  requestAnimationFrame(() => {
    renderLoop();
  });
}

Per un'implementazione più completa dell'esecuzione di un'attività Punti di riferimento volti, consulta le esempio di codice.

Gestire e visualizzare i risultati

La funzione Face Taper restituisce un oggetto risultato per ogni rilevamento vengono eseguiti tutti i test delle unità. L'oggetto risultato contiene un mesh per ogni volto rilevato, con per ogni punto di riferimento volto. Facoltativamente, l'oggetto risultato può anche contengono milkshake, che indicano le espressioni facciali, e un di trasformazione per applicare effetti volti ai punti di riferimento rilevati.

Di seguito è riportato un esempio dei dati di output di questa attività:

FaceLandmarkerResult:
  face_landmarks:
    NormalizedLandmark #0:
      x: 0.5971359014511108
      y: 0.485361784696579
      z: -0.038440968841314316
    NormalizedLandmark #1:
      x: 0.3302789330482483
      y: 0.29289937019348145
      z: -0.09489090740680695
    ... (478 landmarks for each face)
  face_blendshapes:
    browDownLeft: 0.8296722769737244
    browDownRight: 0.8096957206726074
    browInnerUp: 0.00035583582939580083
    browOuterUpLeft: 0.00035752105759456754
    ... (52 blendshapes for each face)
  facial_transformation_matrixes:
    [9.99158978e-01, -1.23036895e-02, 3.91213447e-02, -3.70770246e-01]
    [1.66496094e-02,  9.93480563e-01, -1.12779640e-01, 2.27719707e+01]
    ...

L'immagine seguente mostra una visualizzazione dell'output dell'attività:

Il codice di esempio di Face Taper mostra come visualizzare i risultati restituiti dall'attività, controlla esempio di codice