4 étapes pour construire un système de recherche vidéo
Comme son nom l’indique, la recherche de vidéos par image est le processus qui consiste à récupérer, depuis le référentiel, des vidéos contenant des images similaires à l’image d’entrée. L’une des étapes clés consiste à transformer les vidéos en embeddings, c’est-à-dire à extraire les images clés et à convertir leurs caractéristiques en vecteurs. Maintenant, certains lecteurs curieux pourraient se demander quelle est la différence entre rechercher une vidéo par image et rechercher une image par image ? En fait, rechercher les images clés dans des vidéos équivaut à rechercher une image par image.
Vous pouvez consulter notre article précédent Milvus x VGG : Construire un système de recherche d’images basée sur le contenu si cela vous intéresse.
Aperçu du système2
Le diagramme suivant illustre le flux de travail typique d’un tel système de recherche vidéo.
Flux de travail du système de recherche vidéo.
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 vecteur de caractéristiques et l’insérer dans Milvus afin de trouver les vecteurs présentant la plus grande similarité. Ensuite, le système récupère les vidéos correspondantes depuis Minio sur son interface, selon les corrélations dans Redis.
Préparation des données
Dans cet article, nous utilisons environ 100 000 fichiers GIF provenant de Tumblr comme jeu de données d’exemple pour construire une solution de bout en bout de 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 dans cet article est sur GitHub.
Étape 1 : Construire les images Docker.
Le système de recherche vidéo nécessite Milvus v0.7.1 docker, Redis docker, Minio docker, le docker de l’interface front-end et le docker de l’API back-end. Vous devez construire vous-même le docker de l’interface front-end et le docker de l’API back-end, tandis que vous pouvez récupérer les trois autres dockers directement depuis Docker Hub.
# Obtenir le code de recherche vidéo
$ git clone -b 0.10.0 https://github.com/JackLCL/search-video-demo.git
# Construire les images docker de l’interface front-end et de l’api
$ 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. Consultez le tableau suivant pour la configuration de docker-compose.yml :
Configurer docker compose.
L’adresse IP 192.168.1.38 dans le tableau ci-dessus est l’adresse du serveur utilisée spécialement pour construire le système de recherche vidéo dans cet article. Vous devez la remplacer par l’adresse de votre 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 :
Configurer Milvus, Redis, MinIO, Docker-compose.
Étape 3 : Démarrer le système.
Utilisez le docker-compose.yml modifié pour démarrer les cinq conteneurs docker à utiliser 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.
Configuration réussie.
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 deploy du dépôt du système se trouve import_data.py, un script permettant d’importer des vidéos. Il vous suffit de mettre à jour le chemin vers les fichiers vidéo et l’intervalle d’importation pour exécuter le script.
Mettre à jour le chemin des vidéos.
data_path : Le chemin vers les vidéos à importer.
time.sleep(0.5) : L’intervalle auquel le système importe les vidéos. Le serveur que nous utilisons pour créer le système de recherche vidéo dispose de 96 cœurs CPU. Il est donc recommandé de définir l’intervalle sur 0,5 seconde. Définissez l’intervalle sur une valeur plus élevée si votre serveur dispose de moins de cœurs CPU. Sinon, le processus d’importation sollicitera fortement le CPU 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, votre propre système de recherche vidéo est prêt !
Affichage de l’interface
Ouvrez votre navigateur et saisissez 192.168.1.38:8001 pour voir l’interface du système de recherche vidéo, comme indiqué ci-dessous.
Interface de recherche vidéo.
Activez le bouton en forme d’engrenage en haut à droite pour afficher toutes les vidéos du dépôt.
Voir toutes les vidéos.
Cliquez sur la zone de téléversement 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.
Profitez d’un système de recommandation de chats.
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 permettant de rechercher des vidéos à partir d’images. Cela illustre l’application de Milvus dans le traitement de données non structurées.
Milvus est compatible avec plusieurs frameworks de deep learning, et il permet des recherches en quelques millisecondes sur des vecteurs à l’échelle de milliards. N’hésitez pas à emmener Milvus avec vous dans davantage de scénarios d’IA : https://github.com/milvus-io/milvus.
Ne soyez pas un inconnu, suivez-nous sur Twitter ou rejoignez-nous sur Slack!👇🏻
Continuer à lire

Why AI Databases Don't Need SQL
Whether you like it or not, here's the truth: SQL is destined for decline in the era of AI.

Proactive Monitoring for Vector Database: Zilliz Cloud Integrates with Datadog
we're excited to announce Zilliz Cloud's integration with Datadog, enabling comprehensive monitoring and observability for your vectorDB deployments.

Vector Databases vs. Hierarchical Databases
Use a vector database for AI-powered similarity search; use a hierarchical database for organizing data in parent-child relationships with efficient top-down access patterns.



