4 pasos para crear un sistema de búsqueda de videos
Como su nombre indica, buscar videos por imagen es el proceso de recuperar del repositorio videos que contienen fotogramas similares a la imagen de entrada. Uno de los pasos clave es convertir los videos en embeddings, es decir, extraer los fotogramas clave y convertir sus características en vectores. Ahora bien, algunos lectores curiosos podrían preguntarse cuál es la diferencia entre buscar un video por imagen y buscar una imagen por imagen. De hecho, buscar los fotogramas clave en videos equivale a buscar una imagen por imagen.
Puedes consultar nuestro artículo anterior Milvus x VGG: Building a Content-based Image Retrieval System si te interesa.
Descripción general del sistema2
El siguiente diagrama ilustra el flujo de trabajo típico de un sistema de búsqueda de videos de este tipo.
Flujo de trabajo del sistema de búsqueda de videos.
Al importar videos, usamos la biblioteca OpenCV para cortar cada video en fotogramas, extraer vectores de los fotogramas clave usando el modelo de extracción de características de imágenes VGG, y luego insertar los vectores extraídos (embeddings) en Milvus. Usamos Minio para almacenar los videos originales y Redis para almacenar las correlaciones entre videos y vectores.
Al buscar videos, usamos el mismo modelo VGG para convertir la imagen de entrada en un vector de características e insertarlo en Milvus para encontrar los vectores con la mayor similitud. Luego, el sistema recupera los videos correspondientes desde Minio en su interfaz según las correlaciones en Redis.
Preparación de datos
En este artículo, usamos alrededor de 100.000 archivos GIF de Tumblr como conjunto de datos de muestra para crear una solución integral para buscar videos. Puedes usar tus propios repositorios de videos.
Implementación
El código para crear el sistema de recuperación de videos de este artículo está en GitHub.
Paso 1: Crear imágenes Docker.
El sistema de recuperación de videos requiere Milvus v0.7.1 docker, Redis docker, Minio docker, el docker de la interfaz front-end y el docker de la API back-end. Debes crear por tu cuenta el docker de la interfaz front-end y el docker de la API back-end, mientras que puedes descargar los otros tres dockers directamente desde 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
Paso 2: Configurar el entorno.
Aquí usamos docker-compose.yml para gestionar los cinco contenedores mencionados anteriormente. Consulta la siguiente tabla para ver la configuración de docker-compose.yml:
Configurar docker compose.
La dirección IP 192.168.1.38 en la tabla anterior es la dirección del servidor específicamente para crear el sistema de recuperación de videos en este artículo. Debes actualizarla a la dirección de tu servidor.
Debes crear manualmente directorios de almacenamiento para Milvus, Redis y Minio, y luego añadir las rutas correspondientes en docker-compose.yml. En este ejemplo, creamos los siguientes directorios:
/mnt/redis/data /mnt/minio/data /mnt/milvus/db
Puedes configurar Milvus, Redis y Minio en docker-compose.yml de la siguiente manera:
Configurar Milvus, Redis, MinIO, Docker-compose.
Paso 3: Iniciar el sistema.
Usa el docker-compose.yml modificado para iniciar los cinco contenedores docker que se utilizarán en el sistema de recuperación de videos:
$ docker-compose up -d
Luego, puedes ejecutar docker-compose ps para comprobar si los cinco contenedores docker se han iniciado correctamente. La siguiente captura de pantalla muestra una interfaz típica después de un inicio exitoso.
Configuración exitosa.
Ahora has creado con éxito un sistema de búsqueda de videos, aunque la base de datos no tiene videos.
Paso 4: Importar videos.
En el directorio deploy del repositorio del sistema, se encuentra import_data.py, un script para importar videos. Solo necesitas actualizar la ruta a los archivos de video y el intervalo de importación para ejecutar el script.
Actualizar ruta de video.
data_path: La ruta a los videos que se van a importar.
time.sleep(0.5): El intervalo en el que el sistema importa videos. El servidor que usamos para crear el sistema de búsqueda de videos tiene 96 núcleos de CPU. Por lo tanto, se recomienda establecer el intervalo en 0,5 segundos. Establece el intervalo en un valor mayor si tu servidor tiene menos núcleos de CPU. De lo contrario, el proceso de importación supondrá una carga para la CPU y creará procesos zombi.
Ejecuta import_data.py para importar videos.
$ cd deploy
$ python3 import_data.py
Una vez importados los videos, ¡ya tienes listo tu propio sistema de búsqueda de videos!
Visualización de la interfaz
Abre tu navegador e introduce 192.168.1.38:8001 para ver la interfaz del sistema de búsqueda de videos como se muestra a continuación.
Interfaz de búsqueda de videos.
Activa el interruptor de engranaje en la parte superior derecha para ver todos los videos del repositorio.
Ver todos los videos.
Haz clic en el cuadro de carga en la parte superior izquierda para introducir una imagen objetivo. Como se muestra a continuación, el sistema devuelve videos que contienen los fotogramas más similares.
Disfruta de un sistema recomendador de gatos.
A continuación, ¡diviértete con nuestro sistema de búsqueda de videos!
Crea el tuyo propio
En este artículo, usamos Milvus para crear un sistema de búsqueda de videos por imágenes. Esto ejemplifica la aplicación de Milvus en el procesamiento de datos no estructurados.
Milvus es compatible con múltiples frameworks de aprendizaje profundo, y hace posibles búsquedas en milisegundos para vectores a escala de miles de millones. No dudes en llevar Milvus contigo a más escenarios de IA: https://github.com/milvus-io/milvus.
No seas un extraño, síguenos en Twitter o únete a nosotros en Slack!👇🏻
Sigue leyendo

Migrating Self-Managed Milvus to Zilliz Cloud for >99% Latency Reduction
Step-by-step guide to migrating 50M vectors from self-managed Milvus to Zilliz Cloud using milvus-backup. Achieve >99% query latency reduction with zero data loss.

Announcing the General Availability of Zilliz Cloud BYOC on Google Cloud Platform
Zilliz Cloud BYOC on GCP offers enterprise vector search with full data sovereignty and seamless integration.

Introducing DeepSearcher: A Local Open Source Deep Research
In contrast to OpenAI’s Deep Research, this example ran locally, using only open-source models and tools like Milvus and LangChain.



