התכונה 'חיפוש באמצעות תמונות' מאפשרת לחפש תמונות דומות במסד נתונים של תמונות. הוא פועל על ידי הטמעת שאילתת החיפוש בווקטור דו-ממדי גבוה המשמעות הסמנטית של השאילתה, ואחריה חיפוש דמיון אינדקס מוגדר מראש ומותאם אישית באמצעות ScaNN (שכנים קרובים ביותר שניתנים להתאמה).
בניגוד ל- סיווג תמונות, כשמרחיבים את מספר הפריטים שאפשר לזהות, אין צורך באימון מחדש את המודל כולו. ניתן להוסיף פריטים חדשים פשוט בונים מחדש את האינדקס. גם מאפשר לעבוד עם מסדי נתונים גדולים (יותר מ-100,000 פריטים) של תמונות.
משתמשים ב-API של ספריית המשימות ImageSearcher
כדי לפרוס את מחפש התמונות בהתאמה אישית
לאפליקציות שלכם לנייד.
תכונות עיקריות של ImageSearcher API
לוקח תמונה אחת כקלט, מבצע חילוץ הטמעה את החיפוש השכן הקרוב ביותר באינדקס.
עיבוד תמונות קלט, כולל סיבוב, שינוי גודל ומרחב צבעים להמרה.
אזור העניין של תמונת הקלט.
דרישות מוקדמות
לפני השימוש ב-API ImageSearcher
, צריך ליצור אינדקס על סמך
מותאמים אישית של תמונות לחיפוש. אפשר לעשות זאת באמצעות
Model Maker Searcher API
באמצעות מעקב אחר מודלים
מדריך.
לשם כך, צריך:
- מודל הטמעה של תמונות באמצעות TFLite, כמו mobilenet v3. ראו עוד מודלים של כלי הטמעה שעברו אימון מראש (שנקראים גם מודלים של וקטורי פיצ'רים) אוסף מודולים של תמונות Google במודלים של Kaggle.
- לקורפוס התמונות.
אחרי השלב הזה, צריך להיות לכם מודל נפרד לחיפוש באמצעות TFLite (למשל,
mobilenet_v3_searcher.tflite
), שהוא מודל ההטמעה המקורי של תמונות
את האינדקס שמצורף
מטא-נתונים של מודל TFLite.
הרצת ההסקה ב-Java
שלב 1: מייבאים תלות ב-Gradle והגדרות אחרות
מעתיקים את קובץ המודל של מכשיר החיפוש .tflite
לספריית הנכסים של Android.
שבו המודל יפעל. לציין שהקובץ לא יכול להיות
דחוסה ומוסיפים את ספריית TensorFlow Lite לbuild.gradle
של המודול
file:
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
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 מסוג Pypi.
אפשר להתקין את חבילת Pypi לתמיכה של TensorFlow Lite באמצעות הפקודה:
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 את המודל ונתוני הבדיקה שלכם.