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

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

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

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

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

في حال تطبيق ميزة "التعرّف على الوجه" في تطبيق Raspberry Pi، يمكنك الرجوع إلى مثال على Raspberry Pi التطبيق.

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

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

الطرود

تتطلب مهمة MediaPipe Face Detector وجود حزمة Mediapi 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'

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

إنشاء المهمة

تستخدم مهمة "أداة رصد الوجوه 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.
  # ...
    

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

خيارات الإعداد

تشتمل هذه المهمة على خيارات الإعداد التالية لتطبيقات بايثون:

اسم الخيار الوصف نطاق القيمة القيمة الافتراضية
running_mode لضبط وضع التشغيل للمهمة. هناك ثلاثة وسائل النقل:

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

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

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)

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

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

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