Há vários vídeos que estou procurando processar de diferentes jogos para detectar vários "estados" neles.
O primeiro jogo que estou enfrentando é qualquer edição do Super Street Fighter 4 .
Nele, eu gostaria de detectar quando a tela do personagem "vs" aparece. Aqui está um exemplo de um quadro do vídeo:
(retirado do 10s ~ marcar de este vídeo )
Se eu pudesse detectar o "vs", seria capaz de detectar que o quadro de vídeo é de fato a tela "vs", o que me permitiria procurar outras informações (por enquanto, digamos que vou usá-lo para detectar o registro de data e hora no vídeo em que a partida está prestes a começar).
Dito isto, eis o que se pode supor sobre os quadros dos vídeos que processarei (este não é o único vídeo, existem milhares, senão dezenas ou centenas de milhares de vídeos, mas a questão da escala no processamento que muitos vídeos é um domínio completamente diferente):
- Eu preferiria (mas não é necessário) processar a imagem de menor resolução possível com resultados confiáveis (resoluções mais baixas = tempo de processamento mais rápido). A imagem acima tem 480 x 270 pixels (tirada de um vídeo do YouTube com
fmt
18 ), mas eles podem ter tamanhos diferentes (recebi vídeos do YouTube comfmt
18, mas com dimensões de 640 x 360 pixels). - A maioria dos vídeos terá feed direto
- A maioria dos vídeos terá uma proporção de 16: 9
- O fundo avermelhado será animado, mas geralmente estará nessa cor vermelho alaranjado (são chamas)
- Às vezes, haverá um emblema entrando e saindo na parte inferior do "vs" para indicar uma versão (que será importante, mas não no momento), que pode ofuscar o "vs", assim:
(retirado do ponto de ~ 3s a partir deste vídeo , também notar que o acima é uma resolução de 640 x 360 pixels)
- O tamanho e a posição do "vs" serão praticamente os mesmos (ainda não o verifiquei, mas sei que ele não se move) proporcionalmente a outros vídeos de feed direto
- Os caracteres serão escolhidos entre um pool de mais de 30 em cada lado (em outras palavras, essas áreas do quadro variarão)
- Os vídeos geralmente duram de dois a quatro minutos, com algo entre 4.000 e 6,00 quadros. No entanto, pode haver vídeos mais longos (talvez duas horas) com vários outros jogos e ações ao vivo. Esses vídeos não são tão importantes, mas se uma solução me indicar onde um determinado jogo aparece no vídeo geral maior, ótimo
- A resolução nativa das capturas é 720p, portanto, uma imagem de linha de base do "vs" pode ser obtida no que seria considerado um tamanho "nativo".
Por fim, pretendo codificar esse pipeline no .NET, mas isso não é super importante, a prova de conceito é mais importante aqui, assim como a compreensão das técnicas envolvidas, para que eu possa traduzi-lo e otimizá-lo para o .NET bem como para outros vídeos de outros jogos do mesmo gênero (se eu puder identificar os discriminadores significativos e vídeos de, digamos, Ultimate Marvel vs. Capcom 3 , Street Fighter x Tekken , BlazBlue: Continuum Shift , etc.).
Também estou mergulhando no Mathematica e tenho a versão 8.0 em casa, portanto, uma prova de conceitos nesse ambiente é bem-vinda também.