Integrasikan pengklasifikasi gambar

Klasifikasi gambar adalah penggunaan umum pembelajaran mesin untuk mengidentifikasi apa yang diwakili oleh gambar. Misalnya, kita mungkin ingin mengetahui jenis hewan apa yang muncul pada gambar tertentu. Tugas memprediksi apa yang diwakili oleh suatu gambar disebut klasifikasi gambar . Pengklasifikasi gambar dilatih untuk mengenali berbagai kelas gambar. Misalnya, seorang model mungkin dilatih untuk mengenali foto yang mewakili tiga jenis hewan berbeda: kelinci, hamster, dan anjing. Lihat ikhtisar klasifikasi gambar untuk informasi selengkapnya tentang pengklasifikasi gambar.

Gunakan API ImageClassifier Pustaka Tugas untuk menerapkan pengklasifikasi gambar khusus atau yang telah dilatih sebelumnya ke dalam aplikasi seluler Anda.

Fitur utama API ImageClassifier

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

  • Wilayah yang diminati dari gambar masukan.

  • Labeli lokasi peta.

  • Ambang batas skor untuk memfilter hasil.

  • Hasil klasifikasi top-k.

  • Labeli daftar yang diizinkan dan daftar yang ditolak.

Model pengklasifikasi gambar yang didukung

Model berikut dijamin kompatibel dengan ImageClassifier API.

Jalankan inferensi di Java

Lihat aplikasi referensi Klasifikasi Gambar untuk contoh cara menggunakan ImageClassifier 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
ImageClassifierOptions options =
    ImageClassifierOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setMaxResults(1)
        .build();
ImageClassifier imageClassifier =
    ImageClassifier.createFromFileAndOptions(
        context, modelFile, options);

// Run inference
List<Classifications> results = imageClassifier.classify(image);

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

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: "birds_V1",
                                            ofType: "tflite") else { return }

let options = ImageClassifierOptions(modelPath: modelPath)

// Configure any additional options:
// options.classificationOptions.maxResults = 3

let classifier = try ImageClassifier.classifier(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: "sparrow.jpg"), let mlImage = MLImage(image: image) else { return }

// Run inference
let classificationResults = try classifier.classify(mlImage: mlImage)

Tujuan C

// Imports
#import <TensorFlowLiteTaskVision/TensorFlowLiteTaskVision.h>

// Initialization
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"birds_V1" ofType:@"tflite"];

TFLImageClassifierOptions *options =
    [[TFLImageClassifierOptions alloc] initWithModelPath:modelPath];

// Configure any additional options:
// options.classificationOptions.maxResults = 3;

TFLImageClassifier *classifier = [TFLImageClassifier imageClassifierWithOptions:options
                                                                          error:nil];

// Convert the input image to MLImage.
UIImage *image = [UIImage imageNamed:@"sparrow.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
TFLClassificationResult *classificationResult =
    [classifier classifyWithGMLImage:gmlImage error:nil];

Lihat kode sumber untuk opsi lebih lanjut untuk mengonfigurasi TFLImageClassifier .

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)
classification_options = processor.ClassificationOptions(max_results=2)
options = vision.ImageClassifierOptions(base_options=base_options, classification_options=classification_options)
classifier = vision.ImageClassifier.create_from_options(options)

# Alternatively, you can create an image classifier in the following manner:
# classifier = vision.ImageClassifier.create_from_file(model_path)

# Run inference
image = vision.TensorImage.create_from_file(image_path)
classification_result = classifier.classify(image)

Lihat kode sumber untuk opsi lebih lanjut untuk mengonfigurasi ImageClassifier .

Jalankan inferensi di C++

// Initialization
ImageClassifierOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
std::unique_ptr<ImageClassifier> image_classifier = ImageClassifier::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 ClassificationResult result = image_classifier->Classify(*frame_buffer).value();

Lihat kode sumber untuk opsi lebih lanjut untuk mengonfigurasi ImageClassifier .

Contoh hasil

Berikut ini contoh hasil klasifikasi dari bird classifier .

burung gereja

Results:
  Rank #0:
   index       : 671
   score       : 0.91406
   class name  : /m/01bwb9
   display name: Passer domesticus
  Rank #1:
   index       : 670
   score       : 0.00391
   class name  : /m/01bwbt
   display name: Passer montanus
  Rank #2:
   index       : 495
   score       : 0.00391
   class name  : /m/0bwm6m
   display name: Passer italiae

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

Persyaratan kompatibilitas model

ImageClassifier API mengharapkan model TFLite dengan Metadata Model TFLite wajib. Lihat contoh pembuatan metadata untuk pengklasifikasi gambar menggunakan TensorFlow Lite Metadata Writer API .

Model pengklasifikasi gambar 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 skor keluaran (kTfLiteUInt8/kTfLiteFloat32)

    • dengan N kelas dan 2 atau 4 dimensi, yaitu [1 x N] atau [1 x 1 x 1 x N]
    • peta label opsional (tetapi disarankan) sebagai AssociatedFile-s dengan tipe TENSOR_AXIS_LABELS, berisi satu label per baris. Lihat contoh file label . AssociatedFile pertama (jika ada) digunakan untuk mengisi kolom label (dinamai class_name dalam C++) dari hasil. Bidang display_name diisi dari AssociatedFile (jika ada) yang lokalnya cocok dengan bidang display_names_locale dari ImageClassifierOptions yang digunakan pada waktu pembuatan ("en" secara default, yaitu bahasa Inggris). Jika tidak ada yang tersedia, hanya bidang index hasil yang akan diisi.