Resim segmenterlerini entegre etme

Resim segmenterleri, bir resmin her pikselinin yardımcı olur. Bu, belirli bir bölgedeki nesneleri algılayan nesne algılamadan farklıdır. genel görünümü sınıflandıran resim sınıflandırması ve görüntüsüdür. Bkz. Resim segmentasyonuna genel bakış örnek .

Özel görüntü segmentleyicilerinizi dağıtmak için Task Library ImageSegmenter API'yi kullanın. veya önceden eğitilmiş uygulamalar ekleyebilirsiniz.

ImageSegmenter API'nin temel özellikleri

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

  • Harita yerel ayarını etiketle.

  • Kategori maskesi ve güven maskesi olmak üzere iki çıkış türü vardır.

  • Görüntüleme amaçlı renkli etiket.

Desteklenen görüntü segmentleyici modelleri

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

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

Bkz. Resim Segmentasyonu referansı uygulama ImageSegmenter 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
ImageSegmenterOptions options =
    ImageSegmenterOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setOutputType(OutputType.CONFIDENCE_MASK)
        .build();
ImageSegmenter imageSegmenter =
    ImageSegmenter.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<Segmentation> results = imageSegmenter.segment(image);

Kaynak koduna ve javadoc daha fazla ImageSegmenter 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ü. Lütfen CocoaPods kurulumuna bakın. kılavuz başlıklı bölüme bakın.

Daha fazla bilgi için lütfen CocoaPods rehberine Xcode projesine kapsüller eklemeyi ele alacağız.

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

let options = ImageSegmenterOptions(modelPath: modelPath)

// Configure any additional options:
// options.outputType = OutputType.confidenceMasks

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

// Run inference
let segmentationResult = try segmenter.segment(mlImage: mlImage)

Objective-C

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

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

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

// Configure any additional options:
// options.outputType = TFLOutputTypeConfidenceMasks;

TFLImageSegmenter *segmenter = [TFLImageSegmenter imageSegmenterWithOptions:options
                                                                      error:nil];

// Convert the input image to MLImage.
UIImage *image = [UIImage imageNamed:@"plane.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
TFLSegmentationResult *segmentationResult =
    [segmenter segmentWithGMLImage:gmlImage error:nil];

Kaynağa bakın kod daha fazla TFLImageSegmenter 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)
segmentation_options = processor.SegmentationOptions(
    output_type=processor.SegmentationOptions.output_type.CATEGORY_MASK)
options = vision.ImageSegmenterOptions(base_options=base_options, segmentation_options=segmentation_options)
segmenter = vision.ImageSegmenter.create_from_options(options)

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

# Run inference
image_file = vision.TensorImage.create_from_file(image_path)
segmentation_result = segmenter.segment(image_file)

Kaynağa bakın kod daha fazla ImageSegmenter yapılandırma seçeneğine gidin.

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

// Initialization
ImageSegmenterOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
std::unique_ptr<ImageSegmenter> image_segmenter = ImageSegmenter::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 SegmentationResult result = image_segmenter->Segment(*frame_buffer).value();

Kaynağa bakın kod daha fazla ImageSegmenter yapılandırma seçeneğine gidin.

Örnek sonuçlar

Buradaki segmentin segmentasyon sonuçlarının bir örneği deeplab_v3 TensorFlow Hub'da bulunan genel bir segmentasyon modelidir.

uçak

Color Legend:
 (r: 000, g: 000, b: 000):
  index       : 0
  class name  : background
 (r: 128, g: 000, b: 000):
  index       : 1
  class name  : aeroplane

# (omitting multiple lines for conciseness) ...

 (r: 128, g: 192, b: 000):
  index       : 19
  class name  : train
 (r: 000, g: 064, b: 128):
  index       : 20
  class name  : tv
Tip: use a color picker on the output PNG file to inspect the output mask with
this legend.

Segmentasyon kategorisi maskesi aşağıdaki gibi görünmelidir:

segmentation-output

Şunun için basit CLI demo aracını deneyin: ImageSegmenter kullanarak test edebilirsiniz.

Model uyumluluğu şartları

ImageSegmenter API, zorunlu TFLite Modeline sahip bir TFLite modeli bekler Meta veri. Resim için meta veri oluşturma örneklerini inceleyin TensorFlow Lite Meta Veri Yazıcısını kullanarak segmentleyiciler API.

  • 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ış maskeleri tensörü: (kTfLiteUInt8/kTfLitefloat32)

    • [batch x mask_height x mask_width x num_classes] boyutundaki tensor, burada batch 1 olmalıdır. mask_width ve mask_height model tarafından üretilen segmentasyon maskelerinin boyutları ve num_classes, modelin desteklediği sınıfların sayısıdır.
    • isteğe bağlı (ancak önerilen) etiket haritaları şu şekilde eklenebilir: Her biri için bir etiket içeren TENSOR_AXIS_LABELS türünde AssociatedFile-s satırında görünür. Bu tür ilk AssociatedFile (varsa) label öğesini doldurmak için kullanılır alanına (C++ ürününde class_name olarak adlandırılır) gönderilir. display_name alanı, yerel ayarı ImageSegmenterOptions öğ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.