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

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

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

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

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

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

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

حزم JavaScript

يتوفّر رمز مصنِّف الصور من خلال حزمة @mediapipe/tasks-vision NPM من MediaPipe. يمكنك العثور على هذه المكتبات وتنزيلها من الروابط المتوفرة في دليل الإعداد الخاص بالنظام الأساسي.

يمكنك تثبيت الحِزم المطلوبة بالرمز البرمجي التالي للمراحل المحلية باستخدام الأمر التالي:

npm install @mediapipe/tasks-vision

إذا كنت ترغب في استيراد رمز المهمة عبر خدمة شبكة توصيل المحتوى (CDN)، أضف الرمز التالي في العلامة في ملف HTML لديك:

<!-- You can replace JSDeliver with another CDN if you prefer to -->
<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
    crossorigin="anonymous"></script>
</head>

الطراز

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

حدد نموذجًا ونزّله ثم خزّنه في دليل المشروع:

<dev-project-root>/app/shared/models/

إنشاء المهمة

استخدِم إحدى وظائف "مصنِّف الصور" createFrom...() لإعداد مهمة تطبيق الاستنتاجات. استخدِم الدالة createFromModelPath() مع مسار نسبي أو مطلق لملف النموذج المدرَّب. إذا سبق أن تم تحميل النموذج في الذاكرة، يمكنك استخدام الطريقة createFromModelBuffer().

يوضح مثال الرمز التالي استخدام الدالة createFromOptions() لإعداد المهمة. تتيح لك الدالة createFromOptions تخصيص مصنِّف الصور باستخدام خيارات الضبط. لمزيد من المعلومات حول خيارات الضبط، يمكنك الاطّلاع على خيارات الضبط.

يوضح الرمز التالي كيفية إنشاء المهمة وإعدادها باستخدام خيارات مخصصة:

async function createImageClassifier {
  const vision = await FilesetResolver.forVisionTasks(
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm"
  );
  imageClassifier = await ImageClassifier.createFromOptions(vision, {
    baseOptions: {
      modelAssetPath: `https://storage.googleapis.com/mediapipe-models/image_classifier/efficientnet_lite0/float32/1/efficientnet_lite0.tflite`
    },
  });
}

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

تتضمّن هذه المهمة خيارات الضبط التالية لتطبيقات الويب:

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

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

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

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

يمكن لمصنِّف الصور تصنيف العناصر في الصور بأي تنسيق متوافق مع متصفّح المضيف. تعالج المهمة أيضًا المعالجة المسبقة لإدخال البيانات، بما في ذلك تغيير الحجم والتدوير وتسوية القيمة.

يتم تشغيل الطلبات إلى طريقتَي "مصنِّف الصور" classify() و"classifyForVideo()" بشكل متزامن، وتحظر سلسلة واجهة المستخدم. إذا صنّفت الكائنات في إطارات الفيديو من كاميرا الجهاز، سيؤدي كل تصنيف إلى حظر سلسلة التعليمات الرئيسية. ويمكنك منع ذلك من خلال تنفيذ العاملين على الويب لتشغيل classify() وclassifyForVideo() في سلسلة محادثات أخرى.

تنفيذ المهمة

يستخدم مصنِّف الصور طريقة classify() مع وضع الصور والطريقة classifyForVideo() مع وضع video لعرض الاستنتاجات. ستعرض Image Classifier API الفئات المحتملة للكائنات داخل صورة الإدخال.

يوضح الرمز البرمجي التالي كيفية تنفيذ المعالجة باستخدام نموذج المهمة:

صورة

const image = document.getElementById("image") as HTMLImageElement;
const imageClassifierResult = imageClassifier.classify(image);

فيديو

const video = document.getElementById("video");
await imageClassifier.setOptions({ runningMode: "VIDEO" });

const timestamp = performance.now();
const classificationResult = await imageClassifier.classifyForVideo(
    video,
    timestamp
  );

لتنفيذ مهمة "مصنِّف الصور" بشكل أكثر اكتمالاً، يُرجى الاطّلاع على مثال الرمز البرمجي).

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

عند تنفيذ الاستنتاج، تعرض مهمة "مصنِّف الصور" كائن 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

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

يوضّح رمز نموذج "مصنِّف الصور" طريقة عرض نتائج التصنيف التي تم عرضها من المهمة. راجِع مثال الرمز البرمجي لمعرفة التفاصيل.