Integrasikan detektor objek

Detektor objek dapat mengidentifikasi kumpulan objek mana yang mungkin ada dan memberikan informasi tentang posisinya dalam gambar atau aliran video tertentu. Detektor objek dilatih untuk mendeteksi keberadaan dan lokasi beberapa kelas objek. Misalnya, suatu model mungkin dilatih dengan gambar yang berisi berbagai potongan buah, beserta label yang menentukan kelas buah yang diwakilinya (misalnya apel, pisang, atau stroberi), dan data yang menentukan di mana setiap objek muncul. foto. Lihat pengenalan deteksi objek untuk informasi lebih lanjut tentang detektor objek.

Gunakan API ObjectDetector Pustaka Tugas untuk menyebarkan pendeteksi objek khusus atau yang telah dilatih sebelumnya ke dalam aplikasi seluler Anda.

Fitur utama dari ObjectDetector API

  • Pemrosesan gambar masukan, termasuk rotasi, pengubahan ukuran, dan konversi ruang warna.

  • Labeli lokasi peta.

  • Ambang batas skor untuk memfilter hasil.

  • Hasil deteksi top-k.

  • Labeli daftar yang diizinkan dan daftar yang ditolak.

Model detektor objek yang didukung

Model berikut dijamin kompatibel dengan ObjectDetector API.

Jalankan inferensi di Java

Lihat aplikasi referensi Deteksi Objek untuk contoh cara menggunakan ObjectDetector di aplikasi Android.

Langkah 1: Impor ketergantungan Gradle dan pengaturan lainnya

Salin file model .tflite ke direktori aset modul Android tempat model akan dijalankan. Tentukan bahwa file tersebut tidak boleh dikompresi, dan tambahkan pustaka TensorFlow Lite ke file build.gradle modul:

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'
}

Langkah 2: Menggunakan model

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

Lihat kode sumber dan javadoc untuk opsi lebih lanjut untuk mengonfigurasi ObjectDetector .

Jalankan inferensi di iOS

Langkah 1: Instal dependensi

Perpustakaan Tugas mendukung instalasi menggunakan CocoaPods. Pastikan CocoaPods terinstal di sistem Anda. Silakan lihat panduan instalasi CocoaPods untuk petunjuknya.

Silakan lihat panduan CocoaPods untuk detail tentang menambahkan pod ke proyek Xcode.

Tambahkan pod TensorFlowLiteTaskVision di Podfile.

target 'MyAppWithTaskAPI' do
  use_frameworks!
  pod 'TensorFlowLiteTaskVision'
end

Pastikan model .tflite yang akan Anda gunakan untuk inferensi ada di app bundle Anda.

Langkah 2: Menggunakan model

Cepat

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

Tujuan 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];

Lihat kode sumber untuk opsi lebih lanjut untuk mengonfigurasi TFLObjectDetector .

Jalankan inferensi dengan Python

Langkah 1: Instal paket pip

pip install tflite-support

Langkah 2: Menggunakan model

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

Lihat kode sumber untuk opsi lebih lanjut untuk mengonfigurasi ObjectDetector .

Jalankan inferensi di 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();

Lihat kode sumber untuk opsi lebih lanjut untuk mengonfigurasi ObjectDetector .

Contoh hasil

Berikut contoh hasil deteksi ssd mobilenet v1 dari TensorFlow Hub.

anjing

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

Render kotak pembatas ke gambar masukan:

keluaran deteksi

Cobalah alat demo CLI sederhana untuk ObjectDetector dengan model dan data pengujian Anda sendiri.

Persyaratan kompatibilitas model

ObjectDetector API mengharapkan model TFLite dengan Metadata Model TFLite wajib. Lihat contoh pembuatan metadata untuk pendeteksi objek menggunakan TensorFlow Lite Metadata Writer API .

Model detektor objek yang kompatibel harus memenuhi persyaratan berikut:

  • Tensor gambar masukan: (kTfLiteUInt8/kTfLiteFloat32)

    • masukan gambar dengan ukuran [batch x height x width x channels] .
    • inferensi batch tidak didukung ( batch harus 1).
    • hanya input RGB yang didukung ( channels harus ada 3).
    • jika tipenya adalah kTfLiteFloat32, NormalizationOptions harus dilampirkan ke metadata untuk normalisasi input.
  • Tensor keluaran harus berupa 4 keluaran dari operasi DetectionPostProcess , yaitu:

    • Tensor lokasi (kTfLiteFloat32)
      • tensor berukuran [1 x num_results x 4] , array bagian dalam mewakili kotak pembatas dalam bentuk [atas, kiri, kanan, bawah].
      • BoundingBoxProperties harus dilampirkan ke metadata dan harus menentukan type=BOUNDARIES dan `coordinate_type=RATIO.
    • Tensor kelas (kTfLiteFloat32)

      • tensor berukuran [1 x num_results] , setiap nilai mewakili indeks bilangan bulat suatu kelas.
      • peta label opsional (tetapi disarankan) dapat dilampirkan sebagai AssociatedFile-s dengan tipe TENSOR_VALUE_LABELS, berisi satu label per baris. Lihat contoh file label . AssociatedFile pertama (jika ada) digunakan untuk mengisi kolom class_name pada hasil. Bidang display_name diisi dari AssociatedFile (jika ada) yang lokalnya cocok dengan bidang display_names_locale dari ObjectDetectorOptions yang digunakan pada waktu pembuatan ("en" secara default, yaitu bahasa Inggris). Jika tidak ada yang tersedia, hanya bidang index hasil yang akan diisi.
    • Tensor skor (kTfLiteFloat32)

      • tensor berukuran [1 x num_results] , masing-masing nilai mewakili skor objek yang terdeteksi.
    • Jumlah tensor deteksi (kTfLiteFloat32)

      • integer num_results sebagai tensor ukuran [1] .