دليل تصنيف الصور في Python

تتيح لك مهمة مصنِّف صور MediaPipe تصنيف الصور. يمكنك استخدام هذه المهمة لتحديد ما تمثله الصورة بين مجموعة من الفئات المحددة في وقت التدريب. توضّح لك هذه التعليمات كيفية استخدام "مصنِّف الصور". في لغة بايثون.

يمكنك رؤية هذه المهمة وهي قيد التنفيذ من خلال عرض صفحة الويب تجريبي. بالنسبة مزيد من المعلومات حول الإمكانات والنماذج وخيارات التهيئة هذه المهمة، راجع نظرة عامة.

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

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

إذا كنت تستخدم "مصنِّف الصور" في Raspberry Pi، راجِع قسم مثال على Raspberry Pi التطبيق.

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

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

الطرود

يقوم مصنف الصورة بمهمة حزمة Mediapip pip. يمكنك تثبيت مع ما يلي:

$ python -m pip install mediapipe
``` ### Imports

Import the following classes to access the Image Classifier task functions:

```python
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

الطراز

تتطلب مهمة مصنِّف صور MediaPipe نموذجًا مدرَّبًا متوافقًا مع هذه المهمة. لمزيد من المعلومات حول النماذج المدرَّبة المتاحة في "أداة تصنيف الصور"، يُرجى الاطّلاع على نظرة عامة على المهمة قسم النماذج.

اختَر نموذجًا ونزِّله ثم خزِّنه في دليل محلي. يمكنك استخدام الموصى بها EfficientNet-Lite0 الأمثل.

model_path = '/absolute/path/to/efficientnet_lite0_int8_2.tflite'

حدّد مسار النموذج ضمن معلمة اسم النموذج، كما هو موضح أدناه:

base_options = BaseOptions(model_asset_path=model_path)

إنشاء المهمة

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

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

صورة

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ImageClassifier = mp.tasks.vision.ImageClassifier
ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions
VisionRunningMode = mp.tasks.vision.RunningMode

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

with ImageClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

فيديو

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ImageClassifier = mp.tasks.vision.ImageClassifier
ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions
VisionRunningMode = mp.tasks.vision.RunningMode

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

with ImageClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

بث مباشر

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ImageClassifierResult = mp.tasks.vision.ImageClassifier.ImageClassifierResult
ImageClassifier = mp.tasks.vision.ImageClassifier
ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions
VisionRunningMode = mp.tasks.vision.RunningMode

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

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

with ImageClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

للاطّلاع على مثال كامل لإنشاء "مصنِّف صور" للاستخدام مع صورة، يُرجى مراجعة الرمز مثال.

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

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

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

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

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

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

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

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

تنفيذ المهمة

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

صورة

# Perform image classification on the provided single image.
classification_result = classifier.classify(mp_image)
    

فيديو

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

# Perform image classification on the video frame.
classification_result = classifier.classify_for_video(mp_image, frame_timestamp_ms)
    

بث مباشر

# Send the latest frame to perform image classification.
# Results are sent to the `result_callback` provided in the `ImageClassifierOptions`.
classifier.classify_async(mp_image, frame_timestamp_ms)
    

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

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

للاطّلاع على مثال كامل لإنشاء "مصنِّف صور" للاستخدام مع صورة، يُرجى مراجعة الرمز مثال.

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

عند تنفيذ الاستنتاج، تعرض مهمة مصنف الصور عنصر ImageClassifierResult الذي يحتوي على قائمة الفئات المحتملة للكائنات داخل الصورة أو الإطار المُدخل.

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

ImageClassifierResult:
 Classifications #0 (single classification head):
  head index: 0
  category #0:
   category name: "/m/01bwb9"
   display name: "Passer domesticus"
   score: 0.91406
   index: 671
  category #1:
   category name: "/m/01bwbt"
   display name: "Passer montanus"
   score: 0.00391
   index: 670

تم الحصول على هذه النتيجة من خلال تنفيذ مصنِّف الطيور. عَلَى:

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