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

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

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

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

يوفر مثال الرمز الخاص بأداة "التعرّف على الوجه" تنفيذًا كاملاً لهذه الطريقة المهمة في لغة بايثون كمرجع لك. يساعدك هذا الرمز في اختبار هذه المهمة والحصول على وبدأت في بناء معلم وجهك الخاص. يمكنك عرض وتشغيلها وتعديلها مثال على أداة ترميز الوجه الرمز باستخدام متصفح الويب فقط.

إذا كنت بصدد تنفيذ "Face Galleryer" لـ Raspberry Pi، راجع مثال على Raspberry Pi التطبيق.

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

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

الطرود

تتطلب مهمة MediaPipe Face Analysiser حزمة MediaPI pyPI. يمكنك تثبيت استيراد هذه التبعيات مع ما يلي:

$ python -m pip install mediapipe

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

استورِد الفئات التالية للوصول إلى وظائف "أداة التعرّف على الوجه":

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

الطراز

تتطلب مهمة MediaPipe Face Premierer نموذجًا مدرّبًا ومتوافقًا مع هذه العملية. المهمة. لمزيد من المعلومات عن النماذج المدرَّبة المتاحة لاستخدام ميزة "التعرّف على الوجه"، يُرجى الاطّلاع على نظرة عامة على المهمة قسم النماذج.

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

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

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

إنشاء المهمة

تستخدم مهمة MediaPipe Face Premierer الوظيفة 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: وضع إدخالات الصورة الفردية

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

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 ما إذا كانت أداة "التعرُّف على الوجه" تُخرج أشكال مزج الوجه. يتم استخدام أشكال مزج الوجه لعرض نموذج الوجه الثلاثي الأبعاد. 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)
    

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

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

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

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

تعرض أداة "التعرُّف على الوجه" كائن 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]
    ...

تُظهر الصورة التالية تصورًا لنتج المهمة:

يوضح مثال رمز "أداة ترميز الوجه" طريقة عرض النتائج التي تم عرضها. من المهمة، راجع الرمز مثال لمزيد من التفاصيل.