🚀 Essayez Zilliz Cloud, la version entièrement gérée de Milvus, gratuitement—découvrez des performances 10x plus rapides ! Essayez maintenant>>

milvus-logo
LFAI

Vue d'ensemble du système

  • Scenarios
August 29, 2020
milvus

Comme son nom l'indique, la recherche de vidéos par image consiste à extraire de la base de données les vidéos contenant des images similaires à l'image d'entrée. L'une des principales étapes consiste à transformer les vidéos en encastrements, c'est-à-dire à extraire les images clés et à convertir leurs caractéristiques en vecteurs. Certains lecteurs curieux pourraient se demander quelle est la différence entre la recherche d'une vidéo par image et la recherche d'une image par image. En fait, la recherche des images clés dans les vidéos est équivalente à la recherche d'une image par image.

Si cela vous intéresse, vous pouvez consulter notre précédent article Milvus x VGG : Building a Content-based Image Retrieval System (Milvus x VGG : construction d'un système de recherche d'images basé sur le contenu).

Vue d'ensemble du système

Le diagramme suivant illustre le flux de travail typique d'un tel système de recherche vidéo.

1-video-search-system-workflow.png 1-systeme-de-recherche-video.png

Lors de l'importation de vidéos, nous utilisons la bibliothèque OpenCV pour découper chaque vidéo en images, extraire les vecteurs des images clés à l'aide du modèle d'extraction de caractéristiques d'image VGG, puis insérer les vecteurs extraits (embeddings) dans Milvus. Nous utilisons Minio pour stocker les vidéos originales et Redis pour stocker les corrélations entre les vidéos et les vecteurs.

Lors de la recherche de vidéos, nous utilisons le même modèle VGG pour convertir l'image d'entrée en un vecteur de caractéristiques et l'insérer dans Milvus pour trouver les vecteurs présentant le plus de similitudes. Ensuite, le système extrait les vidéos correspondantes de Minio sur son interface en fonction des corrélations dans Redis.

Préparation des données

Dans cet article, nous utilisons environ 100 000 fichiers GIF de Tumblr comme échantillon de données pour construire une solution de bout en bout pour la recherche de vidéos. Vous pouvez utiliser vos propres référentiels vidéo.

Déploiement

Le code permettant de construire le système de recherche vidéo présenté dans cet article se trouve sur GitHub.

Étape 1 : Création d'images Docker.

Le système de recherche vidéo nécessite Milvus v0.7.1 docker, Redis docker, Minio docker, l'interface frontale docker et l'API back-end docker. Vous devez construire vous-même le docker de l'interface frontale et le docker de l'API back-end, tandis que vous pouvez extraire les trois autres dockers directement depuis Docker Hub.

# Get the video search code
$ git clone -b 0.10.0 https://github.com/JackLCL/search-video-demo.git

# Build front-end interface docker and api docker images
$ cd search-video-demo & make all

Étape 2 : Configurer l'environnement.

Ici, nous utilisons docker-compose.yml pour gérer les cinq conteneurs mentionnés ci-dessus. Voir le tableau suivant pour la configuration de docker-compose.yml :

2-configure-docker-compose-yml.png 2-configure-docker-compose-yml.png

L'adresse IP 192.168.1.38 dans le tableau ci-dessus est l'adresse du serveur spécialement conçu pour construire le système de récupération vidéo dans cet article. Vous devez la mettre à jour avec votre adresse de serveur.

Vous devez créer manuellement des répertoires de stockage pour Milvus, Redis et Minio, puis ajouter les chemins correspondants dans docker-compose.yml. Dans cet exemple, nous avons créé les répertoires suivants :

/mnt/redis/data /mnt/minio/data /mnt/milvus/db

Vous pouvez configurer Milvus, Redis et Minio dans docker-compose.yml comme suit :

3-configure-milvus-redis-minio-docker-compose-yml.png 3-configure-milvus-redis-minio-docker-compose-yml.png

Étape 3 : Démarrer le système.

Utilisez le fichier docker-compose.yml modifié pour démarrer les cinq conteneurs docker qui seront utilisés dans le système de recherche vidéo :

$ docker-compose up -d

Ensuite, vous pouvez exécuter docker-compose ps pour vérifier si les cinq conteneurs docker ont démarré correctement. La capture d'écran suivante montre une interface typique après un démarrage réussi.

4-sucessful-setup.png 4-sucessful-setup.png

Vous avez maintenant construit avec succès un système de recherche vidéo, bien que la base de données ne contienne aucune vidéo.

Étape 4 : Importer des vidéos.

Dans le répertoire de déploiement du référentiel du système, vous trouverez import_data.py, le script d'importation des vidéos. Il vous suffit de mettre à jour le chemin d'accès aux fichiers vidéo et l'intervalle d'importation pour exécuter le script.

5-update-path-video.png 5-mise-a-jour-du-chemin-video.png

chemin_données : Le chemin d'accès aux vidéos à importer.

time.sleep(0.5) : L'intervalle auquel le système importe les vidéos. Le serveur que nous utilisons pour construire le système de recherche vidéo dispose de 96 cœurs de processeur. Il est donc recommandé de fixer l'intervalle à 0,5 seconde. Réglez l'intervalle sur une valeur plus élevée si votre serveur dispose de moins de cœurs de CPU. Sinon, le processus d'importation pèsera sur l'unité centrale et créera des processus zombies.

Exécutez import_data.py pour importer les vidéos.

$ cd deploy
$ python3 import_data.py

Une fois les vidéos importées, vous disposez de votre propre système de recherche vidéo !

Affichage de l'interface

Ouvrez votre navigateur et entrez 192.168.1.38:8001 pour voir l'interface du système de recherche vidéo comme indiqué ci-dessous.

6-video-search-interface.png 6-video-search-interface.png

Cliquez sur le bouton en haut à droite pour afficher toutes les vidéos du dépôt.

7-view-all-videos-repository.png 7-view-all-videos-repository.png

Cliquez sur la boîte de téléchargement en haut à gauche pour saisir une image cible. Comme indiqué ci-dessous, le système renvoie les vidéos contenant les images les plus similaires.

8-enjoy-recommender-system-cats.png 8-enjoy-recommender-system-cats.png

Ensuite, amusez-vous avec notre système de recherche vidéo !

Créez le vôtre

Dans cet article, nous avons utilisé Milvus pour créer un système de recherche de vidéos par images. Cela illustre l'application de Milvus dans le traitement des données non structurées.

Milvus est compatible avec de nombreux frameworks d'apprentissage profond et permet d'effectuer des recherches en quelques millisecondes pour des vecteurs à l'échelle de milliards. N'hésitez pas à emmener Milvus avec vous dans d'autres scénarios d'IA : https://github.com/milvus-io/milvus.

Ne soyez pas un inconnu, suivez-nous sur Twitter ou rejoignez-nous sur Slack!👇🏻

Like the article? Spread the word

Continuer à Lire