دمج أدوات دمج الصور

تسمح أدوات دمج الصور بتضمين الصور في ناقل المعالم عالي الأبعاد الذي يمثل المعنى الدلالي للصورة، والذي يمكن بعد ذلك مقارنته مع ناقل المعالم للصور الأخرى لتقييم التشابه الدلالي بينها.

على عكس البحث عن الصور ، يسمح برنامج تضمين الصور بحساب التشابه بين الصور بسرعة بدلاً من البحث من خلال فهرس محدد مسبقًا تم إنشاؤه من مجموعة من الصور.

استخدم واجهة برمجة تطبيقات ImageEmbedder لمكتبة المهام لنشر أداة تضمين الصور المخصصة في تطبيقات الهاتف المحمول الخاصة بك.

الميزات الرئيسية لواجهة برمجة تطبيقات ImageEmbedder

  • معالجة الصور المدخلة، بما في ذلك التدوير وتغيير الحجم وتحويل مساحة اللون.

  • منطقة الاهتمام لصورة الإدخال.

  • وظيفة الأداة المساعدة المضمنة لحساب تشابه جيب التمام بين ناقلات الميزات.

نماذج تضمين الصور المدعومة

نضمن أن تكون النماذج التالية متوافقة مع ImageEmbedder API.

تشغيل الاستدلال في C++

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

تشغيل الاستدلال في بيثون

الخطوة 1: تثبيت حزمة TensorFlow Lite Support Pypi.

يمكنك تثبيت حزمة TensorFlow Lite Support Pypi باستخدام الأمر التالي:

pip install tflite-support

الخطوة 2: استخدام النموذج

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 .

نتائج المثال

يُرجع تشابه جيب التمام بين ناقلات المعالم المقيسة درجة تتراوح بين -1 و1. الأعلى هو الأفضل، أي أن تشابه جيب التمام 1 يعني أن المتجهين متطابقان.

Cosine similarity: 0.954312

جرب أداة CLI التجريبية البسيطة لـ ImageEmbedder باستخدام النموذج الخاص بك وبيانات الاختبار.

متطلبات توافق النموذج

تتوقع واجهة برمجة تطبيقات ImageEmbedder نموذج TFLite مع بيانات تعريف نموذج TFLite اختيارية، ولكن موصى بها بشدة.

يجب أن تستوفي نماذج تضمين الصور المتوافقة المتطلبات التالية:

  • موتر صورة الإدخال (kTfLiteUInt8/kTfLiteFloat32)

    • حجم إدخال الصورة [batch x height x width x channels] .
    • استنتاج الدُفعة غير مدعوم (يُشترط أن تكون batch 1).
    • يتم دعم مدخلات RGB فقط (يجب أن تكون channels 3).
    • إذا كان النوع هو kTfLiteFloat32، فيجب إرفاق خيارات التسوية بالبيانات التعريفية لتسوية الإدخال.
  • موتر إخراج واحد على الأقل (kTfLiteUInt8/kTfLiteFloat32)

    • مع مكونات N المقابلة للأبعاد N لمتجه المعالم الذي تم إرجاعه لطبقة الإخراج هذه.
    • إما 2 أو 4 أبعاد، أي [1 x N] أو [1 x 1 x 1 x N] .