A tarefa MediaPipe Face Scoreer permite detectar pontos de referência do rosto e expressões faciais no imagens e vídeos. Use essa tarefa para identificar expressões faciais humanas e aplicar filtros e efeitos faciais para criar um avatar virtual. Esta tarefa usa de machine learning (ML) que funcionam com imagens únicas ou uma fluxo de imagens. A tarefa gera pontos de referência tridimensionais de rostos, forma de mistura pontuações (coeficientes que representam expressões faciais) para inferir dados faciais detalhados as superfícies em tempo real, e as matrizes de transformação transformações necessárias para a renderização de efeitos.
O exemplo de código descrito nestas instruções está disponível em GitHub. Para mais informações sobre recursos, modelos e opções de configuração, desta tarefa, consulte a Visão geral.
Exemplo de código
O código de exemplo do Face Markdowner fornece uma implementação completa desse em Python para sua referência. Esse código ajuda a testar a tarefa você começou a criar seu próprio ponto de referência de rostos. Você pode visualizar, executar e editar o Exemplo de Face Markdown código usando apenas seu navegador da Web.
Se você estiver implementando o Face marcoer para Raspberry Pi, consulte o Exemplo do Raspberry Pi app.
Configuração
Esta seção descreve as principais etapas para configurar seu ambiente de desenvolvimento e projetos de código especificamente para usar o Face Pointser. Para informações gerais a configuração do seu ambiente de desenvolvimento para usar tarefas do MediaPipe, incluindo requisitos de versão da plataforma, consulte o Guia de configuração do Python.
Pacotes
A tarefa MediaPipe Face Markdowner exige o pacote PyPI do mediapipe. É possível instalar e importe essas dependências com o seguinte:
$ python -m pip install mediapipe
Importações
Importe as seguintes classes para acessar as funções de tarefa do Face Markdown:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Modelo
A tarefa MediaPipe Face Scoreer requer um modelo treinado que seja compatível com esse tarefa. Para mais informações sobre os modelos treinados disponíveis para o Face Pointser, consulte na seção de visão geral da tarefa Modelos.
Selecione e faça o download do modelo e, em seguida, armazene-o em um diretório local:
model_path = '/absolute/path/to/face_landmarker.task'
Use o parâmetro model_asset_path
do objeto BaseOptions
para especificar o caminho do
o modelo a ser usado. Para conferir um exemplo de código, consulte a próxima seção.
Criar a tarefa
A tarefa MediaPipe Face Markdowner usa a função create_from_options
para configurar o
tarefa. A função create_from_options
aceita valores para configuração.
opções de processamento. Para mais informações sobre as opções de configuração, consulte
Opções de configuração.
O código abaixo demonstra como criar e configurar essa tarefa.
Esses exemplos também mostram as variações da construção da tarefa para imagens, arquivos de vídeo e transmissões ao vivo.
Imagem
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceLandmarker = mp.tasks.vision.FaceLandmarker FaceLandmarkerOptions = mp.tasks.vision.FaceLandmarkerOptions VisionRunningMode = mp.tasks.vision.RunningMode options = FaceLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.IMAGE) with FaceLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
Vídeo
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceLandmarker = mp.tasks.vision.FaceLandmarker FaceLandmarkerOptions = mp.tasks.vision.FaceLandmarkerOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a face landmarker instance with the video mode: options = FaceLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.VIDEO) with FaceLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
Transmissão ao vivo
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceLandmarker = mp.tasks.vision.FaceLandmarker FaceLandmarkerOptions = mp.tasks.vision.FaceLandmarkerOptions FaceLandmarkerResult = mp.tasks.vision.FaceLandmarkerResult VisionRunningMode = mp.tasks.vision.RunningMode # Create a face landmarker instance with the live stream mode: def print_result(result: FaceLandmarkerResult, output_image: mp.Image, timestamp_ms: int): print('face landmarker result: {}'.format(result)) options = FaceLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.LIVE_STREAM, result_callback=print_result) with FaceLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
Para ver um exemplo completo de criação de um marco de rostos para uso com uma imagem, consulte o código exemplo.
Opções de configuração
Esta tarefa tem as seguintes opções de configuração para aplicativos Python:
Nome da opção | Descrição | Intervalo de valor | Valor padrão |
---|---|---|---|
running_mode |
Define o modo de execução da tarefa. Existem três
modos: IMAGEM: o modo para entradas de imagem única. VÍDEO: o modo para frames decodificados de um vídeo. LIVE_STREAM: o modo de transmissão ao vivo da entrada dados de uma câmera, por exemplo. Neste modo, resultListener deve ser chamado para configurar um listener e receber resultados de forma assíncrona. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
num_faces |
O número máximo de rostos que podem ser detectados pelo
o FaceLandmarker . A suavização só é aplicada quando
num_faces é definido como 1.
|
Integer > 0 |
1 |
min_face_detection_confidence |
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 |
min_face_presence_confidence |
A pontuação de confiança mínima da presença facial na detecção de pontos de referência do rosto. | Float [0.0,1.0] |
0.5 |
min_tracking_confidence |
A pontuação de confiança mínima para o rastreamento facial para ser considerado bem-sucedido. | Float [0.0,1.0] |
0.5 |
output_face_blendshapes |
Define se o marco de rostos gera combinações de rostos. As formas de mesclagem de rostos são usadas para renderizar o modelo de rosto em 3D. | Boolean |
False |
output_facial_transformation_matrixes |
Define se FaceLandmarker gera o efeito facial matriz de transformação. O FaceLandmarker usa o para transformar os pontos de referência faciais de um modelo de rosto canônico para o rosto detectado, para que os usuários possam aplicar efeitos aos pontos de referência detectados. | Boolean |
False |
result_callback |
Define o listener de resultados para receber os resultados do detector de ponto de referência.
de forma assíncrona quando FaceLandmarker estiver no modo de transmissão ao vivo.
Só pode ser usado quando o modo de corrida está definido como LIVE_STREAM |
ResultListener |
N/A |
Preparar dados
Prepare sua entrada como um arquivo de imagem ou uma matriz numpy e, em seguida, converta-a em um
mediapipe.Image
. Se sua entrada for um arquivo de vídeo ou uma transmissão ao vivo de um
webcam, você pode usar uma biblioteca externa, como
OpenCV para carregar os frames de entrada como numpy
matrizes de dados.
Imagem
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)
Vídeo
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)
Transmissão ao vivo
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)
Executar a tarefa
O ponto de referência do rosto usa detect
, detect_for_video
e detect_async
.
para acionar inferências. Para pontos de referência de rostos, isso envolve
pré-processar dados de entrada e detectar rostos na imagem;
O código a seguir demonstra como executar o processamento com a tarefa um modelo de machine learning.
Imagem
# Perform face landmarking on the provided single image. # The face landmarker must be created with the image mode. face_landmarker_result = landmarker.detect(mp_image)
Vídeo
# Perform face landmarking on the provided single image. # The face landmarker must be created with the video mode. face_landmarker_result = landmarker.detect_for_video(mp_image, frame_timestamp_ms)
Transmissão ao vivo
# Send live image data to perform face landmarking. # The results are accessible via the `result_callback` provided in # the `FaceLandmarkerOptions` object. # The face landmarker must be created with the live stream mode. landmarker.detect_async(mp_image, frame_timestamp_ms)
Observe o seguinte:
- Ao executar no modo de vídeo ou de transmissão ao vivo, forneça também o O Face Marcer atribui o carimbo de data/hora do frame de entrada.
- Ao executar na imagem ou no modelo de vídeo, a tarefa do Face Pointser bloqueia na linha de execução atual até terminar de processar a imagem ou o frame de entrada.
- Quando executada no modo de transmissão ao vivo, a tarefa "Face Markdown" retorna imediatamente e não bloqueia a linha de execução atual. Ele vai invocar o resultado com o resultado da detecção sempre que ele termina de processar um frame de entrada. Se a função de detecção for chamada quando a tarefa "Roteiro do rosto" estiver ocupado processando outro frame, a tarefa ignorará o novo frame de entrada.
Para um exemplo completo de execução de um marco de rosto em uma imagem, consulte o código exemplo para mais detalhes.
Gerenciar e exibir resultados
O Face marcoer retorna um objeto FaceLandmarkerResult
para cada detecção.
correr. O objeto do resultado contém uma malha de rosto para cada rosto detectado, com
coordenadas para cada ponto de referência do rosto. Opcionalmente, o objeto de resultado também pode
contêm formas mistas, que indicam expressões faciais, e
matriz de transformação para aplicar efeitos faciais aos pontos de referência detectados.
Confira abaixo um exemplo dos dados de saída desta 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 marcoer demonstra como exibir os resultados retornados. da tarefa, consulte o código exemplo para mais detalhes.