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

Nesne dedektörleri, bilinen bir nesne grubundan hangilerinin mevcut olabileceğini belirleyebilir ve verilen görüntü veya video akışındaki konumları hakkında bilgi sağlayabilir. Nesne algılayıcı, birden fazla nesne sınıfının varlığını ve konumunu algılayacak şekilde eğitilir. Örneğin, bir model çeşitli meyveler içeren resimlerle, bu meyvelerin sınıfını (ör. elma, muz veya çilek) belirten bir etiketle ve her nesnenin resimde nerede göründüğünü belirten verilerle eğitilebilir. Nesne dedektörleri hakkında daha fazla bilgi için nesne algılama örneğine bakın.

Özel nesne dedektörlerinizi veya önceden eğitilmiş olanları mobil uygulamalarınıza dağıtmak için Görev Kitaplığı ObjectDetector API'sini kullanın.

ObjectDetector API'nin temel özellikleri

  • Döndürme, yeniden boyutlandırma ve renk alanı dönüştürme dahil olmak üzere giriş görüntüsü işleme.

  • Etiket haritası yerel ayarı.

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

  • En iyi k algılama sonuçları.

  • Etiket izin verilenler ve red listesi.

Desteklenen nesne algılama modelleri

Aşağıdaki modellerin ObjectDetector API ile uyumlu olduğu garanti edilir.

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

Android uygulamasında ObjectDetector özelliğinin nasıl kullanılacağıyla ilgili bir örnek için Nesne Algılama referans uygulamasına bakın.

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

.tflite model dosyasını, modelin çalıştırılacağı Android modülünün öğeler dizinine kopyalayın. Dosyanın sıkıştırılmaması gerektiğini belirtin ve TensorFlow Lite kitaplığını modülün build.gradle dosyasına 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);

ObjectDetector yapılandırmayla ilgili daha fazla seçenek için kaynak kodu ve javadoc'a bakın.

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

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

Görev Kitaplığı, CocoaPods kullanılarak yüklenmeyi destekler. Sisteminizde CocoaPods'un yüklü olduğundan emin olun. Talimatlar için lütfen CocoaPods yükleme kılavuzuna bakın.

Pod'ları Xcode projesine ekleme hakkında ayrıntılı bilgi için lütfen CocoaPods rehberine bakın.

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

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

Çıkarım için kullanacağınız .tflite modelin uygulama paketinizde bulunduğundan emin olun.

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

TFLObjectDetector yapılandırmayla ilgili diğer seçenekler için kaynak koduna bakın.

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)

ObjectDetector yapılandırmayla ilgili diğer seçenekler için kaynak koduna bakın.

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

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

ObjectDetector yapılandırmayla ilgili diğer seçenekler için kaynak koduna bakın.

Örnek sonuçlar

TensorFlow Hub'daki ssd mobilenet v1 algılama sonuçlarına ilişkin bir örneği aşağıda bulabilirsiniz.

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üne yerleştirin:

algılama çıkışı

Kendi modeliniz ve test verilerinizle basit CLI demo aracını ObjectDetector için deneyin.

Model uyumluluğu koşulları

ObjectDetector API, zorunlu TFLite Model Metadata içeren bir TFLite modeli bekler. TensorFlow Lite Metadata Writer API'yi kullanarak nesne algılayıcılar için meta veri oluşturma örneklerine bakın.

Uyumlu nesne dedektörü modelleri aşağıdaki koşulları karşılamalıdır:

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

    • [batch x height x width x channels] boyutunda görüntü girişi.
    • Toplu çıkarım desteklenmez (batch 1 olmalıdır).
    • Yalnızca RGB girişleri desteklenir (channels 3 olmalıdır).
    • Tür kTfLiteFloat32 ise giriş normalleştirme için NormalizationOptions'ın meta verilere eklenmesi gerekir.
  • Çıkış tensörleri, DetectionPostProcess işleminin 4 çıkışı olmalıdır. Örneğin:

    • Konum tensörü (kTfLiteFloat32)
    • [1 x num_results x 4] boyutunda tensör. İç dizi, [üst, sol, sağ, alt] biçiminde sınırlayıcı kutuları temsil eder.
    • Sınırlayıcı kutu özellikleri, meta verilere eklenmelidir ve type=BOUNDARIES ile "coordinate_type=RATIO" değerini belirtmelidir.
    • Sınıflar tensörü (kTfLiteFloat32)

    • Boyutu [1 x num_results] olan tensör. Her değer, bir sınıfın tam sayı dizinini temsil eder.

    • İsteğe bağlı (ancak önerilir) etiket haritaları, her satırda bir etiket içeren TENSOR_VALUE_LABELS türünde AssociatedFile olarak eklenebilir. Örnek etiket dosyasına bakın. Bu türden ilk AssociatedFile (varsa) sonuçların class_name alanını doldurmak için kullanılır. display_name alanı, oluşturma sırasında kullanılan ObjectDetectorOptions öğesinin display_names_locale alanıyla yerel ayarı eşleşen AssociatedFile (varsa) öğesinden doldurulur ("en" varsayılan değerdir, yani İngilizce). Bunlardan hiçbiri yoksa sonuçların yalnızca index alanı doldurulur.

    • Puan tensörü (kTfLiteFloat32)

    • Boyutu [1 x num_results] olan tensör. Her değer, algılanan nesnenin puanını gösterir.

    • Algılama tensörü sayısı (kTfLiteFloat32)

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