يمكن لأدوات رصد العناصر تحديد العناصر التي قد تكون متوفرة من مجموعة معروفة من العناصر وتقديم معلومات حول مواضعها ضمن الصورة المحدّدة أو بث الفيديو. يتم تدريب أداة رصد الأجسام على رصد وجود عدة فئات من الأجسام وموقعها الجغرافي. على سبيل المثال، يمكن تدريب نموذج باستخدام صور تحتوي على أنواع مختلفة من الفاكهة، بالإضافة إلى تصنيف يحدّد فئة الفاكهة التي تمثّلها (مثل تفاحة أو موزة أو فراولة)، وبيانات تحدّد موضع كل عنصر في الصورة. يمكنك الاطّلاع على مثال على رصد الكائنات للحصول على مزيد من المعلومات حول أدوات رصد الكائنات.
استخدِم واجهة برمجة التطبيقات Task Library ObjectDetector لنشر أدوات رصد العناصر المخصّصة
أو تلك التي تم تدريبها مسبقًا في تطبيقاتك على الأجهزة الجوّالة.
الميزات الرئيسية في ObjectDetector API
معالجة الصور المدخلة، بما في ذلك التدوير وتغيير الحجم وتحويل مساحة الألوان
لغة خريطة التصنيفات
الحد الأدنى للنتيجة لفلترة النتائج.
أهم k نتائج رصد.
القائمة المسموح بها والقائمة المرفوضة للتصنيفات
طُرز أدوات رصد الأجسام المتوافقة
نضمن توافق الطُرز التالية مع واجهة برمجة التطبيقات ObjectDetector.
النماذج التي تم إنشاؤها بواسطة AutoML Vision Edge Object Detection
النماذج التي تم إنشاؤها باستخدام TensorFlow Lite Model Maker لأداة رصد الكائنات
النماذج المخصّصة التي تستوفي متطلبات توافق النماذج
تشغيل الاستنتاج في 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.
تشغيل الاستنتاج في Python
الخطوة 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.
أمثلة النتائج
في ما يلي مثال على نتائج رصد 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
عرض المربّعات المحيطة على الصورة المُدخَلة:

جرِّب أداة العرض التوضيحي البسيطة لواجهة سطر الأوامر الخاصة بـ ObjectDetector باستخدام النموذج وبيانات الاختبار الخاصة بك.
متطلبات التوافق مع الطراز
تتوقّع واجهة برمجة التطبيقات ObjectDetector نموذج TFLite يتضمّن بيانات وصفية إلزامية لنموذج TFLite. يمكنك الاطّلاع على أمثلة حول إنشاء بيانات وصفية لأدوات رصد العناصر باستخدام TensorFlow Lite Metadata Writer API.
يجب أن تستوفي نماذج رصد العناصر المتوافقة المتطلبات التالية:
موتر الصورة المدخَلة: (kTfLiteUInt8/kTfLiteFloat32)
- إدخال صورة بحجم
[batch x height x width x channels] - لا تتوفّر الاستدلالات المجمّعة (يجب أن تكون قيمة
batchهي 1). - يُسمح فقط بإدخال قيم RGB (يجب أن تكون قيمة
channelsهي 3). - إذا كان النوع kTfLiteFloat32، يجب إرفاق NormalizationOptions بالبيانات الوصفية لتسوية الإدخال.
- إدخال صورة بحجم
يجب أن تكون موترات الإخراج هي المخرجات الأربعة لعملية
DetectionPostProcess، أي:- متّجه المواقع الجغرافية (kTfLiteFloat32)
- موتر بحجم
[1 x num_results x 4]، وهو عبارة عن مصفوفة داخلية تمثّل مربّعات محيطة بالشكل [أعلى، يمين، يسار، أسفل]. - يجب إرفاق BoundingBoxProperties بالبيانات الوصفية، ويجب تحديد
type=BOUNDARIESوcoordinate_type=RATIO. متّجه الفئات (kTfLiteFloat32)
موتر بحجم
[1 x num_results]، وتمثّل كل قيمة فيه الفهرس الصحيح لفئة.يمكن إرفاق خرائط التصنيفات الاختيارية (ولكن يُنصح بها) كملفات AssociatedFile-s من النوع TENSOR_VALUE_LABELS، مع تضمين تصنيف واحد لكل سطر. اطّلِع على مثال لملف التصنيفات. يتم استخدام أول AssociatedFile (إن وُجد) لملء الحقل
class_nameفي النتائج. يتم ملء الحقلdisplay_nameمن AssociatedFile (إذا كان متاحًا) الذي تتطابق لغته مع الحقلdisplay_names_localeالخاص بـObjectDetectorOptionsالمستخدَم في وقت الإنشاء (القيمة التلقائية هي "en"، أي الإنجليزية). إذا لم يتوفّر أيّ من هذه الحقول، سيتم ملء الحقلindexفقط في النتائج.متّجه النتائج (kTfLiteFloat32)
موتر بالحجم
[1 x num_results]، تمثّل كل قيمة فيه نتيجة الكائن الذي تم رصده.عدد متّجه الرصد (kTfLiteFloat32)
عدد صحيح num_results كمتّجه بحجم
[1].