يمكن لأجهزة كشف الكائنات تحديد أي مجموعة معروفة من الكائنات قد تكون موجودة وتوفير معلومات حول مواقعها داخل الصورة المحددة أو دفق الفيديو. يتم تدريب كاشف الكائنات على اكتشاف وجود وموقع فئات متعددة من الكائنات. على سبيل المثال، قد يتم تدريب النموذج باستخدام صور تحتوي على قطع مختلفة من الفاكهة، بالإضافة إلى ملصق يحدد فئة الفاكهة التي تمثلها (مثل تفاحة أو موز أو فراولة)، وبيانات تحدد مكان ظهور كل كائن في الصورة. راجع مقدمة اكتشاف الكائنات للحصول على مزيد من المعلومات حول أجهزة كشف الكائنات.
استخدم واجهة برمجة تطبيقات ObjectDetector
لمكتبة المهام لنشر أجهزة الكشف عن الكائنات المخصصة أو الأجهزة المدربة مسبقًا في تطبيقات الهاتف المحمول الخاصة بك.
الميزات الرئيسية لواجهة برمجة تطبيقات ObjectDetector
معالجة الصور المدخلة، بما في ذلك التدوير وتغيير الحجم وتحويل مساحة اللون.
تسمية خريطة المنطقة.
عتبة النتيجة لتصفية النتائج.
نتائج الكشف عن توب-ك.
تصنيف القائمة المسموح بها والقائمة المرفوضة.
نماذج الكشف عن الكائنات المدعومة
نضمن أن تكون النماذج التالية متوافقة مع ObjectDetector
API.
النماذج التي تم إنشاؤها بواسطة AutoML Vision Edge Object Detection .
النماذج التي تم إنشاؤها بواسطة TensorFlow Lite Model Maker للكشف عن الكائنات .
نماذج مخصصة تلبي متطلبات توافق النموذج .
تشغيل الاستدلال في جافا
راجع التطبيق المرجعي لـ 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
API نموذج TFLite مع بيانات تعريف نموذج TFLite الإلزامية. اطلع على أمثلة لإنشاء بيانات التعريف لأجهزة كشف الكائنات باستخدام TensorFlow Lite Metadata Writer API .
يجب أن تستوفي نماذج كاشف الكائنات المتوافقة المتطلبات التالية:
موتر صورة الإدخال: (kTfLiteUInt8/kTfLiteFloat32)
- حجم إدخال الصورة
[batch x height x width x channels]
. - استنتاج الدُفعة غير مدعوم (يُشترط أن تكون
batch
1). - يتم دعم مدخلات RGB فقط (يجب أن تكون
channels
3). - إذا كان النوع هو kTfLiteFloat32، فيجب إرفاق خيارات التسوية بالبيانات التعريفية لتسوية الإدخال.
- حجم إدخال الصورة
يجب أن تكون موترات الإخراج هي المخرجات الأربعة لعملية
DetectionPostProcess
، على سبيل المثال:- موتر المواقع (kTfLiteFloat32)
- موتر الحجم
[1 x num_results x 4]
، المصفوفة الداخلية التي تمثل المربعات المحيطة في النموذج [أعلى، يسار، يمين، أسفل]. - يلزم إرفاق BoundingBoxProperties بالبيانات التعريفية ويجب تحديد
type=BOUNDARIES
و`cooperative_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]
.
- عدد صحيح num_results كموتر بالحجم
- موتر المواقع (kTfLiteFloat32)