ادغام آشکارسازهای شی

آشکارسازهای اشیاء می توانند تشخیص دهند که کدام یک از یک مجموعه شناخته شده از اشیاء ممکن است وجود داشته باشد و اطلاعاتی در مورد موقعیت آنها در تصویر داده شده یا یک جریان ویدئو ارائه دهد. یک آشکارساز شی برای تشخیص حضور و مکان چندین کلاس از اشیا آموزش دیده است. به عنوان مثال، یک مدل ممکن است با تصاویری که حاوی قطعات مختلف میوه هستند، همراه با برچسبی که کلاس میوه ای را که آنها نشان می دهند (مثلاً یک سیب، یک موز یا یک توت فرنگی) مشخص می کند، و داده هایی که مشخص می کند هر شی در کجا ظاهر می شود، آموزش داده شود. تصویر. برای اطلاعات بیشتر در مورد آشکارسازهای شی، مقدمه تشخیص شی را ببینید.

از Task Library ObjectDetector API برای استقرار آشکارسازهای شی سفارشی یا از پیش آموزش دیده خود در برنامه های تلفن همراه خود استفاده کنید.

ویژگی های کلیدی ObjectDetector API

  • پردازش تصویر ورودی، از جمله چرخش، تغییر اندازه، و تبدیل فضای رنگ.

  • محل نقشه را برچسب بزنید.

  • آستانه امتیاز برای فیلتر کردن نتایج.

  • نتایج تشخیص Top-k

  • لیست مجاز و رد لیست را برچسب بزنید.

مدل‌های آشکارساز شی پشتیبانی شده

مدل‌های زیر با API ObjectDetector سازگار هستند.

استنتاج را در جاوا اجرا کنید

برای مثالی از نحوه استفاده از ObjectDetector در یک برنامه Android، به برنامه مرجع تشخیص شیء مراجعه کنید.

مرحله 1: وابستگی Gradle و تنظیمات دیگر را وارد کنید

فایل مدل .tflite . را در فهرست دارایی‌های ماژول اندروید که مدل اجرا می‌شود، کپی کنید. مشخص کنید که فایل نباید فشرده شود و کتابخانه 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);

برای گزینه های بیشتر برای پیکربندی 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)

هدف ج

// Imports
#import <TensorFlowLiteTaskVision/TFLTaskVision.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_file);
std::unique_ptr<ObjectDetector> object_detector = ObjectDetector::CreateFromOptions(options).value();

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

آشکارسازهای اشیاء می توانند تشخیص دهند که کدام یک از یک مجموعه شناخته شده از اشیاء ممکن است وجود داشته باشد و اطلاعاتی در مورد موقعیت آنها در تصویر داده شده یا یک جریان ویدئو ارائه دهد. یک آشکارساز شی برای تشخیص حضور و مکان چندین کلاس از اشیا آموزش دیده است. به عنوان مثال، یک مدل ممکن است با تصاویری که حاوی قطعات مختلف میوه هستند، همراه با برچسبی که کلاس میوه ای را که آنها نشان می دهند (مثلاً یک سیب، یک موز یا یک توت فرنگی) مشخص می کند، و داده هایی که مشخص می کند هر شی در کجا ظاهر می شود، آموزش داده شود. تصویر. برای اطلاعات بیشتر در مورد آشکارسازهای شی، مقدمه تشخیص شی را ببینید.

از Task Library ObjectDetector API برای استقرار آشکارسازهای شی سفارشی یا از پیش آموزش دیده خود در برنامه های تلفن همراه خود استفاده کنید.

ویژگی های کلیدی ObjectDetector API

  • پردازش تصویر ورودی، از جمله چرخش، تغییر اندازه، و تبدیل فضای رنگ.

  • محل نقشه را برچسب بزنید.

  • آستانه امتیاز برای فیلتر کردن نتایج.

  • نتایج تشخیص Top-k

  • لیست مجاز و رد لیست را برچسب بزنید.

مدل‌های آشکارساز شی پشتیبانی شده

مدل‌های زیر با API ObjectDetector سازگار هستند.

استنتاج را در جاوا اجرا کنید

برای مثالی از نحوه استفاده از ObjectDetector در یک برنامه Android، به برنامه مرجع تشخیص شیء مراجعه کنید.

مرحله 1: وابستگی Gradle و تنظیمات دیگر را وارد کنید

فایل مدل .tflite . را در فهرست دارایی‌های ماژول اندروید که مدل اجرا می‌شود، کپی کنید. مشخص کنید که فایل نباید فشرده شود و کتابخانه 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);

برای گزینه های بیشتر برای پیکربندی 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)

هدف ج

// Imports
#import <TensorFlowLiteTaskVision/TFLTaskVision.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_file);
std::unique_ptr<ObjectDetector> object_detector = ObjectDetector::CreateFromOptions(options).value();

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