🚀 Prueba Zilliz Cloud, el Milvus completamente gestionado, gratis—¡experimenta un rendimiento 10 veces más rápido! Prueba Ahora>>

milvus-logo
LFAI

Visión general del sistema

  • Scenarios
August 29, 2020
milvus

Como su nombre indica, la búsqueda de vídeos por imagen es el proceso de recuperar del repositorio vídeos que contengan fotogramas similares a la imagen de entrada. Uno de los pasos clave es convertir los vídeos en incrustaciones, es decir, extraer los fotogramas clave y convertir sus características en vectores. Ahora bien, algunos lectores curiosos se preguntarán cuál es la diferencia entre buscar un vídeo por imagen y buscar una imagen por imagen. De hecho, buscar los fotogramas clave en los vídeos es equivalente a buscar una imagen por imagen.

Si está interesado, puede consultar nuestro artículo anterior Milvus x VGG: Construcción de un sistema de recuperación de imágenes basado en el contenido.

Visión general del sistema

El siguiente diagrama ilustra el flujo de trabajo típico de un sistema de búsqueda de vídeo de este tipo.

1-video-search-system-workflow.png 1-flujo-de-trabajo-del-sistema-de-búsqueda-de-vídeos.png

Cuando importamos vídeos, utilizamos la biblioteca OpenCV para cortar cada vídeo en fotogramas, extraer vectores de los fotogramas clave utilizando el modelo de extracción de características de imagen VGG y, a continuación, insertar los vectores extraídos (embeddings) en Milvus. Utilizamos Minio para almacenar los vídeos originales y Redis para almacenar las correlaciones entre vídeos y vectores.

Cuando buscamos vídeos, utilizamos 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 mayor similitud. A continuación, el sistema recupera los vídeos correspondientes de Minio en su interfaz en función de las correlaciones en Redis.

Preparación de los datos

En este artículo, utilizamos unos 100.000 archivos GIF de Tumblr como conjunto de datos de muestra para crear una solución integral de búsqueda de vídeos. Puedes utilizar tus propios repositorios de vídeo.

Implementación

El código para construir el sistema de recuperación de vídeo en este artículo está en GitHub.

Paso 1: Crear imágenes Docker.

El sistema de recuperación de vídeo requiere Milvus v0.7.1 docker, Redis docker, Minio docker, la interfaz front-end docker, y la API back-end docker. Usted necesita construir la interfaz de front-end docker y la API back-end docker por sí mismo, mientras que usted puede tirar de 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í utilizamos docker-compose.yml para gestionar los cinco contenedores mencionados. Consulte la siguiente tabla para la configuración de docker-compose.yml:

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

La dirección IP 192.168.1.38 en la tabla anterior es la dirección del servidor especialmente para construir el sistema de recuperación de vídeo en este artículo. Necesitas actualizarla a tu dirección de servidor.

Necesitas crear manualmente directorios de almacenamiento para Milvus, Redis y Minio, y luego añadir las rutas correspondientes en docker-compose.yml. En este ejemplo, hemos creado los siguientes directorios:

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

Puede configurar Milvus, Redis y Minio en docker-compose.yml de la siguiente manera:

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

Paso 3: Inicie el sistema.

Utilice el docker-compose.yml modificado para iniciar los cinco contenedores docker que se utilizarán en el sistema de recuperación de vídeo:

$ docker-compose up -d

A continuación, puede 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 arranque correcto.

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

Ahora, has construido con éxito un sistema de búsqueda de vídeos, aunque la base de datos no tiene vídeos.

Paso 4: Importar vídeos.

En el directorio deploy del repositorio del sistema, se encuentra import_data.py, script para importar vídeos. Sólo es necesario actualizar la ruta a los archivos de vídeo y el intervalo de importación para ejecutar el script.

5-update-path-video.png 5-actualizar-ruta-video.png

ruta_datos: La ruta de los vídeos a importar.

time.sleep(0.5): El intervalo en el que el sistema importa los vídeos. El servidor que utilizamos para construir el sistema de búsqueda de vídeos tiene 96 núcleos de CPU. Por lo tanto, se recomienda establecer el intervalo en 0,5 segundos. Ajuste el intervalo a un valor mayor si su servidor tiene menos núcleos de CPU. De lo contrario, el proceso de importación supondrá una carga para la CPU y creará procesos zombis.

Ejecuta import_data.py para importar los vídeos.

$ cd deploy
$ python3 import_data.py

Una vez importados los vídeos, ¡ya tienes tu propio sistema de búsqueda de vídeos!

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 vídeos como se muestra a continuación.

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

Activa el interruptor de engranaje de la parte superior derecha para ver todos los vídeos del repositorio.

7-view-all-videos-repository.png 7-ver-todos-los-videos-repositorio.png

Haz clic en el cuadro de carga de la parte superior izquierda para introducir una imagen de destino. Como se muestra a continuación, el sistema devuelve los vídeos que contienen los fotogramas más similares.

8-enjoy-recommender-system-cats.png 8-disfruta-del-sistema-recomendador-gatos.png

A continuación, ¡diviértete con nuestro sistema de búsqueda de vídeos!

Construye el tuyo propio

En este artículo, hemos utilizado Milvus para construir un sistema de búsqueda de vídeos por imágenes. Esto ejemplifica la aplicación de Milvus en el procesamiento de datos no estructurados.

Milvus es compatible con múltiples marcos de aprendizaje profundo, y hace posible búsquedas en milisegundos para vectores a escala de miles de millones. No dude en llevar Milvus con usted 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! 👇🏻

Like the article? Spread the word

Sigue Leyendo