Um pouco sobre pesquisa
Quando falamos em pesquisa, imediatamente imaginamos um motor de busca Google com um formulário para inserir uma string de texto e muitas centenas de resultados de links para as páginas encontradas. No entanto, vamos pensar sobre o assunto de nossa pesquisa.
O que você está procurando?
- Texto
- Documentos
- Páginas HTML
- Imagens
- Áudio
- Vídeo
- Arquivos binários
Existem motores de busca especializados para alguns tipos de dados. Por exemplo, existem sites especializados em localizar arquivos DLL.
Pesquisar vídeo

Vamos dar uma olhada em como encontrar informações de vídeo. Como você pode fazer isso? Puramente em teoria?
- De acordo com o texto
- Por imagem
- Em um breve videoclipe
- Por pequeno fragmento de áudio
Situação atual
Motores de busca
- Microsoft
- Yandex
Nomeei os três maiores mecanismos de busca e todos eles permitem que você busque vídeos por texto e imagens.

Desvantagens dos motores de busca modernos
Infelizmente, todos eles sofrem dos seguintes problemas:
- O nome exato do vídeo encontrado nem sempre está disponível. Em vez disso, o ator pode ser especificado corretamente e outras imagens dele apresentadas.
- Não há indicação precisa da posição no vídeo. E esta é uma informação muito útil.

Sim, ele é. Experimente você mesmo e verá que estou certo. Os motores de busca tendem a ser um tanto incertos. Confira a imagem acima, a que mostra Tom Hanks. Não há o nome do filme nem a posição em que foi feito.

Formulação do problema
Antes de começar a resolver o problema, vamos tentar descrevê-lo. Então o que nós queremos?
Velocidade de execução de solicitação desejada
Hoje em dia, ninguém vai esperar alguns minutos para que uma consulta de pesquisa seja concluída. No entanto, a quantidade de dados e computação pode levar algum tempo para processar a solicitação. Você tem que se comprometer. Limitaremos condicionalmente o tempo de execução da consulta de pesquisa a 10 segundos (± alguns segundos). Isso, por um lado, permitirá que o navegador não interrompa a conexão, mas, por outro lado, dará tempo para que os scripts processem as informações.
Quantos dados existem?
Vamos descobrir em nossa cabeça.
Número de vídeos
De acordo com o banco de dados de cinema da IMDb, aproximadamente 2,6 milhões de filmes foram rodados no total, incluindo episódios individuais de programas de TV, desenhos animados e curtas. (Informações de 13 de novembro de 2018).
Para começar, vamos nos limitar ao número redondo de 1 milhão de vídeos. É claro que nem mesmo estamos tentando tocar no YouTube e outros serviços semelhantes, onde o volume do vídeo é muitas vezes maior. E o mais importante, essa bola de neve só vai crescer.
Número de quadros
Alguns filmes ou episódios de séries de TV são bastante curtos. Existem 15-20 minutos. Por outro lado, existem alguns filmes de até 2 horas de duração ou mais. Sem mais delongas, consideremos a duração média do vídeo igual a 1 hora.
Um grande número de filmes foi filmado a 24 quadros por segundo, mas também há filmes mais rápidos. Hoje em dia, qualquer pessoa pode gravar seu próprio filme e a taxa de quadros pode ser de 60, 100 e 200 FPS ou mais. Tudo depende da filmadora, câmera, câmera de ação, smartphone, câmera de vigilância por vídeo, etc. (sublinhe o necessário). Tudo em nossas mãos. Mas, vamos tomar como uma primeira aproximação a taxa de quadros de um vídeo médio igual a 30 FPS.
Neste caso, o vídeo médio será:
30 FPS * 3600 seg = 108.000 quadros
Concluindo, concluímos que o vídeo médio tem cerca de 100.000 quadros.
Volume de dados
Qual é a capacidade de armazenamento para um quadro? Obviamente, esse valor depende do algoritmo de comparação de quadros em nosso banco de dados com uma determinada amostra. Usamos dois algoritmos para comparar os dados. Um deles requer cerca de 30 bytes por quadro, o outro cerca de 10 bytes. Vamos pegar a média - 20 bytes.
Isso significa que para armazenar informações sobre 1 milhão de vídeos, 1.000.000 de vídeos * 100.000 frames * 20 bytes = 2.000.000.000.000 bytes são necessários
Simplificando, precisamos de cerca de 2 TB para descrever de alguma forma todos os nossos quadros. O que, de modo geral, não é tão ruim, porque essa quantidade de informação pode caber em um HDD ou disco SSD moderno. Por outro lado, esta informação deve ser de alguma forma simplificada, caso contrário, mesmo uma simples leitura de 2 TB demorará muito, e concordamos que o usuário não espere mais de 10 segundos.
Mesmo se lermos as informações do disco a uma velocidade de 500 MB / s, precisaremos de 2.000 segundos, ou seja, mais de meia hora!
Quantos servidores precisamos para pesquisar em um horário específico?
Se presumirmos que armazenamos informações uniformemente em vários servidores, então, neste caso, a quantidade de informações processadas para completar uma consulta de pesquisa diminui. Por exemplo, se tivermos 10 servidores, cada um deles precisará processar não 2 TB de informações, mas apenas 200 GB. Ou, se tivermos 100 servidores, precisaremos processar não 2 TB, mas 20 GB de informações. Em princípio, o montante especificado deve ser suficiente para o funcionamento desse motor de pesquisa.
Quantas solicitações por segundo esse sistema pode digerir?
É difícil responder exatamente, mas provavelmente um máximo de várias dezenas de solicitações por segundo.
O que foi feito
Primeiro, implementamos uma busca por fragmentos de vídeo. No entanto, a pesquisa de imagens logo foi implementada.
História
1 de julho de 2019
Neste dia, foi lançada a primeira versão do pacote VideoColor. Incluía três partes:
- Manager (indexação de vídeo de origem)
- Servidor (o back end que aceita solicitações e procura uma correspondência no banco de dados de índice)
- Cliente (um aplicativo cliente que permite reproduzir arquivos AVI e enviar solicitações de pesquisa ao servidor).
Março de 2020
Um site foi criado com a capacidade de identificar vídeos pelo fragmento de vídeo enviado.
14 de abril de 2020
Lançada a primeira versão do aplicativo para identificação de vídeo e posicionamento do vídeo que está sendo reproduzido por meio da captura do conteúdo de uma parte da tela do monitor.
23 de junho de 2020
Foi lançada a primeira versão do aplicativo para adicionar índice e informações descritivas sobre vídeo ao banco de dados do site.
Pesquisa por fragmentos de vídeo
Ideia principal

Consideraremos um vídeo como uma sequência de imagens. Para cada imagem, encontre a média de vermelho, verde e azul. Obtemos três gráficos em função do tempo. Vamos construir e salvar esses gráficos para cada vídeo que queremos indexar.

Tendo recebido um fragmento de vídeo para identificação, construiremos esses gráficos também para ele. Vamos comparar os gráficos obtidos com os já disponíveis. Claro, as comparações terão de ser feitas em toda a duração de cada filme original. Se a diferença entre os gráficos em um ponto específico for menor que um determinado valor, consideramos que o problema está resolvido.
Deve-se notar que este é um diagrama simplificado. Existem vários pontos no fluxo de trabalho que diferem do que é descrito aqui. Mas, em geral, essa é a ideia.
prós
- . 1 . , 1000 , 2 , 2 .
- . , , .
- 5-10 .
- ( ).
- . . , . , , .
- . .. . , . , . , . , 2- DDR3 1600 12 0,5 . 48 2- .
- ( ) . . , , , .
- . , , . — .
- .
Divida a imagem original em células da tabela M x N. Encontre o valor médio dos componentes vermelho, verde e azul em cada uma das áreas. Na verdade, o conjunto destes valores será a característica desta imagem, com a ajuda da qual podemos distingui-los todos entre si. Inserimos essa característica no banco de dados junto com o ponteiro para a descrição do vídeo (ID do vídeo) e o número de série do quadro no vídeo. A única questão que permanece é: quais valores M e N assumem? Pegamos 5 x 5, mas você pode tentar outros valores. Com pequenos valores desses parâmetros, há uma chance de que tenhamos muitas duplicatas e, com valores grandes, vamos gastar muita memória.

Entretanto, isso não é tudo. Se no futuro você pesquisar todas essas características, demorará muito para processar cada solicitação! Como ser? Você pode calcular o valor médio dos componentes R, G, B para esta imagem e, com base nesses valores, agrupá-los na matriz de dados. Por exemplo: R = 200, G = 188, B = 212. Nesse caso, inserimos informações sobre o quadro na seção apropriada ou adicionamos um campo à tabela. E ao pesquisar, definimos esses componentes da mesma forma e pesquisamos levando em consideração esses parâmetros. Assim, reduzimos significativamente a quantidade de dados comparados e agilizamos a pesquisa.

Para ser sincero, isso é apenas em teoria, na prática tudo é um pouco diferente. Mas este é um tópico para um artigo separado.
prós
- Tamanho de dados relativamente pequeno.
- É possível dividir todos os dados em grupos e pesquisar por grupos, o que acelera significativamente a pesquisa.
- Ao contrário do método anterior, ele não requer o armazenamento permanente de grandes quantidades de dados na RAM.
- Baixa probabilidade de erro.
Minuses
- Devido ao fato de que após a transcodificação, o vídeo pode ser ligeiramente diferente do original e a codificação JPEG (ao pesquisar por imagem) altera o original e o grupo pode ser determinado incorretamente. Isso requer expandir o alcance do grupo (leva a uma diminuição na velocidade de pesquisa) ou consultas de pesquisa adicionais (também retarda a pesquisa).
Ferramentas
Até o momento, vários aplicativos foram escritos, alguns deles tornaram-se desatualizados e não são mais suportados.
Pesquisa de vídeo (lado do cliente)
- Por meio de um formulário da web no site
- Através do aplicativo "Video Color Capture"
Pesquisa de vídeo (backend)
- Video Color Server. : Windows ( ) Linux ( , crontab).
- «Video Color Creator»

- .
- .
- ().
- () .
- - , .
Suponha que você tenha um arquivo com um nome desajeitado. A tela inicial está ausente (intenção do autor) ou cortada. Que filme é esse? Gostaria de ler a descrição e comentários de quem o viu.
Encontrar e cortar blocos de anúncios
Exemplo: você tem seu próprio player de vídeo personalizado e deseja que seus usuários vejam seus próprios anúncios, e não canais centrais, ao assistir a um streaming de vídeo.
Verificar partes do vídeo para pegá-las emprestadas de outros filmes (plágio)
Exemplo: Se houver suspeita de que alguém está usando o seu vídeo (tirado de um quadricóptero) em seu vídeo.
Determinar a data exata de publicação e o nome do programa (programa) caso esta informação esteja faltando na repostagem
Exemplo: você está assistindo a um programa de vídeo hospedado em um site desconhecido. Você pode até saber como o programa se chama, mas não sabe quando foi exibido. Há um ou dois anos?
Determinação de uma posição mais ou menos precisa do streaming de vídeo sendo reproduzido se um vídeo indexado anteriormente estiver sendo transmitido
Exemplo: isso pode ser necessário se você deseja anexar um aplicativo ao streaming de vídeo de outra pessoa que mostra títulos ou outras informações contextuais (mapas, links, notícias, etc.). Primeiramente, ocorre a captura do vídeo, cálculo do índice, identificação do vídeo e posição no servidor, e então o aplicativo exibe as informações contextuais em uma janela separada, sincronizada com o vídeo que está sendo reproduzido.
Como usar o serviço
Pesquise vídeos por meio de um formulário da web no site
Para fazer isso, você precisa enviar um fragmento de vídeo ou imagem para o campo correspondente do formulário.

Deve-se notar que no caso de baixar um fragmento de vídeo, o servidor tratará primeiro do storyboard do vídeo carregado e seu processamento, o que exigirá mais tempo.
A página de resultados contém o título do filme, o nome do diretor, informações sobre o país de origem, ano de lançamento, gênero, nomes dos atores, uma breve descrição, a duração do vídeo, bem como a posição encontrada no vídeo, links para informações adicionais e uma imagem tabular de quadros do vídeo.

Pesquise vídeos usando o aplicativo
A busca de vídeo pelo aplicativo é muito mais rápida, pois todo o pré-processamento é feito no lado do cliente e apenas uma pequena parte dos dados originais é enviada ao servidor. Isso coloca menos carga no canal e aumenta a velocidade da consulta de pesquisa.




Posso preencher sozinho um banco de dados com informações de índice de um milhão de vídeos?
Provavelmente não. Onde posso obter esses vídeos? Como bombeá-los pela rede? Onde obter recursos de computação para processá-los?
Mas você pode disponibilizar a base para enchimento pelos próprios usuários. E isso já foi implementado. Enchemos o banco de dados com cem vídeos e você pode ter certeza de que nosso serviço funciona. Você também pode baixar e instalar um aplicativo gratuito para indexar vídeos e adicionar uma descrição, seguido de enviar dados para o servidor. A aplicação permite, no futuro, realizar algumas operações com os dados carregados: deletar, editar a descrição, visualizar e pesquisar.

Se você decidir adicionar o seu vídeo ou qualquer outro, certifique-se de que este vídeo ainda não está no banco de dados. Você pode pesquisar no aplicativo por nome, diretor, ano de criação e outros parâmetros.

A velocidade de criação de informações de índice depende da potência do seu computador e das características do próprio vídeo (resolução, codec, taxa de quadros). Em média, o processamento leva alguns minutos. Neste momento, o usuário pode preencher os campos de texto de descrição do vídeo.

Planos para o futuro
- Aceleração de pesquisa.
- Melhorando a precisão da pesquisa.
- Pesquise por fragmentos de áudio.
A pesquisa de vídeos por fragmentos curtos de áudio complementará os dois métodos de pesquisa existentes (por fragmentos de vídeo e imagens).
Resultado
- Nesta postagem, revisamos o estado da arte atual com a pesquisa de vídeos.
- Conhecemos os métodos de pesquisa de vídeo por fragmento de vídeo curto e imagem.
- Falamos sobre o aplicativo de pesquisa de vídeo Video Color Capture .
- Foi feita menção ao aplicativo Video Color Creator para adicionar ao banco de dados de vídeo compartilhado do software AAP .
Links
Local na rede Internet
http://www.videocolor.aapsoftware.ru/
O site oferece uma busca por um pequeno fragmento de vídeo, bem como por uma imagem do vídeo.
Formulários
- Aplicativo de identificação de vídeo Windows x64 Video Color Capture
- Aplicativo Windows x64 para adicionar vídeo ao banco de dados Video Color Creator
- Todos os aplicativos são gratuitos.
Vídeo
- Pesquisar vídeo por imagem e pesquisar vídeo por segmento de vídeo curto
- Procure um filme por fragmento de vídeo
- Identificação de vídeo usando captura de cores de vídeo
- Vídeo de trabalho com o programa "Video Color Capture" versão 1.1
- Trabalhando com o programa "Video Color Creator" versão 2.0