Nesne dedektörlerini entegre edin

Nesne dedektörleri, bilinen bir nesne kümesinden hangisinin mevcut olabileceğini belirleyebilir ve belirli bir görüntü veya video akışı içindeki konumları hakkında bilgi sağlayabilir. Bir nesne dedektörü, birden fazla nesne sınıfının varlığını ve konumunu tespit edecek şekilde eğitilir. Örneğin bir model, çeşitli meyve parçalarını içeren görsellerin yanı sıra bunların temsil ettiği meyvenin sınıfını belirten bir etiket (örneğin bir elma, bir muz veya bir çilek) ve her bir nesnenin meyvenin içinde nerede göründüğünü belirten verilerle eğitilebilir. görüntü. Nesne dedektörleri hakkında daha fazla bilgi için nesne algılamanın tanıtımına bakın.

Özel nesne algılayıcılarınızı 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.

  • Harita yerel ayarını etiketleyin.

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

  • Top-k tespit sonuçları.

  • İzin verilenler listesini ve reddedilenler listesini etiketleyin.

Desteklenen nesne dedektörü modelleri

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

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

ObjectDetector bir Android uygulamasında nasıl kullanılacağına ilişkin bir örnek için Nesne Algılama referans uygulamasına bakın.

Adım 1: 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 asset 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 (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'
}

Adım 2: Modelin kullanılması

// 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ırmaya yönelik daha fazla seçenek için kaynak koduna ve javadoc'a bakın.

İOS'ta çıkarımı çalıştırma

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

Görev Kitaplığı, CocoaPod'lar kullanılarak kurulumu destekler. Sisteminizde CocoaPods'un kurulu olduğundan emin olun. Talimatlar için lütfen CocoaPods kurulum kılavuzuna bakın.

Bir Xcode projesine bölme eklemeyle ilgili ayrıntılar için lütfen CocoaPods kılavuzuna bakın.

TensorFlowLiteTaskVision bölmesini Pod dosyasına ekleyin.

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

Çıkarım için kullanacağınız .tflite modelinin uygulama paketinizde mevcut olduğundan emin olun.

Adım 2: Modelin kullanılması

Süratli

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

Hedef 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ırmaya yönelik daha fazla seçenek için kaynak koduna bakın.

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

Adım 1: pip paketini yükleyin

pip install tflite-support

Adım 2: Modelin kullanılması

# 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ırmaya yönelik daha fazla seçenek için kaynak koduna bakın.

Çıkarımı C++'da ç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ırmaya yönelik daha fazla seçenek için kaynak koduna bakın.

Örnek sonuçlar

TensorFlow Hub'dan ssd mobilenet v1'in algılama sonuçlarına bir örnek.

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 işleyin:

algılama çıkışı

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

Model uyumluluk gereksinimleri

ObjectDetector API, zorunlu TFLite Model Meta Verilerine sahip bir TFLite modeli beklemektedir. TensorFlow Lite Meta Veri Yazıcısı API'sini kullanarak nesne dedektörleri için meta veriler oluşturma örneklerine bakın.

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

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

    • boyut görüntü girişi [batch x height x width x channels] .
    • toplu çıkarım desteklenmiyor ( batch 1 olması gerekiyor).
    • yalnızca RGB girişleri desteklenir ( channels 3 olması gerekir).
    • tür kTfLiteFloat32 ise, giriş normalleştirmesi için normalizationOptions'ın meta verilere eklenmesi gerekir.
  • Çıkış tensörleri bir DetectionPostProcess işleminin 4 çıkışı olmalıdır, yani:

    • Konum tensörü (kTfLiteFloat32)
      • boyut tensörü [1 x num_results x 4] , [top, left, right, Bottom] formundaki sınırlayıcı kutuları temsil eden iç dizi.
      • BoundingBoxProperties'in meta verilere eklenmesi gerekir ve type=BOUNDARIES ve `coordinat_type=RATIO'yu belirtmelidir.
    • Sınıflar tensörü (kTfLiteFloat32)

      • boyut tensörü [1 x num_results] , her değer bir sınıfın tamsayı indeksini temsil eder.
      • isteğe bağlı (ancak önerilen) etiket eşlemeleri, her satırda bir etiket içeren TENSOR_VALUE_LABELS türünde AssociatedFile-s 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ı, yerel ayarı, oluşturma zamanında kullanılan ObjectDetectorOptions display_names_locale alanıyla eşleşen AssociatedFile'dan (varsa) doldurulur (varsayılan olarak "en", yani İngilizce). Bunlardan hiçbiri mevcut değilse sadece sonuçların index alanı doldurulacaktır.
    • Puan tensörü (kTfLiteFloat32)

      • boyut tensörü [1 x num_results] , her değer algılanan nesnenin puanını temsil eder.
    • Algılama tensör sayısı (kTfLiteFloat32)

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