دمج أجهزة الكشف عن الأشياء

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

استخدم واجهة برمجة تطبيقات Object Library ObjectDetector لمكتبة المهام لنشر أجهزة الكشف عن الكائنات المخصصة أو تلك التي تم اختبارها مسبقًا في تطبيقات الأجهزة المحمولة.

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

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

  • لغة خريطة التسمية.

  • عتبة النتيجة لتصفية النتائج.

  • نتائج الكشف عن Top-k.

  • تسمية allowlist و denylist.

نماذج كاشفات الأجسام المدعومة

النماذج التالية مضمونة لتكون متوافقة مع ObjectDetector API.

تشغيل الاستدلال في Java

راجع التطبيق المرجعي لـ Object Detection للحصول على مثال حول كيفية استخدام 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 (NNAPI is included)
    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: استخدام النموذج

سويفت

// 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)

ج موضوعية

// 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 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 .

نتائج المثال

فيما يلي مثال على نتائج الكشف عن ssd mobilenet v1 من 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).
    • يتم دعم مدخلات RGB فقط (يجب أن تكون channels 3).
    • إذا كان النوع هو kTfLiteFloat32 ، يلزم إرفاق خيارات Normalization بالبيانات الوصفية لتطبيع الإدخال.
  • يجب أن تكون موترات الإخراج هي النواتج الأربعة لعملية DetectionPostProcess ، أي:

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

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

      • موتر بحجم [1 x num_results] ، كل قيمة تمثل درجة الكائن المكتشف.
    • عدد موتر الكشف (kTfLiteFloat32)

      • عدد صحيح num_results كموتر من الحجم [1] .
و

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

استخدم واجهة برمجة تطبيقات Object Library ObjectDetector لمكتبة المهام لنشر أجهزة الكشف عن الكائنات المخصصة أو تلك التي تم اختبارها مسبقًا في تطبيقات الأجهزة المحمولة.

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

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

  • لغة خريطة التسمية.

  • عتبة النتيجة لتصفية النتائج.

  • نتائج الكشف عن Top-k.

  • تسمية allowlist و denylist.

نماذج كاشفات الأجسام المدعومة

النماذج التالية مضمونة لتكون متوافقة مع ObjectDetector API.

تشغيل الاستدلال في Java

راجع التطبيق المرجعي لـ Object Detection للحصول على مثال حول كيفية استخدام 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 (NNAPI is included)
    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: استخدام النموذج

سويفت

// 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)

ج موضوعية

// 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 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 .

نتائج المثال

فيما يلي مثال على نتائج الكشف عن ssd mobilenet v1 من 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).
    • يتم دعم مدخلات RGB فقط (يجب أن تكون channels 3).
    • إذا كان النوع هو kTfLiteFloat32 ، يلزم إرفاق خيارات Normalization بالبيانات الوصفية لتطبيع الإدخال.
  • يجب أن تكون موترات الإخراج هي النواتج الأربعة لعملية DetectionPostProcess ، أي:

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

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

      • موتر بحجم [1 x num_results] ، كل قيمة تمثل درجة الكائن المكتشف.
    • عدد موتر الكشف (kTfLiteFloat32)

      • عدد صحيح num_results كموتر من الحجم [1] .