La recherche d'images permet de trouver des images similaires dans une base de données d'images. Il fonctionne en intégrant la requête de recherche dans un vecteur de grande dimension représentant la signification sémantique de la requête, suivi d'une recherche de similarité dans un index personnalisé prédéfini à l'aide de ScaNN (Scalable Approximate Nearest Neighbor).
Contrairement à la classification d'images, l'augmentation du nombre d'éléments pouvant être reconnus ne nécessite pas de réentraîner l'intégralité du modèle. Pour ajouter des éléments, il suffit de reconstruire l'index. Cela permet également de travailler avec des bases de données d'images plus volumineuses (plus de 100 000 éléments).
Utilisez l'API Task Library ImageSearcher pour déployer votre outil de recherche d'images personnalisé dans vos applications mobiles.
Principales fonctionnalités de l'API ImageSearcher
Prend une seule image en entrée, extrait les embeddings et effectue une recherche des plus proches voisins dans l'index.
Traitement des images d'entrée, y compris la rotation, le redimensionnement et la conversion de l'espace colorimétrique.
Région d'intérêt de l'image d'entrée.
Prérequis
Avant d'utiliser l'API ImageSearcher, un index doit être créé en fonction du corpus d'images personnalisé dans lequel effectuer la recherche. Pour ce faire, vous pouvez utiliser l'API Model Maker Searcher en suivant et en adaptant le tutoriel.
Pour cela, vous aurez besoin des éléments suivants :
- un modèle d'intégration d'images TFLite tel que mobilenetv3.
Découvrez d'autres modèles d'embedding pré-entraînés (également appelés modèles de vecteurs de caractéristiques) dans la collection de modules d'images Google sur Kaggle Models.
- votre corpus d'images.
Après cette étape, vous devriez disposer d'un modèle de recherche TFLite autonome (par exemple, mobilenet_v3_searcher.tflite), qui est le modèle d'intégration d'images d'origine avec l'index associé aux métadonnées du modèle TFLite.
Exécuter une inférence en Java
Étape 1 : Importer la dépendance Gradle et d'autres paramètres
Copiez le fichier de modèle du moteur de recherche .tflite dans le répertoire des éléments du module Android dans lequel le modèle sera exécuté. Indiquez que le fichier ne doit pas être compressé et ajoutez la bibliothèque TensorFlow Lite au fichier build.gradle du module :
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'
}
Étape 2 : Utiliser le modèle
// 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);
Consultez le code source et le Javadoc pour découvrir d'autres options de configuration de ImageSearcher.
Exécuter une inférence en 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();
Pour découvrir d'autres options de configuration de ImageSearcher, consultez le code source.
Exécuter l'inférence en Python
Étape 1 : Installez le package Pypi TensorFlow Lite Support.
Vous pouvez installer le package Pypi TensorFlow Lite Support à l'aide de la commande suivante :
pip install tflite-support
Étape 2 : Utiliser le modèle
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)
Pour découvrir d'autres options de configuration de ImageSearcher, consultez le code source.
Exemples de résultats
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
Essayez l'outil de démonstration simple de l'interface de ligne de commande pour ImageSearcher avec votre propre modèle et vos propres données de test.