تتيح لك مهمة "أداة رصد الأجسام" من MediaPipe رصد وجود عدة فئات من الأجسام وموقعها الجغرافي. توضّح لك هذه التعليمات كيفية استخدام مهمة "كاشف الأجسام" في Python. يتوفّر مثال الرمز البرمجي الموضّح في هذه التعليمات على GitHub.
يمكنك الاطّلاع على هذه المهمة أثناء تنفيذها من خلال مشاهدة الإصدار التجريبي على الويب. لمزيد من المعلومات عن الإمكانات والنماذج وخيارات الإعداد لهذه المهمة، اطّلِع على نظرة عامة.
مثال على الرمز البرمجي
يقدّم مثال الرمز البرمجي لبرنامج "كاشف الأجسام" تنفيذًا كاملاً لهذه مهمة باستخدام Python، ويمكنك الرجوع إليه. يساعدك هذا الرمز في اختبار هذه المهمة والبدء في إنشاء تطبيقك الخاص لتصنيف النصوص. يمكنك عرض مثال رمز "كاشف الأجسام" وتشغيله وتعديله باستخدام متصفّح الويب فقط.
إذا كنت بصدد تنفيذ ميزة "كاشف الأجسام" لأجهزة Raspberry Pi، يمكنك الرجوع إلى مثال على تطبيق Raspberry Pi.
ضبط إعدادات الجهاز
يوضّح هذا القسم الخطوات الرئيسية لإعداد بيئة التطوير و مشاريع الرموز البرمجية لاستخدام ميزة "كاشف الأجسام" على وجه التحديد. للحصول على معلومات عامة حول إعداد بيئة التطوير لاستخدام مهام MediaPipe، بما في ذلك requirements لإصدار النظام الأساسي، يُرجى الاطّلاع على دليل الإعداد لاستخدام لغة بايثون.
الطرود
تتطلّب مهمة "كاشف الأجسام" حزمة mediapipe 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'
استخدِم المَعلمة BaseOptions
عنصر model_asset_path
لتحديد مسار
النموذج المطلوب استخدامه. للاطّلاع على مثال على الرمز، يُرجى الاطّلاع على القسم التالي.
إنشاء المهمة
استخدِم الدالة create_from_options
لإنشاء المهمة. تقبل الدالة
create_from_options
خيارات الضبط، بما في ذلك وضع
التشغيل ولغة عرض الأسماء والحد الأقصى لعدد النتائج وعتبة الثقة وقائمة السماح
بالفئات وقائمة الرفض. في حال عدم ضبط خيار ضبط،
ستستخدم المهمة القيمة التلقائية. لمزيد من المعلومات حول خيارات الضبط،
يُرجى الاطّلاع على قسم خيارات الضبط.
تتيح مهمة "كاشف الأجسام" استخدام عدة أنواع من بيانات الإدخال: الصور الثابتة وملفات الفيديوهات ومجموعات بث الفيديو المباشر. اختَر علامة التبويب التي تتوافق مع نوع data الإدخال للاطّلاع على كيفية إنشاء المهمة وتنفيذ الاستنتاج.
صورة
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. # ...
للحصول على مثال كامل لإنشاء أداة رصد الأجسام لاستخدامها مع صورة، اطّلِع على مثال على الرمز البرمجي.
خيارات الضبط
تتضمّن هذه المهمة خيارات الضبط التالية لتطبيقات Python:
اسم الخيار | الوصف | نطاق القيمة | القيمة التلقائية |
---|---|---|---|
running_mode |
لضبط وضع التشغيل للمهمة هناك ثلاثة
أوضاع: IMAGE: وضع الإدخالات باستخدام صورة واحدة. VIDEO: وضع الإطارات التي تم فك ترميزها في الفيديو LIVE_STREAM: وضع البث المباشر لبيانات الإدخال ، مثل بيانات الكاميرا في هذا الوضع، يجب استدعاء resultListener لإعداد مستمع لتلقّي النتائج بشكل غير متزامن. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names |
لضبط لغة التصنيفات لاستخدامها في الأسماء المعروضة المقدَّمة في
البيانات الوصفية لنموذج المهمة، في حال توفّرها. القيمة التلقائية هي en لعبارة
English. يمكنك إضافة تصنيفات مترجَمة إلى البيانات الوصفية لنموذج مخصّص
باستخدام واجهة برمجة التطبيقات 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)
للحصول على مثال كامل لاستخدام "أداة رصد الأجسام" على صورة، اطّلِع على مثال الرمز البرمجي لمعرفة التفاصيل.
يُرجى ملاحظة ما يلي:
- عند التشغيل في وضع الفيديو أو وضع البث المباشر، يجب أيضًا تزويد مهمة "كاشف الأجسام" بطابع زمني لإطار الإدخال.
- عند التشغيل في نموذج الصورة أو الفيديو، ستؤدي مهمة "كاشف الأجسام" إلى حظر سلسلة المهام الحالية إلى أن تنتهي من معالجة الصورة أو الإطار المُدخلَين.
- عند التشغيل في وضع البث المباشر، لا تحظر مهمة "كاشف الأجسام" المحادثة الحالية، بل تعود على الفور. سيستدعي مستمع النتائج نتيجة الكشف في كل مرة تنتهي فيها من معالجة ملف إطار الإدخال. إذا تمّ استدعاء الدالة detect عندما تكون مهمة "كاشف الأجسام" مشغولة في معالجة إطار آخر، سيتم تجاهل إطار الإدخال الجديد.
معالجة النتائج وعرضها
عند تنفيذ الاستدلال، تعرض مهمة "كاشف الأجسام" 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
تعرض الصورة التالية عرضًا مرئيًا لمعدّل تكرار المهمة:
يوضّح مثال الرمز البرمجي لبرنامج "كاشف الأجسام" كيفية عرض نتائج الكشف المعروضة من المهمة، اطّلِع على مثال الرمز البرمجي لمعرفة التفاصيل.