آشکارسازهای اشیاء می توانند تشخیص دهند که کدام یک از یک مجموعه شناخته شده از اشیاء ممکن است وجود داشته باشد و اطلاعاتی در مورد موقعیت آنها در تصویر داده شده یا یک جریان ویدئو ارائه دهد. یک آشکارساز شی برای تشخیص وجود و مکان چندین کلاس از اشیا آموزش دیده است. برای مثال، یک مدل ممکن است با تصاویری که حاوی تکههای میوه مختلف است، همراه با برچسبی که کلاس میوهای را که نشان میدهند (مانند سیب، موز یا توتفرنگی) و دادههایی که مشخص میکند هر شی در کجا ظاهر میشود، آموزش داده شود. تصویر برای اطلاعات بیشتر در مورد آشکارسازهای شی ، مثال تشخیص اشیا را ببینید.
از Task Library ObjectDetector
API برای استقرار آشکارسازهای شی سفارشی یا از پیش آموزش دیده خود در برنامه های تلفن همراه خود استفاده کنید.
ویژگی های کلیدی ObjectDetector API
پردازش تصویر ورودی، از جمله چرخش، تغییر اندازه و تبدیل فضای رنگ.
محل نقشه را برچسب بزنید.
آستانه امتیاز برای فیلتر کردن نتایج.
نتایج تشخیص Top-k
لیست مجاز و رد لیست را برچسب بزنید.
مدلهای آشکارساز شی پشتیبانی شده
مدلهای زیر با API ObjectDetector
سازگار هستند.
مدلهای ایجاد شده توسط AutoML Vision Edge Object Detection .
مدلهایی که توسط TensorFlow Lite Model Maker برای آشکارساز شی ایجاد شدهاند.
مدل های سفارشی که الزامات سازگاری مدل را برآورده می کنند.
استنتاج را در جاوا اجرا کنید
برای مثالی از نحوه استفاده از 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);
برای گزینه های بیشتر برای پیکربندی ObjectDetector
به کد منبع و جاوادوک مراجعه کنید.
استنتاج را در iOS اجرا کنید
مرحله 1: وابستگی ها را نصب کنید
Task Library از نصب با استفاده از 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)
هدف-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
به کد منبع مراجعه کنید.
نتایج نمونه
در اینجا نمونه ای از نتایج تشخیص 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 باشد، برای عادی سازی ورودی، باید NormalizationOptions به ابرداده پیوست شود.
- اندازه ورودی تصویر
تانسورهای خروجی باید 4 خروجی یک
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]
.
- عدد صحیح num_results به عنوان تانسور اندازه
- تانسور مکان ها (kTfLiteFloat32)