Nesne algılayıcılarını entegre etme

Nesne algılayıcıları, bilinen bir nesne kümesinden hangisinin mevcut olabileceğini belirleyebilir ve belirtilen resimde veya videodaki konumları hakkında bilgi vermek akış şeklinde gösterilir. Bir nesne algılayıcısı, nesnelerin varlığını ve konumunu algılamak için eğitildi içeren bir nesnedir. Örneğin, bir model resimlerle eğitilebilir içeren bir etiketin yanı sıra temsil ettikleri meyve sınıfı (ör. elma, muz veya çilek) ve her nesnenin görüntüde nerede göründüğünü belirten verilerdir. Bkz. nesne algılama örneği inceleyin.

Özel nesne algılayıcılarınızı dağıtmak için Görev Kitaplığı ObjectDetector API'yi kullanın veya önceden eğitilmiş uygulamalar ekleyebilirsiniz.

ObjectDetector API'nin temel özellikleri

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

  • Harita yerel ayarını etiketle.

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

  • Top-k algılama sonuçları.

  • Etiket izin verilenler listesi ve ret listesi.

Desteklenen nesne algılayıcı modelleri

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

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

Bkz. Nesne Algılama referans uygulaması ObjectDetector ürününün nasıl kullanılacağına dair bir örnek için Android uygulamasına göz atın.

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ğı. 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
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);

Bkz. kaynak kodu ve javadoc daha fazla ObjectDetector 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: "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)

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

Bkz. kaynak kod daha fazla TFLObjectDetector 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)
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)

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

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

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

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

Örnek sonuçlar

Bu örnekte, ssd mobilenet v1 TensorFlow Hub'dan alabilirsiniz.

köpekler

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

Sınırlayıcı kutuları giriş görüntüsünde oluşturun:

algılama çıkışı

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

Model uyumluluğu şartları

ObjectDetector API, kullanımı zorunlu olan bir TFLite modeli bekler TFLite Model Meta Verileri. İçerik üretmeyle ilgili örneklere göz atın meta verileri kullanmak için TensorFlow Lite Metadata Writer API.

Uyumlu nesne algılayı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ış tensörleri, DetectionPostProcess işleminin 4 çıkışı olmalıdır.Yani:

    • Konumlar tensörü (kTfLitefloat32)
      • [1 x num_results x 4] boyutunda tensor; temsil eden iç dizi sınırlayıcı kutular [üst, sol, sağ, alt] biçimindedir.
      • BoundingBoxProperties'in meta verilere eklenmesi gerekir ve type=BOUNDARIES ile "coordinate_type=RATIO" değerlerini belirtmelidir.
    • Sınıf tensörü (kTfLitefloat32)

      • [1 x num_results] boyutunda tensor; her bir değer bir sınıfın tam sayı dizinidir.
      • isteğe bağlı (ancak önerilen) etiket haritaları şu şekilde eklenebilir: TENSOR_VALUE_LABELS türünde AssociatedFile-s, bir etiket içeriyor girin. Bkz. örnek etiket dosyası gibidir. Bu tür ilk AssociatedFile (varsa), class_name alanı gösteriliyor. display_name alanı (varsa) yerel ayarı ObjectDetectorOptions öğ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.
    • Skor tensörü (kTfLitefloat32)

      • [1 x num_results] boyutunda tensor; her bir değer puanına karşılık gelir.
    • Algılama tensörü sayısı (kTfLitefloat32)

      • [1] boyutunda bir tensör olarak tamsayı num_results.