A tarefa do MediaPipe Face Pointser permite detectar pontos de referência do rosto e expressões faciais em imagens e vídeos. É possível usar essa tarefa para identificar expressões faciais humanas, aplicar filtros e efeitos faciais e criar avatares virtuais. Essa tarefa usa modelos de machine learning (ML) que funcionam com imagens únicas ou um fluxo contínuo de imagens. A tarefa gera pontos de referência tridimensionais de rostos, pontuações de mesclagem (coeficientes que representam expressão facial) para inferir superfícies faciais detalhadas em tempo real e gera matrizes de transformação para realizar as transformações necessárias para a renderização de efeitos.
Estas instruções mostram como usar o Ponto de referência facial para apps da Web e JavaScript. Para mais informações sobre os recursos, modelos e opções de configuração dessa tarefa, consulte a Visão geral.
Exemplo de código
O código de exemplo do Face extras fornece uma implementação completa dessa tarefa em JavaScript para sua referência. Esse código ajuda você a testar essa tarefa e começar a criar seu próprio app de ponto de referência de rostos. É possível ver, executar e editar o exemplo de código do Marcador de rosto usando apenas seu navegador da Web.
Configuração
Nesta seção, descrevemos as principais etapas para configurar seu ambiente de desenvolvimento especificamente para usar o Face Pointser. Para informações gerais sobre a configuração do ambiente de desenvolvimento Web e JavaScript, incluindo requisitos da versão da plataforma, consulte o Guia de configuração para Web.
Pacotes JavaScript
O código do ponto de referência facial está disponível no pacote @mediapipe/tasks-vision
NPM do MediaPipe. É possível
encontrar e fazer o download dessas bibliotecas seguindo as instruções no
Guia de configuração da plataforma.
É possível instalar os pacotes necessários por meio do NPM usando o seguinte comando:
npm install @mediapipe/tasks-vision
Se você quiser importar o código da tarefa por um serviço da rede de fornecimento de conteúdo (CDN), adicione o seguinte código à tag <head> no arquivo 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>
Modelo
A tarefa do MediaPipe Face Framework requer um modelo treinado compatível com essa tarefa. Para mais informações sobre os modelos treinados disponíveis para o ponto de referência facial, consulte a seção Modelos de visão geral da tarefa.
Selecione e faça o download de um modelo e armazene-o no diretório do projeto:
<dev-project-root>/app/shared/models/
Criar a tarefa
Use uma das funções createFrom...()
do Ponto de referência facial para
preparar a tarefa para executar inferências. Use a função createFromModelPath()
com um caminho relativo ou absoluto para o arquivo de modelo treinado.
Se o modelo já estiver carregado na memória, use o
método createFromModelBuffer()
.
O exemplo de código abaixo demonstra o uso da função createFromOptions()
para configurar a tarefa. A função createFromOptions
permite personalizar o
Marcador de rosto com opções de configuração. Para mais informações, consulte
Opções de configuração.
O código abaixo demonstra como criar e configurar a tarefa com opções personalizadas:
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
});
Opções de configuração
Essa tarefa tem as seguintes opções de configuração para aplicativos da Web e JavaScript:
Nome da opção | Descrição | Intervalo de valor | Valor padrão |
---|---|---|---|
running_mode |
Define o modo de execução da tarefa. Há dois
modos: IMAGE: o modo para entradas de imagem única. VIDEO: o modo para frames decodificados de um vídeo ou em uma transmissão ao vivo de dados de entrada, como de uma câmera. |
{IMAGE, VIDEO } |
IMAGE |
numFaces |
O número máximo de rostos que podem ser detectados pelo
FaceLandmarker . A suavização só é aplicada quando
num_faces é definido como 1.
|
Integer > 0 |
1 |
minFaceDetectionConfidence |
A pontuação de confiança mínima para que a detecção facial seja considerada bem-sucedida. | Float [0.0,1.0] |
0.5 |
minFacePresenceConfidence |
A pontuação de confiança mínima da pontuação de presença facial na detecção de pontos de referência de rostos. | Float [0.0,1.0] |
0.5 |
minTrackingConfidence |
A pontuação de confiança mínima para que o rastreamento facial seja considerado bem-sucedido. | Float [0.0,1.0] |
0.5 |
outputFaceBlendshapes |
Define se o Ponto de referência de rosto gera formas mescladas de rostos. As mesclagens de rostos são usadas para renderizar o modelo de rosto 3D. | Boolean |
False |
outputFacialTransformationMatrixes |
Indica se o FaceLandmarker gera a matriz de transformação facial. O FaceLandmarker usa a matriz para transformar os pontos de referência faciais de um modelo de rosto canônico no rosto detectado para que os usuários possam aplicar efeitos a eles. | Boolean |
False |
preparar dados
O Ponto de referência pode detectar rostos em imagens em qualquer formato com suporte no navegador do host. A tarefa também lida com o pré-processamento da entrada de dados, incluindo redimensionamento, rotação e normalização de valores. Você pode usar a API para processar rapidamente um frame por vez usando o carimbo de data/hora do frame para determinar quando os rostos aparecem no vídeo.
Executar a tarefa
O ponto de referência do rosto usa os métodos detect()
(com modo de execução IMAGE
) e
detectForVideo()
(com modo de execução VIDEO
) para acionar
inferências. A tarefa processa os dados, tenta identificar rostos de pontos de referência e,
em seguida, informa os resultados.
As chamadas para os métodos detect()
e detectForVideo()
do ponto de referência do rosto são executadas
de forma síncrona e bloqueiam a linha de execução da interface do usuário. Se você detectar rostos
em frames de vídeo na câmera de um dispositivo, cada detecção vai bloquear a linha de execução
principal. É possível evitar isso implementando workers da Web para executar os métodos detect()
e detectForVideo()
em outra linha de execução.
O código a seguir demonstra como executar o processamento com o modelo de tarefa:
Imagem
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(); }); }
Para conferir uma implementação mais completa da execução de uma tarefa do Face Markdown, consulte o exemplo de código.
Gerenciar e mostrar resultados
O Marcador de rosto retorna um objeto de resultado para cada execução de detecção. O objeto de resultado contém uma malha de rostos para cada rosto detectado, com coordenadas para cada ponto de referência. Opcionalmente, o objeto de resultado também pode conter mergeshapes, que denotam expressões faciais, e uma matriz de transformação facial para aplicar efeitos faciais nos pontos de referência detectados.
Veja a seguir um exemplo dos dados de saída dessa tarefa:
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]
...
A imagem abaixo mostra uma visualização da saída da tarefa:
O código de exemplo do Face extras mostra como mostrar os resultados retornados da tarefa. Consulte o exemplo de código (link em inglês).