Panoramica del sistema
Come suggerisce il nome, la ricerca di video in base all'immagine è il processo di recupero dei video che contengono fotogrammi simili all'immagine in ingresso. Uno dei passaggi chiave è quello di trasformare i video in embeddings, cioè di estrarre i fotogrammi chiave e convertire le loro caratteristiche in vettori. Ora, qualche lettore curioso potrebbe chiedersi che differenza c'è tra la ricerca di un video per immagine e la ricerca di un'immagine per immagine? In effetti, la ricerca dei fotogrammi chiave nei video è equivalente alla ricerca di un'immagine per immagine.
Se siete interessati, potete consultare il nostro precedente articolo Milvus x VGG: Building a Content-based Image Retrieval System.
Panoramica del sistema
Il diagramma seguente illustra il flusso di lavoro tipico di un sistema di ricerca video di questo tipo.
1-video-search-system-workflow.png
Quando importiamo i video, usiamo la libreria OpenCV per tagliare ogni video in fotogrammi, estrarre i vettori dei fotogrammi chiave usando il modello di estrazione delle caratteristiche delle immagini VGG e poi inserire i vettori estratti (embeddings) in Milvus. Utilizziamo Minio per memorizzare i video originali e Redis per memorizzare le correlazioni tra video e vettori.
Per la ricerca dei video, utilizziamo lo stesso modello VGG per convertire l'immagine di ingresso in un vettore di caratteristiche e inserirlo in Milvus per trovare i vettori con la maggiore somiglianza. Quindi, il sistema recupera i video corrispondenti da Minio sulla sua interfaccia in base alle correlazioni in Redis.
Preparazione dei dati
In questo articolo, utilizziamo circa 100.000 file GIF da Tumblr come set di dati campione per costruire una soluzione end-to-end per la ricerca di video. È possibile utilizzare i propri archivi video.
Implementazione
Il codice per la costruzione del sistema di recupero video in questo articolo è su GitHub.
Passo 1: Creare immagini Docker.
Il sistema di recupero video richiede Milvus v0.7.1 docker, Redis docker, Minio docker, il docker dell'interfaccia front-end e il docker dell'API back-end. È necessario costruire da soli il docker dell'interfaccia front-end e il docker dell'API back-end, mentre gli altri tre docker possono essere prelevati direttamente da 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
Passo 2: Configurare l'ambiente.
Qui usiamo docker-compose.yml per gestire i cinque contenitori di cui sopra. Vedere la seguente tabella per la configurazione di docker-compose.yml:
2-configure-docker-compose-yml.png
L'indirizzo IP 192.168.1.38 nella tabella precedente è l'indirizzo del server utilizzato per costruire il sistema di recupero video in questo articolo. È necessario aggiornarlo con l'indirizzo del proprio server.
È necessario creare manualmente le directory di archiviazione per Milvus, Redis e Minio e aggiungere i percorsi corrispondenti in docker-compose.yml. In questo esempio, abbiamo creato le seguenti directory:
/mnt/redis/data /mnt/minio/data /mnt/milvus/db
È possibile configurare Milvus, Redis e Minio in docker-compose.yml come segue:
3-configure-milvus-redis-minio-docker-compose-yml.png
Passo 3: avviare il sistema.
Usare il file docker-compose.yml modificato per avviare i cinque contenitori docker da usare nel sistema di recupero video:
$ docker-compose up -d
Quindi, si può eseguire docker-compose ps per verificare se i cinque contenitori docker sono stati avviati correttamente. La seguente schermata mostra un'interfaccia tipica dopo un avvio riuscito.
4-avvio-successivo.png
Ora è stato creato con successo un sistema di ricerca video, anche se il database non contiene video.
Passo 4: Importare i video.
Nella cartella deploy del repository del sistema, si trova import_data.py, lo script per importare i video. È sufficiente aggiornare il percorso dei file video e l'intervallo di importazione per eseguire lo script.
5-aggiornamento-percorso-video.png
percorso_dati: Il percorso dei video da importare.
time.sleep(0,5): L'intervallo in cui il sistema importa i video. Il server utilizzato per costruire il sistema di ricerca video ha 96 core di CPU. Pertanto, si consiglia di impostare l'intervallo a 0,5 secondi. Se il vostro server ha meno core di CPU, impostate un valore maggiore. In caso contrario, il processo di importazione graverà sulla CPU e creerà processi zombie.
Eseguire import_data.py per importare i video.
$ cd deploy
$ python3 import_data.py
Una volta importati i video, il sistema di ricerca dei video è pronto!
Visualizzazione dell'interfaccia
Aprire il browser e digitare 192.168.1.38:8001 per visualizzare l'interfaccia del sistema di ricerca video, come mostrato di seguito.
6-video-search-interface.png
Attivare l'interruttore a forma di ingranaggio in alto a destra per visualizzare tutti i video presenti nel repository.
7-view-all-videos-repository.png
Fare clic sulla casella di caricamento in alto a sinistra per inserire un'immagine di destinazione. Come mostrato di seguito, il sistema restituisce i video contenenti i fotogrammi più simili.
8-godere del sistema-raccomandante-gatti.png
Divertitevi con il nostro sistema di ricerca video!
Costruire il proprio
In questo articolo abbiamo usato Milvus per costruire un sistema di ricerca di video per immagini. Questo esemplifica l'applicazione di Milvus nell'elaborazione di dati non strutturati.
Milvus è compatibile con diversi framework di deep learning e rende possibili ricerche in millisecondi per vettori su scala miliardaria. Sentitevi liberi di portare Milvus con voi in altri scenari di AI: https://github.com/milvus-io/milvus.
Non essere un estraneo, seguici su Twitter o unisciti a noi su Slack!👇🏻
- Preparazione dei dati
- Implementazione
- Passo 2: Configurare l'ambiente.
- Passo 3: avviare il sistema.
- Passo 4: Importare i video.
- Visualizzazione dell'interfaccia
- Costruire il proprio
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word