دمج أدوات رصد الكائنات

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

استخدام واجهة برمجة تطبيقات ObjectDetector لمكتبة المهام لتفعيل أدوات رصد العناصر المخصّصة أو مُدرَّبة مسبقًا على تطبيقات الأجهزة الجوّالة

الميزات الرئيسية لواجهة برمجة التطبيقات ObjectDetector

  • معالجة الصور المدخلة، بما في ذلك التدوير وتغيير الحجم ومساحة اللون تحويل.

  • تصنيف لغة الخريطة.

  • الحد الأدنى للنتيجة لفلترة النتائج.

  • نتائج رصد أعلى ترتيب

  • القائمة المسموح بها للتصنيفات وقائمة الحظر.

النماذج المتوافقة مع أدوات رصد الأجسام

نؤكّد أنّ النماذج التالية متوافقة مع ObjectDetector. واجهة برمجة التطبيقات.

تنفيذ الاستنتاج باستخدام Java

يمكنك الاطّلاع على التطبيق المرجعي لميزة "رصد العناصر" للاطّلاع على مثال حول كيفية استخدام "ObjectDetector" في تطبيق Android.

الخطوة 1: استيراد تبعية Gradle والإعدادات الأخرى

انسخ ملف النموذج .tflite إلى دليل مواد العرض في وحدة Android. ومكان تطبيق النموذج. حدِّد أنّه يجب عدم ضغط الملف. إضافة مكتبة TensorFlow Lite إلى ملف build.gradle الخاص بالوحدة:

android {
    // Other settings

    // Specify tflite file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }
}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-vision'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin'
}

الخطوة 2: استخدام النموذج

// Initialization
ObjectDetectorOptions options =
    ObjectDetectorOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setMaxResults(1)
        .build();
ObjectDetector objectDetector =
    ObjectDetector.createFromFileAndOptions(
        context, modelFile, options);

// Run inference
List<Detection> results = objectDetector.detect(image);

يمكنك الاطّلاع على الرمز المصدر وJavadoc لمزيد من الخيارات لضبط ObjectDetector.

تنفيذ الاستنتاج في نظام iOS

الخطوة 1: تثبيت الاعتماديات

تتيح مكتبة المهام إمكانية التثبيت باستخدام CocoaPods. تأكَّد من أنّ بيانات CocoaPods مثبت على نظامك. يُرجى الاطّلاع على دليل تثبيت CocoaPods للحصول على التعليمات.

يُرجى الاطّلاع على دليل CocoaPods لـ تفاصيل حول إضافة مجموعات لوحات إلى مشروع Xcode.

أضِف لوحة TensorFlowLiteTaskVision في Podfile.

target 'MyAppWithTaskAPI' do
  use_frameworks!
  pod 'TensorFlowLiteTaskVision'
end

احرص على أن يكون النموذج .tflite الذي ستستخدمه للاستنتاج متاحًا في حِزمة تطبيقك.

الخطوة 2: استخدام النموذج

Swift

// Imports
import TensorFlowLiteTaskVision

// Initialization
guard let modelPath = Bundle.main.path(forResource: "ssd_mobilenet_v1",
                                            ofType: "tflite") else { return }

let options = ObjectDetectorOptions(modelPath: modelPath)

// Configure any additional options:
// options.classificationOptions.maxResults = 3

let detector = try ObjectDetector.detector(options: options)

// Convert the input image to MLImage.
// There are other sources for MLImage. For more details, please see:
// https://developers.google.com/ml-kit/reference/ios/mlimage/api/reference/Classes/GMLImage
guard let image = UIImage (named: "cats_and_dogs.jpg"), let mlImage = MLImage(image: image) else { return }

// Run inference
let detectionResult = try detector.detect(mlImage: mlImage)

Objective-C

// Imports
#import <TensorFlowLiteTaskVision/TensorFlowLiteTaskVision.h>

// Initialization
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"ssd_mobilenet_v1" ofType:@"tflite"];

TFLObjectDetectorOptions *options = [[TFLObjectDetectorOptions alloc] initWithModelPath:modelPath];

// Configure any additional options:
// options.classificationOptions.maxResults = 3;

TFLObjectDetector *detector = [TFLObjectDetector objectDetectorWithOptions:options
                                                                     error:nil];

// Convert the input image to MLImage.
UIImage *image = [UIImage imageNamed:@"dogs.jpg"];

// There are other sources for GMLImage. For more details, please see:
// https://developers.google.com/ml-kit/reference/ios/mlimage/api/reference/Classes/GMLImage
GMLImage *gmlImage = [[GMLImage alloc] initWithImage:image];

// Run inference
TFLDetectionResult *detectionResult = [detector detectWithGMLImage:gmlImage error:nil];

يمكنك الاطّلاع على رمز المصدر لمزيد من الخيارات لضبط TFLObjectDetector.

تنفيذ الاستنتاج في بايثون

الخطوة 1: تثبيت حزمة pip

pip install tflite-support

الخطوة 2: استخدام النموذج

# Imports
from tflite_support.task import vision
from tflite_support.task import core
from tflite_support.task import processor

# Initialization
base_options = core.BaseOptions(file_name=model_path)
detection_options = processor.DetectionOptions(max_results=2)
options = vision.ObjectDetectorOptions(base_options=base_options, detection_options=detection_options)
detector = vision.ObjectDetector.create_from_options(options)

# Alternatively, you can create an object detector in the following manner:
# detector = vision.ObjectDetector.create_from_file(model_path)

# Run inference
image = vision.TensorImage.create_from_file(image_path)
detection_result = detector.detect(image)

يمكنك الاطّلاع على رمز المصدر لمزيد من الخيارات لضبط ObjectDetector.

تنفيذ الاستنتاج بلغة C++

// Initialization
ObjectDetectorOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
std::unique_ptr<ObjectDetector> object_detector = ObjectDetector::CreateFromOptions(options).value();

// Create input frame_buffer from your inputs, `image_data` and `image_dimension`.
// See more information here: tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.h
std::unique_ptr<FrameBuffer> frame_buffer = CreateFromRgbRawBuffer(
      image_data, image_dimension);

// Run inference
const DetectionResult result = object_detector->Detect(*frame_buffer).value();

يمكنك الاطّلاع على رمز المصدر لمزيد من الخيارات لضبط ObjectDetector.

أمثلة النتائج

فيما يلي مثال على نتائج اكتشاف الإصدار 1 من شبكة جوّال ssd من TensorFlow Hub

كلاب

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

عرض المربّعات المحيطية على صورة الإدخال:

ناتج الرصد

جرب البساطة أداة عرض واجهة سطر الأوامر (CLI) في ObjectDetector باستخدام نموذجك الخاص وبيانات الاختبار.

متطلبات توافق النموذج

تتوقع واجهة برمجة التطبيقات ObjectDetector نموذج TFLite مع البيانات الوصفية لنماذج TFLite: الاطلاع على أمثلة للإنشاء البيانات الوصفية لأدوات رصد الكائنات باستخدام TensorFlow Lite Metadata Writer API.

يجب أن تستوفي نماذج أدوات رصد الكائنات المتوافقة المتطلبات التالية:

  • أداة "إدخال صورة الإدخال": (kTfLiteUInt8/kTfLiteFloat32)

    • إدخال صورة بحجم [batch x height x width x channels].
    • لا تتوفّر إمكانية الاستنتاج المجمَّع (يجب أن تكون القيمة batch 1).
    • يتم توفير إدخالات نموذج أحمر أخضر أزرق فقط (يجب أن تكون القيمة channels 3).
    • إذا كان النوع kTfLiteFloat32، يجب أن تكون خيارات التسوية مطلوبة المرفقة بالبيانات الوصفية لتسوية المدخلات.
  • يجب أن تكون مُخرجات الإخراج هي المُخرجات الأربعة لعملية DetectionPostProcess، أي:

    • مكتبة المواقع الجغرافية (kTfLiteFloat32)
      • موتّر الحجم [1 x num_results x 4]، الصفيفة الداخلية التي تمثل الإحاطة بالإطارات على شكل [أعلى، يسار، يمين، أسفل].
      • يجب إرفاق BoundingBoxProperties بالبيانات الوصفية. ويجب تحديد type=BOUNDARIES و"format_type=RATIO":
    • Classes tensor (kTfLiteFloat32)

      • مأخذ الحجم [1 x num_results]، وتمثل كل قيمة مؤشر عدد صحيح لفئةٍ ما.
      • يمكن إرفاق خرائط (خرائط) تصنيفات اختيارية(ولكن يُنصح باستخدامها) كـ الملفات المرتبطة بالنوع TENSOR_VALUE_LABELS، وتحتوي على تصنيف واحد لكل سطر. يمكنك الاطّلاع على مثال على ملف التصنيفات. يتم استخدام أول ملف AssociatedFile (إن وُجد) لملء الحقل "class_name" من النتائج. الحقل display_name هو يتم ملؤه من الملف AssociatedFile (إن وجد) الذي تتطابق لغته مع الحقل display_names_locale من ObjectDetectorOptions المستخدم في وقت الإنشاء ("en" تلقائيًا، أي الإنجليزية). إذا لم يكن أي منها المتاحة، سيتم ملء حقل index فقط من النتائج.
    • مؤشر تنسور (kTfLiteFloat32)

      • مأخذ الحجم [1 x num_results]، وتمثل كل قيمة للجسم المرصود.
    • عدد مترابط الكشف (kTfLiteFloat32)

      • العدد الصحيح num_results كأتينس بالحجم [1].