راهنمای تشخیص چهره برای پایتون

وظیفه MediaPipe Face Landmarker به شما امکان می دهد نشانه های چهره و حالات چهره را در تصاویر و ویدیوها تشخیص دهید. شما می توانید از این کار برای شناسایی حالات چهره انسان و اعمال فیلترها و افکت های صورت برای ایجاد یک آواتار مجازی استفاده کنید. این کار از مدل‌های یادگیری ماشینی (ML) استفاده می‌کند که می‌توانند با تصاویر منفرد یا جریان مداوم تصاویر کار کنند. این کار، نشانه‌های سه بعدی چهره، امتیازهای ترکیبی (ضرایبی که بیانگر حالت چهره است) برای استنتاج جزئیات سطوح صورت در زمان واقعی، و ماتریس‌های تبدیل برای انجام دگرگونی‌های مورد نیاز برای رندر افکت‌ها را خروجی می‌دهد.

نمونه کد شرح داده شده در این دستورالعمل ها در GitHub موجود است. برای اطلاعات بیشتر در مورد قابلیت‌ها، مدل‌ها و گزینه‌های پیکربندی این کار، به نمای کلی مراجعه کنید.

نمونه کد

کد مثال برای Face Landmarker اجرای کامل این کار را در پایتون برای مرجع شما فراهم می کند. این کد به شما کمک می کند این کار را آزمایش کنید و شروع به ساختن نشانگر چهره خود کنید. می‌توانید کد نمونه Face Landmarker را فقط با استفاده از مرورگر وب خود مشاهده، اجرا و ویرایش کنید.

اگر از Face Landmarker برای Raspberry Pi استفاده می کنید، به برنامه نمونه Raspberry Pi مراجعه کنید.

راه اندازی

این بخش مراحل کلیدی را برای راه‌اندازی محیط توسعه و پروژه‌های کد مخصوصاً برای استفاده از Face Landmarker توضیح می‌دهد. برای اطلاعات کلی در مورد تنظیم محیط توسعه خود برای استفاده از وظایف MediaPipe، از جمله الزامات نسخه پلت فرم، به راهنمای راه اندازی برای Python مراجعه کنید.

بسته ها

وظیفه MediaPipe Face Landmarker به بسته mediapipe PyPI نیاز دارد. شما می توانید این وابستگی ها را با موارد زیر نصب و وارد کنید:

$ python -m pip install mediapipe

واردات

برای دسترسی به توابع وظیفه Face Landmarker، کلاس‌های زیر را وارد کنید:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

مدل

وظیفه MediaPipe Face Landmarker به یک مدل آموزش دیده نیاز دارد که با این کار سازگار باشد. برای اطلاعات بیشتر در مورد مدل‌های آموزش‌دیده موجود برای Face Landmarker، بخش مدل‌های نمای کلی کار را ببینید.

مدل را انتخاب و دانلود کنید و سپس آن را در یک فهرست محلی ذخیره کنید:

model_path = '/absolute/path/to/face_landmarker.task'

برای تعیین مسیر مدل مورد استفاده از پارامتر شیء BaseOptions model_asset_path استفاده کنید. برای مثال کد، بخش بعدی را ببینید.

کار را ایجاد کنید

وظیفه MediaPipe Face Landmarker از تابع 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.
  # ...
    

برای مثال کاملی از ایجاد Face Landmarker برای استفاده با یک تصویر، به مثال کد مراجعه کنید.

گزینه های پیکربندی

این کار دارای گزینه های پیکربندی زیر برای برنامه های پایتون است:

نام گزینه توضیحات محدوده ارزش مقدار پیش فرض
running_mode حالت اجرا را برای کار تنظیم می کند. سه حالت وجود دارد:

IMAGE: حالت برای ورودی های تک تصویر.

VIDEO: حالت برای فریم های رمزگشایی شده یک ویدیو.

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 آیا Face Landmarker ترکیب‌بندی چهره را خروجی می‌دهد. ترکیب صورت برای رندر کردن مدل چهره سه بعدی استفاده می شود. Boolean False
output_facial_transformation_matrixes آیا FaceLandmarker ماتریس تبدیل چهره را خروجی می دهد یا خیر. FaceLandmarker از ماتریس برای تبدیل نشانه‌های چهره از یک مدل چهره متعارف به چهره شناسایی‌شده استفاده می‌کند، بنابراین کاربران می‌توانند افکت‌ها را روی نشانه‌های شناسایی شده اعمال کنند. Boolean False
result_callback شنونده نتیجه را طوری تنظیم می کند که وقتی FaceLandmarker در حالت پخش زنده است، نتایج نشانگر را به صورت ناهمزمان دریافت کند. فقط زمانی قابل استفاده است که حالت اجرا روی LIVE_STREAM تنظیم شده باشد ResultListener N/A

داده ها را آماده کنید

ورودی خود را به عنوان یک فایل تصویری یا یک آرایه numpy آماده کنید، سپس آن را به یک شی mediapipe.Image تبدیل کنید. اگر ورودی شما یک فایل ویدیویی یا پخش زنده از یک وب کم است، می توانید از یک کتابخانه خارجی مانند 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)
    

وظیفه را اجرا کنید

Face Landmarker از توابع 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)
    

به موارد زیر توجه کنید:

  • هنگام اجرا در حالت ویدیو یا حالت پخش زنده، همچنین به وظیفه Face Landmarker مهر زمانی فریم ورودی را ارائه دهید.
  • هنگامی که در تصویر یا مدل ویدیو اجرا می شود، وظیفه Face Landmarker رشته فعلی را مسدود می کند تا زمانی که پردازش تصویر یا فریم ورودی به پایان برسد.
  • هنگامی که در حالت پخش زنده اجرا می شود، وظیفه Face Landmarker بلافاصله برمی گردد و رشته فعلی را مسدود نمی کند. هر بار که پردازش یک فریم ورودی را تمام می کند، شنونده نتیجه را با نتیجه تشخیص فراخوانی می کند. اگر زمانی که وظیفه Face Landmarker مشغول پردازش فریم دیگری است، تابع تشخیص فراخوانی شود، کار کادر ورودی جدید را نادیده می گیرد.

برای مثال کامل اجرای Face Landmarker روی یک تصویر، برای جزئیات به مثال کد مراجعه کنید.

کنترل و نمایش نتایج

Face Landmarker یک شی 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]
    ...

تصویر زیر تصویری از خروجی کار را نشان می دهد:

کد نمونه Face Landmarker نحوه نمایش نتایج بازگشتی از کار را نشان می دهد، برای جزئیات به مثال کد مراجعه کنید.