Descrição geral do sistema
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
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
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
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
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
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
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
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-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! 👇🏻
- Preparação dos dados
- Implementação
- Etapa 2: configurar o ambiente.
- Etapa 3: iniciar o sistema.
- Etapa 4: Importar vídeos.
- Exibição da interface
- Construa o seu próprio sistema
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