Resim sınıflandırıcıları entegre etme

Görüntü sınıflandırma, makine öğreniminin yaygın bir kullanım yöntemidir. temsil eder. Örneğin, bir bitki türü için arama yapan belirli bir resim. Bir resmin neyi temsil ettiğini tahmin etme görevi resim sınıflandırması. Bir görüntü sınıflandırıcı, çeşitli öğeleri tanımak üzere eğitilir resim sınıfları. Örneğin bir model, fotoğrafları algılayacak şekilde eğitilebilir. üç farklı hayvan türünü temsil ediyor: tavşan, hamster ve köpek. Görüntüleyin "the" resim sınıflandırma örneği sayfasına göz atın.

Özel görüntünüzü dağıtmak için Task Library ImageClassifier API'yi kullanın sınıflandırıcılar veya önceden eğitilmiş reklamlar yer alır.

ImageClassifier API'nin temel özellikleri

  • Döndürme, yeniden boyutlandırma ve renk alanı dahil resim işleme gösterir.

  • Giriş resminin ilgilenilen bölge.

  • Harita yerel ayarını etiketle.

  • Sonuçları filtrelemek için puan eşiği.

  • Top-k sınıflandırma sonuçları.

  • Etiket izin verilenler listesi ve ret listesi.

Desteklenen resim sınıflandırıcı modelleri

Aşağıdaki modellerin ImageClassifier ile uyumlu olacağı garanti edilir API'ye gidin.

Java'da çıkarım çalıştırma

Bkz. Görüntü sınıflandırma referans uygulaması ImageClassifier uygulamasını Android uygulamasında nasıl kullanacağınızı gösteren örnek.

1. Adım: Gradle bağımlılığını ve diğer ayarları içe aktarın

.tflite model dosyasını Android modülünün öğe dizinine kopyalayın nerede çalıştırılacağına karar verin. Dosyanın sıkıştırılmaması gerektiğini belirtin ve modülün build.gradle dosyasına TensorFlow Lite kitaplığını ekleyin:

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. Adım: Modeli kullanma

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

Bkz. kaynak kodu ve javadoc daha fazla ImageClassifier yapılandırma seçeneğine gidin.

iOS'te çıkarım çalıştır

1. Adım: Bağımlılıkları yükleyin

Görev Kitaplığı, CocoaPods kullanılarak yüklemeyi destekler. CocoaPods'un sisteminizde yüklü. Daha fazla bilgi için lütfen CocoaPods kurulum kılavuzu başlıklı bölüme bakın.

Daha fazla bilgi için lütfen CocoaPods rehberi: Xcode projesine kapsüller ekleme hakkında ayrıntılı bilgi edinin.

TensorFlowLiteTaskVision kapsülünü Podfile'a ekleyin.

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

Çıkarım için kullanacağınız .tflite modelinin mevcut olduğundan emin olun uygulamanızı sağlar.

2. Adım: Modeli kullanma

Swift

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

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

Bkz. kaynak kod daha fazla TFLImageClassifier yapılandırma seçeneğine gidin.

Python'da çıkarım çalıştırma

1. Adım: Pip paketini yükleyin

pip install tflite-support

2. Adım: Modeli kullanma

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

Bkz. kaynak kod daha fazla ImageClassifier yapılandırma seçeneğine gidin.

C++'ta çıkarım çalıştır

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

Bkz. kaynak kod daha fazla ImageClassifier yapılandırma seçeneğine gidin.

Örnek sonuçlar

Aşağıda, bir anahtar kelimenin sınıflandırma sonuçlarını içeren bir kuş sınıflandırıcı olarak tanımlanmıştır.

serçe

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

Nasıl yapıldığını ImageClassifier için KSA demo aracı kullanarak test edebilirsiniz.

Model uyumluluğu şartları

ImageClassifier API, kullanımı zorunlu olan bir TFLite modeli bekler TFLite Model Meta Verileri. Resim sınıflandırıcıları için meta veri oluşturma örneklerine bakın. TensorFlow Lite Metadata Writer API.

Uyumlu resim sınıflandırıcı modelleri aşağıdaki gereksinimleri karşılamalıdır:

  • Giriş görüntüsü tensörü (kTfLiteUInt8/kTfLitefloat32)

    • [batch x height x width x channels] boyutunda resim girişi.
    • toplu çıkarım desteklenmiyor (batch değerinin 1 olması gerekir).
    • yalnızca RGB girişleri desteklenir (channels değerinin 3 olması gerekir).
    • tür kTfLitefloat32 ise NormalizationOptions'ın giriş normalleştirmesi için meta verilere eklenir.
  • Çıkış puanı tensörü (kTfLiteUInt8/kTfLitefloat32)

    • N sınıfı ve 2 veya 4 boyutlu (ör. [1 x N] veya [1 x 1 x 1 x N])
    • isteğe bağlı (ancak önerilen) etiket eşlemelerini AssociatedFile-s olarak ve türle Her satırda bir etiket bulunan TENSOR_AXIS_LABELS. Bkz. örnek etiket dosyası gibidir. Bu tür ilk AssociatedFile (varsa) label alanını doldurmak için kullanılır (C++ dilinde class_name olarak adlandırılır) için de ekleyebilirsiniz. display_name alanı yerel ayarı ImageClassifierOptions öğesinin display_names_locale alanı kullanılan oluşturma zamanı ("en" varsayılan olarak kullanılır, ör. İngilizce). Bunların hiçbiri sonuçların yalnızca index alanı doldurulacaktır.