Resim yerleştirme araçlarını entegre edin

Resim yerleştiriciler, resimlerin anlamsal anlamını temsil eden yüksek boyutlu bir özellik vektörüne resimlerin yerleştirilmesine olanak tanır. Bu özellik vektörü, anlamsal benzerliklerini değerlendirmek için diğer resimlerin özellik vektörüyle karşılaştırılabilir.

Görsel arama'nın aksine, görsel yerleştirici, bir görsel derlemesinden oluşturulan önceden tanımlanmış bir dizinde arama yapmak yerine, görseller arasındaki benzerliği anında hesaplamaya olanak tanır.

Özel resim yerleştiricinizi mobil uygulamalarınıza dağıtmak için Görev Kitaplığı ImageEmbedder API'sini kullanın.

ImageEmbedder 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.

  • Giriş resminin ilgi alanı.

  • Özellik vektörleri arasındaki kosinüs benzerliğini hesaplamak için yerleşik yardımcı işlev.

Desteklenen görüntü yerleştirme modelleri

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

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

// Initialization
ImageEmbedderOptions options:
options.mutable_model_file_with_metadata()->set_file_name(model_path);
options.set_l2_normalize(true);
std::unique_ptr<ImageEmbedder> image_embedder = ImageEmbedder::CreateFromOptions(options).value();

// Create input frame_buffer_1 and frame_buffer_2 from your inputs `image_data1`, `image_data2`, `image_dimension1` and `image_dimension2`.
// See more information here: tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.h
std::unique_ptr<FrameBuffer> frame_buffer_1 = CreateFromRgbRawBuffer(
      image_data1, image_dimension1);
std::unique_ptr<FrameBuffer> frame_buffer_2 = CreateFromRgbRawBuffer(
      image_data2, image_dimension2);

// Run inference on two images.
const EmbeddingResult result_1 = image_embedder->Embed(*frame_buffer_1);
const EmbeddingResult result_2 = image_embedder->Embed(*frame_buffer_2);

// Compute cosine similarity.
double similarity = ImageEmbedder::CosineSimilarity(
    result_1.embeddings[0].feature_vector(),
    result_2.embeddings[0].feature_vector());

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

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

1. adım: TensorFlow Lite Support Pypi paketini yükleyin.

Aşağıdaki komutu kullanarak TensorFlow Lite Support Pypi paketini yükleyebilirsiniz:

pip install tflite-support

2. adım: Modeli kullanma

from tflite_support.task import vision

# Initialization.
image_embedder = vision.ImageEmbedder.create_from_file(model_path)

# Run inference on two images.
image_1 = vision.TensorImage.create_from_file('/path/to/image1.jpg')
result_1 = image_embedder.embed(image_1)
image_2 = vision.TensorImage.create_from_file('/path/to/image2.jpg')
result_2 = image_embedder.embed(image_2)

# Compute cosine similarity.
feature_vector_1 = result_1.embeddings[0].feature_vector
feature_vector_2 = result_2.embeddings[0].feature_vector
similarity = image_embedder.cosine_similarity(
    result_1.embeddings[0].feature_vector, result_2.embeddings[0].feature_vector)

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

Örnek sonuçlar

Normallenmiş özellik vektörleri arasındaki kosinüs benzerliği, -1 ile 1 arasında bir puan döndürür. Değer ne kadar yüksek olursa o kadar iyidir. Örneğin, kosinüs benzerliğinin 1 olması iki vektörün aynı olduğu anlamına gelir.

Cosine similarity: 0.954312

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

Model uyumluluğu koşulları

ImageEmbedder API, isteğe bağlı ancak kesinlikle önerilen TFLite Model Meta Verileri içeren bir TFLite modeli bekler.

Uyumlu resim yerleştirme modelleri aşağıdaki koşulları karşılamalıdır:

  • Giriş resmi 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.
  • En az bir çıkış tensörü (kTfLiteUInt8/kTfLiteFloat32)

    • Bu çıkış katmanı için döndürülen özellik vektörünün N boyutlarına karşılık gelen N bileşenle.
    • 2 veya 4 boyut, yani [1 x N] veya [1 x 1 x 1 x N].