دليل اكتشاف علامات الوجه في Python

تتيح لك مهمة MediaPipe Face Builderer اكتشاف معالم الوجه وتعبيرات الوجه في الصور والفيديوهات. يمكنك استخدام هذه المهمة لتحديد تعابير الوجه البشرية وتطبيق فلاتر الوجه والتأثيرات لإنشاء صورة رمزية افتراضية. تستخدم هذه المهمة نماذج التعلم الآلي (ML) التي يمكنها العمل مع الصور الفردية أو التدفق المستمر للصور. وتنتج المهمة معالم ثلاثية الأبعاد للوجه، ودرجات لمزج الأشكال (معاملات تمثل تعبيرات الوجه) لاستنتاج تفاصيل عن أسطح الوجه في الوقت الفعلي، ومصفوفات تحويل لإجراء عمليات التحويل المطلوبة لعرض التأثيرات.

يتوفّر نموذج الرمز البرمجي الموضّح في هذه التعليمات على GitHub. للحصول على مزيد من المعلومات حول الإمكانيات والنماذج وخيارات الإعداد لهذه المهمة، يُرجى الاطّلاع على نظرة عامة.

مثال الرمز البرمجي

يوفر رمز المثال لـ Facemarker تنفيذًا كاملاً لهذه المهمة في بايثون كمرجع لك. تساعدك هذه التعليمات البرمجية في اختبار هذه المهمة والبدء في إنشاء معلم وجه خاص بك. يمكنك عرض مثال رمز Face Marker وتشغيله وتعديله باستخدام متصفح الويب فقط.

إذا كنت تنفذ Face Builderer لـ Raspberry Pi، فراجع نموذج تطبيق Raspberry Pi.

ضبط إعدادات الجهاز

يصف هذا القسم الخطوات الأساسية لإعداد بيئة التطوير الخاصة بك ومشاريع الرموز البرمجية لاستخدام "التعرّف على الوجه" على وجه التحديد. للحصول على معلومات عامة حول إعداد بيئة التطوير لاستخدام مهام MediaPipe، بما في ذلك متطلبات إصدار النظام الأساسي، راجع دليل إعداد Python.

الطرود

تتطلب مهمة MediaPipe Face Builderer حزمة Media تطابق PyPI. يمكنك تثبيت هذه التبعيات واستيرادها باتّباع ما يلي:

$ python -m pip install mediapipe

عمليات الاستيراد

قم باستيراد الفئات التالية للوصول إلى وظائف مهمة Face Signer:

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

الطراز

تتطلب مهمة MediaPipe Face Builderer نموذجًا مدرَّبًا متوافقًا مع هذه المهمة. للحصول على مزيد من المعلومات حول النماذج المدربة المتاحة لأداة Facemarker، راجع نظرة عامة على المهمة في قسم النماذج.

اختَر النموذج ونزِّله، ثم خزِّنه في دليل محلي:

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

يمكنك استخدام معلَمة model_asset_path للسمة BaseOptions لتحديد مسار النموذج المطلوب استخدامه. للاطّلاع على مثال على الرمز البرمجي، راجِع القسم التالي.

إنشاء المهمة

تستخدم مهمة MediaPipe Face Builderer الدالة 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.
  # ...
    

للحصول على مثال كامل لإنشاء أداة "التعرّف على الوجه" لاستخدامها مع صورة، يُرجى الاطّلاع على مثال الرمز.

خيارات الضبط

تتضمن هذه المهمة خيارات التهيئة التالية لتطبيقات بايثون:

اسم الخيار الوصف نطاق القيمة القيمة التلقائية
running_mode تحدِّد هذه السياسة وضع التشغيل للمهمة. هناك ثلاثة أوضاع:

IMAGE: وضع إدخالات الصورة الفردية.

فيديو: وضع لقطات الفيديو التي تم فك ترميزها

البث المباشر: وضع بث مباشر لبيانات الإدخال، مثل الكاميرا. في هذا الوضع، يجب استدعاء resultsListener لإعداد أداة معالجة الصوت لكي تتلقى النتائج بشكل غير متزامن.
{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 يمكنك اختيار ما إذا كانت أداة "التعرّف على الوجه" تُخرج أشكالاً ممزوجة بالوجه. يتم استخدام أشكال مزج الوجوه لعرض نموذج الوجه الثلاثي الأبعاد. Boolean False
output_facial_transformation_matrixes ما إذا كانت FaceLandmarker تُخرج مصفوفة تحويل الوجوه. يستخدم FaceLandmarker المصفوفة لتحويل معالم الوجه من نموذج الوجه الأساسي إلى الوجه الذي تم رصده ليتمكّن المستخدمون من تطبيق التأثيرات على المعالم التي تم اكتشافها. Boolean False
result_callback تعمل هذه السياسة على ضبط أداة معالجة النتائج لتلقّي نتائج المَعلمة بشكل غير متزامن عندما يكون FaceLandmarker في وضع البث المباشر. لا يمكن استخدام هذا الخيار إلا عند ضبط وضع التشغيل على LIVE_STREAM. ResultListener N/A

إعداد البيانات

جهِّز الإدخال كملف صورة أو صفيفة numpy، ثم حوِّلها إلى كائن mediapipe.Image. إذا كان الإدخال ملف فيديو أو بثًا مباشرًا من كاميرا ويب، يمكنك استخدام مكتبة خارجية مثل OpenCV لتحميل إطارات الإدخال على شكل صفيفات numpy.

صورة

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)
    

يُرجى ملاحظة ما يلي:

  • عند تشغيل المحتوى في وضع الفيديو أو في وضع البث المباشر، يجب أيضًا إرسال الطابع الزمني لإطار الإدخال إلى مهمة Face ترغبer.
  • عند تشغيل سلسلة التعليمات في الصورة أو نموذج الفيديو، تحظر مَهمة "التعرّف على الوجه" سلسلة التعليمات الحالية إلى أن تنتهي من معالجة الصورة أو الإطار المُدخل.
  • عند تشغيل مهمة "التعرّف على الوجه" في وضع البث المباشر، تظهر الأداة فورًا بدون حظر سلسلة المحادثات الحالية. وستستدعي مستمع النتيجة مع نتيجة الاكتشاف في كل مرة تنتهي فيها من معالجة إطار إدخال. إذا تم استدعاء وظيفة الكشف عندما تكون مهمة "التعرّف على الوجه" مشغولة بمعالجة إطار آخر، فستتجاهل المهمة إطار الإدخال الجديد.

للحصول على مثال كامل لتشغيل أداة "التعرّف على الوجه" على صورة، راجع مثال الرمز للحصول على التفاصيل.

التعامل مع النتائج وعرضها

تعرض أداة "التعرّف على الوجه" كائن 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 Brander كيفية عرض النتائج التي تم إرجاعها من المهمة. راجع مثال الرمز البرمجي للحصول على التفاصيل.