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

تتيح لك مهمة MediaPipe اكتشاف الوجوه في صورة أو فيديو. يمكنك استخدام هذه المهمة لتحديد موقع الوجوه وملامح الوجه داخل الإطار. تستخدم هذه المهمة نموذج التعلم الآلي (ML) الذي يعمل مع الصور الفردية أو التدفق المستمر للصور. وتؤدي المهمة إلى إخراج مواقع الوجه، بالإضافة إلى النقاط الرئيسية للوجه التالية: العين اليسرى، والعين اليمنى، وطرف الأنف، والفم، وإراحة العين اليسرى، وجرح العين اليمنى.

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

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

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

إذا كنت تريد تنفيذ أداة التعرّف على الوجوه لـ Raspberry Pi، فراجع نموذج تطبيق Raspberry Pi.

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

يصف هذا القسم الخطوات الأساسية لإعداد بيئة التطوير ومشاريع الرموز على وجه التحديد لاستخدام ميزة "التعرّف على الوجه". للحصول على معلومات عامة حول إعداد بيئة التطوير لاستخدام مهام 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 Face Detector نموذجًا مدرَّبًا متوافقًا مع هذه المهمة. للحصول على مزيد من المعلومات حول النماذج المدربة المتاحة لاستخدام أداة "التعرّف على الوجوه"، يُرجى الاطّلاع على قسم الطُرز نظرة عامة على المهمة.

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

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

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

إنشاء المهمة

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

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

البث المباشر: وضع بث مباشر لبيانات الإدخال، مثل الكاميرا. في هذا الوضع، يجب استدعاء resultsListener لإعداد أداة معالجة الصوت لكي تتلقى النتائج بشكل غير متزامن.
{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)

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

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

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