La recherche d'images permet de rechercher 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 Nearest Neighbours).
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. De nouveaux éléments peuvent être ajoutés en reconstruisant simplement l'index. Cela permet également de travailler avec des bases de données d’images plus grandes (plus de 100 000 éléments).
Utilisez l'API ImageSearcher
de la bibliothèque de tâches pour déployer votre chercheur d'images personnalisé dans vos applications mobiles.
Principales fonctionnalités de l'API ImageSearcher
Prend une seule image en entrée, effectue une extraction par intégration et une recherche du voisin le plus proche dans l'index.
Traitement de l'image 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.
Conditions préalables
Avant d'utiliser l'API ImageSearcher
, un index doit être créé en fonction du corpus personnalisé d'images dans lequel effectuer la recherche. Ceci peut être réalisé à l'aide de l'API Model Maker Searcher en suivant et en adaptant le didacticiel .
Pour cela vous aurez besoin de :
- un modèle d'intégration d'images TFLite tel que mobilenet v3 . Découvrez d'autres modèles d'intégration pré-entraînés (alias modèles vectoriels de fonctionnalités) de la collection Google Image Modules sur TensorFlow Hub .
- 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 attaché dans les métadonnées du modèle TFLite .
Exécuter l'inférence en Java
Étape 1 : Importer la dépendance Gradle et d'autres paramètres
Copiez le fichier de modèle de recherche .tflite
dans le répertoire d'actifs du module Android où le modèle sera exécuté. Spécifiez 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 (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'
}
Étape 2 : Utilisation du 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);
Voir le code source et javadoc pour plus d'options pour configurer ImageSearcher
.
Exécuter l'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();
Consultez le code source pour plus d'options pour configurer ImageSearcher
.
Exécuter l'inférence en Python
Étape 1 : Installez le package Pypi de support TensorFlow Lite.
Vous pouvez installer le package Pypi TensorFlow Lite Support à l'aide de la commande suivante :
pip install tflite-support
Étape 2 : Utilisation du 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)
Consultez le code source pour plus d'options pour configurer ImageSearcher
.
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 CLI simple pour ImageSearcher avec votre propre modèle et vos données de test.