MediaPipe 얼굴 랜드마크 작업을 사용하면 컴퓨터에서 얼굴의 랜드마크와 표정을 이미지 및 동영상입니다. 이 작업을 사용하여 인간의 표정을 식별할 수 있습니다. 얼굴 필터와 효과를 적용하여 가상 아바타를 만들어 보세요. 이 태스크에서는 다음을 사용합니다. 머신러닝 (ML) 모델은 단일 이미지 또는 연속된 이미지 이미지 스트림입니다. 이 작업은 3차원 얼굴 랜드마크, 혼합형을 출력합니다. 상세한 얼굴 표정을 추론하기 위한 점수 (얼굴 표정을 나타내는 계수) 실시간으로 표시, 변환 행렬을 사용하여 변환이 필요합니다.
이 지침에서 설명하는 코드 샘플은 GitHub 기능, 모델, 구성 옵션에 대한 자세한 내용은 개요를 참조하세요.
코드 예
얼굴 랜드마크의 코드 예는 다음의 전체 구현을 제공합니다. 참고하세요. 이 코드는 이 작업을 테스트하고 자체 얼굴 랜드마크를 만들기 시작했습니다. 얼굴 랜드마크 도구 예 코드 할 수 있습니다.
Raspberry Pi용 Face TRADEMARKer를 구현하는 경우 다음을 참조하세요. Raspberry Pi 예시 앱을 엽니다.
설정
이 섹션에서는 개발 환경을 설정하는 주요 단계를 설명하고 코딩 프로젝트를 사용하여 얼굴 랜드마크를 만들 수 있습니다. 일반적인 정보 다음과 같은 MediaPipe 작업을 사용하기 위한 개발 환경 설정 플랫폼 버전 요구사항에 대한 자세한 내용은 Python을 사용합니다.
<ph type="x-smartling-placeholder">패키지
MediaPipe 얼굴 랜드마크 작업자 작업에는 mediapipe PyPI 패키지가 필요합니다. Cloud Shell을 설치하고 다음을 사용하여 이러한 종속 항목을 가져옵니다.
$ python -m pip install mediapipe
가져오기
다음 클래스를 가져와 얼굴 랜드마크 작업 함수에 액세스합니다.
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
모델
MediaPipe Face TRADEMARKer 작업을 수행하려면 이 작업과 호환되는 학습된 모델이 필요합니다. 태스크에 맞추는 것입니다. 얼굴 랜드마크에 사용할 수 있는 학습된 모델에 대한 자세한 내용은 다음을 참조하세요. 작업 개요의 모델 섹션을 확인합니다.
모델을 선택하고 다운로드한 후 로컬 디렉터리에 저장합니다.
model_path = '/absolute/path/to/face_landmarker.task'
BaseOptions
객체 model_asset_path
매개변수를 사용하여
지정할 수도 있습니다 코드 예는 다음 섹션을 참고하세요.
할 일 만들기
MediaPipe 얼굴 랜드마크 작업자 작업은 create_from_options
함수를 사용하여
태스크에 맞추는 것입니다. create_from_options
함수는 구성 값을 허용함
처리할 수 있습니다. 구성 옵션에 대한 자세한 내용은 다음을 참조하세요.
구성 옵션.
다음 코드는 이 작업을 빌드하고 구성하는 방법을 보여줍니다.
또한 이 샘플은 이미지에 대한 작업 구성의 변형도 보여줍니다. 동영상 파일, 라이브 스트림 등이 있죠
이미지
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. # ...
동영상
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. # ...
실시간 스트림
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. # ...
이미지에 사용할 얼굴 랜드마크를 만드는 전체 예는 다음을 참조하세요. 코드 예시를 참조하세요.
구성 옵션
이 작업에는 Python 애플리케이션을 위한 다음과 같은 구성 옵션이 있습니다.
옵션 이름 | 설명 | 값 범위 | 기본값 |
---|---|---|---|
running_mode |
작업의 실행 모드를 설정합니다. 세 가지
모드: IMAGE: 단일 이미지 입력 모드입니다. 동영상: 동영상의 디코딩된 프레임 모드입니다. LIVE_STREAM: 입력의 라이브 스트림 모드 데이터를 수집할 수 있습니다. 이 모드에서는 resultListener가 결과를 수신하도록 리스너를 설정하기 위해 호출 있습니다. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
num_faces |
기기가 인식할 수 있는 최대 얼굴 수입니다.
FaceLandmarker 평활화는
num_faces 가 1로 설정됩니다.
|
Integer > 0 |
1 |
min_face_detection_confidence |
얼굴 인식에 필요한 최소 신뢰도 점수입니다. 성공으로 간주됩니다. | Float [0.0,1.0] |
0.5 |
min_face_presence_confidence |
얼굴 존재의 최소 신뢰도 점수입니다. 얼굴 특징 감지에서 점수를 계산할 수 있습니다. | Float [0.0,1.0] |
0.5 |
min_tracking_confidence |
얼굴 추적의 최소 신뢰도 점수입니다. 합격해야 합니다. | Float [0.0,1.0] |
0.5 |
output_face_blendshapes |
얼굴 랜드마크 도구가 얼굴 혼합 형태를 출력하는지 여부입니다. 얼굴 혼합 모양은 3D 얼굴 모델을 렌더링하는 데 사용됩니다. | Boolean |
False |
output_facial_transformation_matrixes |
FaceShadower가 얼굴 인식을 출력하는지 여부 변환 행렬입니다. FaceTRADEMARKer는 행렬을 사용하여 얼굴 랜드마크를 표준 얼굴 모델에서 이를 통해 사용자는 감지된 랜드마크에 효과를 적용할 수 있습니다. | Boolean |
False |
result_callback |
랜드마크 결과를 수신하도록 결과 리스너를 설정합니다.
FaceTRADEMARKer가 라이브 스트림 모드에 있을 때 비동기식으로 반환됩니다.
달리기 모드가 LIVE_STREAM 로 설정된 경우에만 사용할 수 있습니다. |
ResultListener |
N/A |
데이터 준비
입력을 이미지 파일 또는 NumPy 배열로 준비한 후
mediapipe.Image
객체. 입력이 동영상 파일 또는 YouTube의
웹캠과 같은 외부 라이브러리를
입력 프레임을 Numpy로 로드하는 OpenCV
배열입니다.
이미지
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)
동영상
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)
실시간 스트림
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)
작업 실행
얼굴 랜드마크는 detect
, detect_for_video
, detect_async
를 사용합니다.
함수를 사용하여 추론을 트리거합니다. 얼굴 특징화의 경우 다음과 같은 작업이 포함됩니다.
입력 데이터를 전처리하고 이미지에서 얼굴을 감지합니다.
다음 코드는 작업으로 처리를 실행하는 방법을 보여줍니다. 있습니다.
이미지
# 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)
동영상
# 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)
실시간 스트림
# 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)
다음에 유의하세요.
- 동영상 모드 또는 라이브 스트림 모드에서 실행하는 경우 얼굴 랜드마크 작업 작업은 입력 프레임의 타임스탬프입니다.
- 이미지 또는 동영상 모델에서 실행하는 경우 얼굴 랜드마크 작업이 차단됩니다. 현재 스레드가 입력 이미지 또는 프레임 처리를 완료할 때까지 스레드를 대기시킵니다.
- 라이브 스트림 모드에서 실행하면 얼굴 랜드마크 작업이 반환됩니다. 현재 스레드를 차단하지 않습니다. 그러면 감지 결과를 수신 대기하는 리스너가 입력 프레임에 연결됩니다. 얼굴 랜드마크 작업 시 감지 기능이 호출되는 경우 다른 프레임을 처리 중인 경우 작업은 새 입력 프레임을 무시합니다.
이미지에서 얼굴 랜드마크를 실행하는 전체 예제는 코드 예 참조하세요.
결과 처리 및 표시
얼굴 랜드마크는 각 감지마다 FaceLandmarkerResult
객체를 반환합니다.
실행할 수 있습니다 결과 객체에는 인식된 각 얼굴에 대한 얼굴 메시가 포함되며
좌표입니다. 선택적으로 결과 객체는
얼굴 표정을 나타내는 혼합 형태와
변환 매트릭스를 사용하여 인식된 랜드마크에 얼굴 효과를 적용합니다.
다음은 이 작업의 출력 데이터 예시를 보여줍니다.
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]
...
다음 이미지는 작업 출력을 시각화한 것입니다.
얼굴 랜드마크 도구 예제 코드는 반환된 결과를 표시하는 방법을 보여줍니다. 자세한 내용은 코드 예 참조하세요.