שלב מחפשי תמונות

חיפוש תמונות מאפשר חיפוש תמונות דומות במאגר תמונות. זה עובד על ידי הטמעת שאילתת החיפוש לתוך וקטור ממדי גבוה המייצג את המשמעות הסמנטית של השאילתה, ולאחר מכן חיפוש דמיון באינדקס מוגדר מראש, מותאם אישית באמצעות ScaNN (Scalable Nearest Neighbors).

בניגוד לסיווג תמונה , הרחבת מספר הפריטים שניתן לזהות אינה מצריכה אימון מחדש של הדגם כולו. ניתן להוסיף פריטים חדשים פשוט לבנות מחדש את האינדקס. זה גם מאפשר עבודה עם מסדי נתונים גדולים יותר (100 אלף פריטים+) של תמונות.

השתמש ב-Task Library ImageSearcher API כדי לפרוס את מחפש התמונות המותאם אישית שלך באפליקציות לנייד שלך.

תכונות עיקריות של ImageSearcher API

  • לוקח תמונה בודדת כקלט, מבצע מיצוי הטמעה וחיפוש של השכן הקרוב באינדקס.

  • עיבוד תמונה של קלט, כולל סיבוב, שינוי גודל והמרת מרחב צבע.

  • אזור העניין של תמונת הקלט.

דרישות מוקדמות

לפני השימוש ב- ImageSearcher API, יש לבנות אינדקס המבוסס על קורפוס התמונות המותאם אישית לחיפוש. ניתן להשיג זאת באמצעות ה-API של Model Maker Searcher על ידי מעקב והתאמת המדריך .

בשביל זה תצטרך:

לאחר שלב זה, אמור להיות לך מודל חיפוש עצמאי של TFLite (למשל mobilenet_v3_searcher.tflite ), שהוא מודל הטבעת התמונה המקורית עם האינדקס המצורף ל- TFLite Model Metadata .

הפעל הסקה ב-Java

שלב 1: ייבא תלות Gradle והגדרות אחרות

העתק את קובץ מודל החיפוש .tflite לספריית הנכסים של מודול האנדרואיד שבו המודל יופעל. ציין שאין לדחוס את הקובץ, והוסף את ספריית TensorFlow Lite לקובץ build.gradle של המודול:

android {
    // Other settings

    // Specify tflite index 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:0.4.4'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}

שלב 2: שימוש במודל

// Initialization
ImageSearcherOptions options =
    ImageSearcherOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setSearcherOptions(
            SearcherOptions.builder().setL2Normalize(true).build())
        .build();
ImageSearcher imageSearcher =
    ImageSearcher.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<NearestNeighbor> results = imageSearcher.search(image);

עיין בקוד המקור וב-javadoc לאפשרויות נוספות להגדרת ה- ImageSearcher .

הפעל מסקנות ב-C++

// Initialization
ImageSearcherOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
options.mutable_embedding_options()->set_l2_normalize(true);
std::unique_ptr<ImageSearcher> image_searcher = ImageSearcher::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 SearchResult result = image_searcher->Search(*frame_buffer).value();

עיין בקוד המקור לקבלת אפשרויות נוספות להגדרת ImageSearcher .

הפעל מסקנות ב- Python

שלב 1: התקן את חבילת TensorFlow Lite Support Pypi.

אתה יכול להתקין את חבילת TensorFlow Lite Support Pypi באמצעות הפקודה הבאה:

pip install tflite-support

שלב 2: שימוש במודל

from tflite_support.task import vision

# Initialization
image_searcher = vision.ImageSearcher.create_from_file(model_path)

# Run inference
image = vision.TensorImage.create_from_file(image_file)
result = image_searcher.search(image)

עיין בקוד המקור לקבלת אפשרויות נוספות להגדרת ImageSearcher .

תוצאות לדוגמה

Results:
 Rank#0:
  metadata: burger
  distance: 0.13452
 Rank#1:
  metadata: car
  distance: 1.81935
 Rank#2:
  metadata: bird
  distance: 1.96617
 Rank#3:
  metadata: dog
  distance: 2.05610
 Rank#4:
  metadata: cat
  distance: 2.06347

נסה את כלי ההדגמה הפשוט של CLI עבור ImageSearcher עם מודל ונתוני בדיקה משלך.