חיפוש תמונות מאפשר חיפוש תמונות דומות במאגר תמונות. זה עובד על ידי הטמעת שאילתת החיפוש לתוך וקטור ממדי גבוה המייצג את המשמעות הסמנטית של השאילתה, ולאחר מכן חיפוש דמיון באינדקס מוגדר מראש, מותאם אישית באמצעות ScaNN (Scalable Nearest Neighbors).
בניגוד לסיווג תמונה , הרחבת מספר הפריטים שניתן לזהות אינה מצריכה אימון מחדש של הדגם כולו. ניתן להוסיף פריטים חדשים פשוט לבנות מחדש את האינדקס. זה גם מאפשר עבודה עם מסדי נתונים גדולים יותר (100 אלף פריטים+) של תמונות.
השתמש ב-Task Library ImageSearcher
API כדי לפרוס את מחפש התמונות המותאם אישית שלך באפליקציות לנייד שלך.
תכונות עיקריות של ImageSearcher API
לוקח תמונה בודדת כקלט, מבצע מיצוי הטמעה וחיפוש של השכן הקרוב באינדקס.
עיבוד תמונה של קלט, כולל סיבוב, שינוי גודל והמרת מרחב צבע.
אזור העניין של תמונת הקלט.
דרישות מוקדמות
לפני השימוש ב- ImageSearcher
API, יש לבנות אינדקס המבוסס על קורפוס התמונות המותאם אישית לחיפוש. ניתן להשיג זאת באמצעות ה-API של Model Maker Searcher על ידי מעקב והתאמת המדריך .
בשביל זה תצטרך:
- דגם הטמעת תמונה של TFLite כגון mobilenet v3 . ראה עוד דגמי הטמעה מאומנים מראש (המכונה גם דגמי וקטור תכונה) מאוסף Google Image Modules ב- TensorFlow Hub .
- קורפוס התמונות שלך.
לאחר שלב זה, אמור להיות לך מודל חיפוש עצמאי של 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 עם מודל ונתוני בדיקה משלך.