دليل الكشف عن الكائنات في بايثون

تتيح لك مهمة أداة كشف عناصر MediaPipe اكتشاف وجود وفئات الكائنات. توضّح لك هذه التعليمات طريقة استخدام جهاز رصد الأجسام. مهمة في بايثون. يتوفر مثال الرمز الموضَّح في هذه التعليمات على GitHub.

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

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

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

في حالة تنفيذ أداة كشف الكائنات في Raspberry Pi، راجع مثال على Raspberry Pi التطبيق.

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

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

الطرود

تتطلب مهمة "أداة الكشف عن الكائنات" حزمة Mediapi pip. يمكنك تثبيت الحزم المطلوبة بالأوامر التالية:

$ 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/lite-model_efficientdet_lite0_detection_metadata_1.tflite'

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

إنشاء المهمة

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

تتوافق مهمة "أداة كشف الكائنات" مع العديد من أنواع بيانات الإدخال: الصور الثابتة والفيديو. الملفات وعمليات بث الفيديو المباشر. اختيار علامة التبويب المقابلة لبيانات الإدخال لمعرفة كيفية إنشاء المهمة وتنفيذ الاستنتاج.

صورة

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ObjectDetector = mp.tasks.vision.ObjectDetector
ObjectDetectorOptions = mp.tasks.vision.ObjectDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = ObjectDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=VisionRunningMode.IMAGE)

with ObjectDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

فيديو

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ObjectDetector = mp.tasks.vision.ObjectDetector
ObjectDetectorOptions = mp.tasks.vision.ObjectDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = ObjectDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=VisionRunningMode.VIDEO)

with ObjectDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

بث مباشر

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
DetectionResult = mp.tasks.components.containers.detections.DetectionResult
ObjectDetector = mp.tasks.vision.ObjectDetector
ObjectDetectorOptions = mp.tasks.vision.ObjectDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

def print_result(result: DetectionResult, output_image: mp.Image, timestamp_ms: int):
    print('detection result: {}'.format(result))

options = ObjectDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    running_mode=VisionRunningMode.LIVE_STREAM,
    max_results=5,
    result_callback=print_result)

with ObjectDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

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

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

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

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

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

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

LIVE_STREAM: وضع البث المباشر للإدخال البيانات، مثل تلك الواردة من الكاميرا. في هذا الوضع، يجب أن يكون resultListener يتم استدعاءها لإعداد مستمع للحصول على النتائج بشكل غير متزامن.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
display_names لتعيين لغة التسميات لاستخدامها في الأسماء المعروضة المقدمة في بيانات التعريف لنموذج المهمة، إن وجد. القيمة التلقائية هي en لمدة الإنجليزية. يمكنك إضافة تصنيفات مترجَمة إلى البيانات الوصفية لنموذج مخصّص. باستخدام TensorFlow Lite Metadata Writer API رمز اللغة en
max_results يتم ضبط الحد الأقصى الاختياري لنتائج رصد أعلى الدرجات على إرجاع. أي أرقام موجبة -1 (تمّ عرض جميع النتائج)
score_threshold لتعيين الحد الأدنى لنتيجة التنبؤ الذي يلغي الحد المقدم في بيانات التعريف للنموذج (إن وجدت). يتم رفض النتائج التي تكون أدنى من هذه القيمة. أي عدد عائم لم يتم ضبط الوضع
category_allowlist تضبط هذه السياسة القائمة الاختيارية لأسماء الفئات المسموح بها. إذا لم تكن فارغة، نتائج الرصد التي ليس فيها اسم الفئة في هذه المجموعة: بفلترته. ويتم تجاهل أسماء الفئات المكرّرة أو غير المعروفة. لا يمكن لأحد الطرفين استخدام هذا الخيار إلا بعد استخدام category_denylist. يؤدي كلا الخيارين إلى خطأ. أي سلاسل لم يتم ضبط الوضع
category_denylist تحدِّد هذه السياسة القائمة الاختيارية لأسماء الفئات غير المسموح بها. في حال حذف نتائج الكشف غير الفارغة، التي يوجد اسم فئته بها في هذه المجموعة ستتم تصفيتها . ويتم تجاهل أسماء الفئات المكرّرة أو غير المعروفة. يتوفّر هذا الخيار حصرية مع category_allowlist واستخدام النتيجتين معًا إلى حدوث خطأ. أي سلاسل لم يتم ضبط الوضع

تجهيز البيانات

قم بإعداد الإدخال كملف صورة أو صفيفة 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)
    

تنفيذ المهمة

يمكنك استدعاء إحدى دوال الكشف لتشغيل الاستنتاجات. الكائن ستعرض مهمة أداة الرصد العناصر التي يتم رصدها داخل الصورة أو الإطار الذي تم إدخاله.

صورة

# Perform object detection on the provided single image.
detection_result = detector.detect(mp_image)
    

فيديو

# Calculate the timestamp of the current frame
frame_timestamp_ms = 1000 * frame_index / video_file_fps

# Perform object detection on the video frame.
detection_result = detector.detect_for_video(mp_image, frame_timestamp_ms)
    

بث مباشر

# Send the latest frame to perform object detection.
# Results are sent to the `result_callback` provided in the `ObjectDetectorOptions`.
detector.detect_async(mp_image, frame_timestamp_ms)
    

للاطّلاع على مثال كامل لتشغيل جهاز كشف الكائنات على صورة، راجع مثال على الرمز لمعرفة التفاصيل.

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

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

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

عند تشغيل الاستنتاج، تعرض مهمة "اكتشاف الكائنات" عنصر ObjectDetectionResult يصف الكائنات التي تم العثور عليها صورة الإدخال.

في ما يلي مثال على بيانات الإخراج من هذه المهمة:

ObjectDetectorResult:
 Detection #0:
  Box: (x: 355, y: 133, w: 190, h: 206)
  Categories:
   index       : 17
   score       : 0.73828
   class name  : dog
 Detection #1:
  Box: (x: 103, y: 15, w: 138, h: 369)
  Categories:
   index       : 17
   score       : 0.73047
   class name  : dog

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

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