🚀 Experimente o Zilliz Cloud, o Milvus totalmente gerenciado, gratuitamente—experimente um desempenho 10x mais rápido! Experimente Agora>>

milvus-logo
LFAI

Descrição geral do sistema

  • Scenarios
August 29, 2020
milvus

Como o próprio nome sugere, a pesquisa de vídeos por imagem é o processo de recuperar do repositório vídeos que contêm fotogramas semelhantes à imagem de entrada. Um dos principais passos é transformar os vídeos em embeddings, ou seja, extrair os fotogramas chave e converter as suas caraterísticas em vectores. Agora, alguns leitores curiosos podem perguntar-se qual é a diferença entre procurar um vídeo por imagem e procurar uma imagem por imagem? De facto, a pesquisa de fotogramas-chave em vídeos é equivalente à pesquisa de uma imagem por imagem.

Se estiver interessado, pode consultar o nosso artigo anterior Milvus x VGG: Construir um sistema de recuperação de imagens baseado em conteúdos.

Descrição geral do sistema

O diagrama seguinte ilustra o fluxo de trabalho típico de um sistema de pesquisa de vídeo.

1-video-search-system-workflow.png 1-video-search-system-workflow.png

Ao importar vídeos, utilizamos a biblioteca OpenCV para cortar cada vídeo em fotogramas, extrair vectores dos fotogramas chave utilizando o modelo de extração de caraterísticas de imagem VGG e, em seguida, inserir os vectores extraídos (embeddings) no Milvus. Utilizamos o Minio para armazenar os vídeos originais e o Redis para armazenar as correlações entre os vídeos e os vectores.

Ao procurar vídeos, utilizamos o mesmo modelo VGG para converter a imagem de entrada num vetor de caraterísticas e inseri-lo no Milvus para encontrar os vectores com maior semelhança. Em seguida, o sistema recupera os vídeos correspondentes do Minio na sua interface, de acordo com as correlações no Redis.

Preparação dos dados

Neste artigo, utilizamos cerca de 100.000 ficheiros GIF do Tumblr como exemplo de conjunto de dados para criar uma solução completa de pesquisa de vídeo. Pode utilizar os seus próprios repositórios de vídeo.

Implementação

O código para criar o sistema de recuperação de vídeo neste artigo está no GitHub.

Etapa 1: criar imagens do Docker.

O sistema de recuperação de vídeo requer a janela de encaixe Milvus v0.7.1, a janela de encaixe Redis, a janela de encaixe Minio, a janela de encaixe da interface de front-end e a janela de encaixe da API de back-end. É necessário criar a janela de encaixe da interface de front-end e a janela de encaixe da API de back-end por si próprio, enquanto pode obter as outras três janelas de encaixe diretamente do 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

Etapa 2: configurar o ambiente.

Aqui usamos o docker-compose.yml para gerenciar os cinco contêineres mencionados acima. Veja a tabela a seguir para a configuração do docker-compose.yml:

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

O endereço IP 192.168.1.38 na tabela acima é o endereço do servidor especialmente para a criação do sistema de recuperação de vídeo neste artigo. É necessário actualizá-lo para o seu endereço de servidor.

É necessário criar manualmente diretórios de armazenamento para Milvus, Redis e Minio e, em seguida, adicionar os caminhos correspondentes em docker-compose.yml. Neste exemplo, criamos os seguintes diretórios:

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

Você pode configurar o Milvus, o Redis e o Minio no docker-compose.yml da seguinte forma:

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

Etapa 3: iniciar o sistema.

Use o docker-compose.yml modificado para iniciar os cinco contêineres docker a serem usados no sistema de recuperação de vídeo:

$ docker-compose up -d

Em seguida, pode executar o docker-compose ps para verificar se os cinco contentores de ancoragem arrancaram corretamente. A seguinte captura de ecrã mostra uma interface típica após um arranque bem-sucedido.

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

Agora, você construiu com sucesso um sistema de pesquisa de vídeo, embora o banco de dados não tenha vídeos.

Etapa 4: Importar vídeos.

No diretório de implantação do repositório do sistema, encontra-se import_data.py, script para importar vídeos. Só precisa de atualizar o caminho para os ficheiros de vídeo e o intervalo de importação para executar o script.

5-update-path-video.png 5-update-path-video.png

data_path: O caminho para os vídeos a importar.

time.sleep(0.5): O intervalo em que o sistema importa os vídeos. O servidor que usamos para construir o sistema de busca de vídeos tem 96 núcleos de CPU. Portanto, é recomendável definir o intervalo como 0,5 segundo. Defina o intervalo para um valor maior se o seu servidor tiver menos núcleos de CPU. Caso contrário, o processo de importação sobrecarregará a CPU e criará processos zumbis.

Execute import_data.py para importar vídeos.

$ cd deploy
$ python3 import_data.py

Uma vez importados os vídeos, está tudo pronto com o seu próprio sistema de pesquisa de vídeos!

Exibição da interface

Abra o seu browser e introduza 192.168.1.38:8001 para ver a interface do sistema de pesquisa de vídeos, como se mostra abaixo.

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

Accione o botão de engrenagem no canto superior direito para ver todos os vídeos no repositório.

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

Clique na caixa de carregamento no canto superior esquerdo para introduzir uma imagem de destino. Como se mostra abaixo, o sistema devolve os vídeos que contêm os fotogramas mais semelhantes.

8-enjoy-recommender-system-cats.png 8-gozar-recomendador-sistema-gatos.png

A seguir, divirta-se com o nosso sistema de pesquisa de vídeos!

Construa o seu próprio sistema

Neste artigo, usámos o Milvus para construir um sistema de pesquisa de vídeos por imagens. Isto exemplifica a aplicação do Milvus no processamento de dados não estruturados.

O Milvus é compatível com várias estruturas de aprendizagem profunda e possibilita pesquisas em milissegundos para vectores à escala de milhares de milhões. Não hesite em levar o Milvus consigo para mais cenários de IA: https://github.com/milvus-io/milvus.

Não seja um estranho, siga-nos no Twitter ou junte-se a nós no Slack! 👇🏻

Like the article? Spread the word

Continue Lendo