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

وظیفه تشخیص چهره MediaPipe به شما امکان می دهد چهره ها را در یک تصویر یا ویدیو تشخیص دهید. می توانید از این کار برای تعیین مکان چهره و ویژگی های صورت در یک قاب استفاده کنید. این کار از یک مدل یادگیری ماشینی (ML) استفاده می کند که با تصاویر منفرد یا یک جریان پیوسته از تصاویر کار می کند. این وظیفه مکان‌های صورت را همراه با نکات کلیدی صورت زیر نمایش می‌دهد: چشم چپ، چشم راست، نوک بینی، دهان، تراژیون چشم چپ و تراژیون چشم راست.

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

نمونه کد

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

اگر آشکارساز چهره را برای Raspberry Pi اجرا می‌کنید، به برنامه نمونه Raspberry Pi مراجعه کنید.

برپایی

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

بسته ها

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

$ python -m pip install mediapipe

واردات

برای دسترسی به عملکردهای وظیفه آشکارساز چهره، کلاس‌های زیر را وارد کنید:

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

مدل

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

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

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

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

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

وظیفه MediaPipe Face Detector از تابع create_from_options برای تنظیم کار استفاده می کند. تابع create_from_options مقادیری را برای گزینه‌های پیکربندی می‌پذیرد. برای اطلاعات بیشتر در مورد گزینه های پیکربندی، گزینه های پیکربندی را ببینید.

کد زیر نحوه ساخت و پیکربندی این وظیفه را نشان می دهد.

این نمونه‌ها همچنین تغییرات ساخت کار را برای تصاویر، فایل‌های ویدیویی و پخش زنده نشان می‌دهند.

تصویر

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
FaceDetector = mp.tasks.vision.FaceDetector
FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a face detector instance with the image mode:
options = FaceDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE)
with FaceDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

ویدئو

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
FaceDetector = mp.tasks.vision.FaceDetector
FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a face detector instance with the video mode:
options = FaceDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.VIDEO)
with FaceDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

پخش زنده

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
FaceDetector = mp.tasks.vision.FaceDetector
FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions
FaceDetectorResult = mp.tasks.vision.FaceDetectorResult
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a face detector instance with the live stream mode:
def print_result(result: FaceDetectorResult, output_image: mp.Image, timestamp_ms: int):
    print('face detector result: {}'.format(result))

options = FaceDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.LIVE_STREAM,
    result_callback=print_result)
with FaceDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

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

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

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

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

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

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

LIVE_STREAM: حالت پخش زنده داده های ورودی، مانند دوربین. در این حالت، resultListener باید فراخوانی شود تا شنونده ای را برای دریافت نتایج به صورت ناهمزمان تنظیم کند.
{ IMAGE, VIDEO, LIVE_STREAM } IMAGE
min_detection_confidence حداقل امتیاز اطمینان برای تشخیص چهره موفق در نظر گرفته شود. Float [0,1] 0.5
min_suppression_threshold حداقل آستانه غیر حداکثری سرکوب برای تشخیص چهره که باید همپوشانی در نظر گرفته شود. Float [0,1] 0.3
result_callback شنونده نتیجه را طوری تنظیم می کند که وقتی آشکارساز چهره در حالت پخش زنده است، نتایج تشخیص را به صورت ناهمزمان دریافت کند. فقط زمانی قابل استفاده است که حالت اجرا روی LIVE_STREAM تنظیم شده باشد. N/A Not set

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

ورودی خود را به عنوان یک فایل تصویری یا یک آرایه 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 Detector از توابع detect , detect_for_video و detect_async برای استنتاج استفاده می کند. برای تشخیص چهره، این شامل پیش پردازش داده های ورودی و تشخیص چهره در تصویر است.

کد زیر نحوه اجرای پردازش با مدل وظیفه را نشان می دهد.

تصویر

# Perform face detection on the provided single image.
# The face detector must be created with the image mode.
face_detector_result = detector.detect(mp_image)
    

ویدئو

# Perform face detection on the provided single image.
# The face detector must be created with the video mode.
face_detector_result = detector.detect_for_video(mp_image, frame_timestamp_ms)
    

پخش زنده

# Send live image data to perform face detection.
# The results are accessible via the `result_callback` provided in
# the `FaceDetectorOptions` object.
# The face detector must be created with the live stream mode.
detector.detect_async(mp_image, frame_timestamp_ms)
    

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

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

برای مثال کامل اجرای یک آشکارساز چهره روی یک تصویر، برای جزئیات به مثال کد مراجعه کنید.

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

Face Detector یک شی FaceDetectorResult را برای هر اجرای تشخیص برمی‌گرداند. شی نتیجه شامل کادرهای محدود کننده برای چهره های شناسایی شده و یک امتیاز اطمینان برای هر چهره شناسایی شده است.

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

FaceDetectionResult:
  Detections:
    Detection #0:
      BoundingBox:
        origin_x: 126
        origin_y: 100
        width: 463
        height: 463
      Categories:
        Category #0:
          index: 0
          score: 0.9729152917861938
      NormalizedKeypoints:
        NormalizedKeypoint #0:
          x: 0.18298381567001343
          y: 0.2961040139198303
        NormalizedKeypoint #1:
          x: 0.3302789330482483
          y: 0.29289937019348145
        ... (6 keypoints for each face)
    Detection #1:
      BoundingBox:
        origin_x: 616
        origin_y: 193
        width: 430
        height: 430
      Categories:
        Category #0:
          index: 0
          score: 0.9251380562782288
      NormalizedKeypoints:
        NormalizedKeypoint #0:
          x: 0.6151331663131714
          y: 0.3713381886482239
        NormalizedKeypoint #1:
          x: 0.7460576295852661
          y: 0.38825345039367676
        ... (6 keypoints for each face)

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

برای تصویر بدون کادرهای مرزبندی، تصویر اصلی را ببینید.

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