دليل التعرّف على الوجوه في لغة بايثون

تتيح لك مهمة "مُعترِف الوجوه" من MediaPipe رصد الوجوه في صورة أو فيديو. يمكنك استخدام هذه المهمة لتحديد موقع الوجوه وملامح الوجه في إطار معيّن. تستخدِم هذه المهمة نموذجًا لتعلُّم الآلة يعمل مع صور فردية أو مجرى متواصل من الصور. تُخرج المهمة مواقع الوجوه، بالإضافة إلى النقاط الرئيسية التالية للوجه: العين اليسرى والعين اليمنى وطرف الأنف والفم ونقطة تراجيديون للعين اليسرى ونقطة تراجيديون للعين اليمنى.

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

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

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

إذا كنت بصدد تنفيذ ميزة "مُعترِف الوجوه" لأجهزة Raspberry Pi، يُرجى الرجوع إلى مثال على تطبيق Raspberry Pi.

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

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

الطرود

تتطلّب مهمة "كاشف الوجوه" من MediaPipe حزمة 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 الدالة 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.
  # ...
    

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

خيارات الضبط

تتضمّن هذه المهمة خيارات الضبط التالية لتطبيقات Python:

اسم الخيار الوصف نطاق القيمة القيمة التلقائية
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 لتحميل لقطات الإدخال كصفائف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 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)
    

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

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

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

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

يعرض "كاشف الوجوه" عنصرًا من النوع 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)

تعرض الصورة التالية عرضًا مرئيًا لمعدّل تكرار المهمة:

طفلان مع مربّعات حدودية حول وجهيهما

للاطّلاع على الصورة بدون مربّعات الحدود، راجِع الصورة الأصلية.

يوضّح مثال الرمز البرمجي لـ "كاشف الوجوه" كيفية عرض النتائج التي تم إرجاعها من المهمة، اطّلِع على مثال الرمز البرمجي للحصول على التفاصيل.