Versão GUI do OpenCV para prototipagem de detecção de recursos (SIFT etc.) antes do desenvolvimento do projeto real?

StackOverflow https://stackoverflow.com/questions/4842864

Pergunta

Tive uma ideia para a qual preciso ser capaz de reconhecer certos objetos ou modelos de um filme digital tridimensional renderizado.

Após pesquisas limitadas, agora sei que o que preciso é chamado de detecção de recursos no campo da visão computacional.

Então, o que eu quero fazer é:

  1. crie algumas capturas de tela de um determinado personagem do filme (por exemplo, frente / trás / lado esquerdo / lado direito)
  2. reproduza o filme
  3. enquanto reproduz o filme, crie continuamente novas capturas de tela do filme
  4. para cada captura de tela, execute a detecção de recurso (SIFT ?, com openCV?) para ver se alguma de nossas aparições de personagem está lá (eles ainda devem ser reconhecidos se o personagem está mais longe e, portanto, parece menor, ou se o personagem está por exemplo, deitado).
  5. avise sempre que o personagem for encontrado

Isso seria possível com o OpenCV, certo?

O "problema" é que eu teria que aprender c ++ ou python para desenvolver este aplicativo. Isso não é um problema se meu filme e minhas capturas de tela forem aplicáveis ​​ao que eu quero fazer.

Então, eu gostaria de primeiro testar minhas capturas de tela do filme. Existe uma versão GUI do OpenCV que eu possa inserir meus dados de teste e, em seguida, executar seus algoritmos de detecção de recursos manualmente como meio de prototipagem?

Qualquer feedback é apreciado. Obrigado.

Foi útil?

Solução

Não há GUI do OpenCV capaz de fazer o que você deseja. Você poderá usar o OpenCV para alguns aspectos do seu problema, mas não há uma solução pronta esperando por você.

Embora seja definitivamente possível resolver seu problema, a curva de aprendizado para esse problema é bastante longa. Se você for um profissional, uma alternativa para aprender sobre isso sozinho seria contratar um especialista para fazer isso por você. Custaria dinheiro, mas pouparia tempo.

No que diz respeito à correspondência de modelos, você normalmente não a usaria para resolver esse problema porque o que você está procurando é mudar a aparência e a forma. Não há realmente nenhum "parâmetro dinâmico para definir". A coisa mais próxima que você poderia tentar é ter uma coleção de modelos massiva que tentaria cobrir as formas esperadas que seu alvo pode assumir. Mas dificilmente seria uma solução elegante. Além disso, não escalaria.

A seguir, ao seu ponto sobre o reconhecimento de rosto Isso está relacionado, mas a maioria dos aplicativos de reconhecimento facial lida com um ambiente controlado: iluminação, distância, pose, ângulo, etc. Fora desse ambiente controlado, a eficácia da detecção de rosto cai significativamente. Se você está detectando objetos em um filme, seu ambiente não é realmente controlado.

Você pode tentar primeiro um problema mais simples de detectar com precisão onde os personagens estão, sem determinar quem eles são (vigilância por vídeo, essencialmente). Embora possa parecer simples, você descobrirá que, na verdade, não é trivial para cenas arbitrárias. O resultado de resolver esse problema pode ser útil na identificação dos personagens.

Outras dicas

Bem, usando o OpenCV, você pegaria um quadro de um arquivo de vídeo e faria qualquer cálculo sobre ele.

Você pode fazer vários métodos diferentes para detectar um personagem nessa imagem, mas não é tão fácil tê-lo tão flexível, então você pode até pegar aquela pessoa se ela estiver deitada no chão, por exemplo, se você inserir apenas imagens de referência de aquele personagem em pé.

Basicamente, você pode tentar extrair todos os recursos importantes do seu conjunto de imagens de referência e ter um algoritmo de aprendizado (no seu caso supervisionado) que obtém um bom vetor de recursos desse personagem para classificação.

Você precisa então escrever seu código que reproduz o vídeo e que pega um quadro de vídeo, digamos a cada 500ms (ou outro conforme você desejar), obtém uma segmentação do objeto que você acha que seria esse personagem e compare-o com a referência valores que você obtém de seu algoritmo de aprendizagem. Se houver uma correspondência, seu código pode gritar "Yehaaawww!" ou fazer outras coisas ...

Mas tudo isso depende de quão flexível você deseja que seja. Você também pode tentar uma correspondência de modelo ou correlação cruzada que basicamente desloca a (s) imagem (ns) de referência ao longo do quadro e verifica se as duas partes são iguais. Mas isso, infelizmente, é muito sensível a rotação, deformações ou outros ruídos ... então você não pegaria essa pessoa se ela estivesse deitada. E eu duvido que você consiga fazer todos esses cálculos em tempo real ...

Basicamente: Sim, o OpenCV é bom para usar em tarefas de processamento de imagem / visão computacional. Mas ele oferece muitos métodos e maneiras e você precisa encontrar uma maneira que funcione para suas imagens ... não é uma tarefa trivial ...

Espero que ajude ...

Existe Find-Object de Mathieu Labbé .Foi muito útil para mim começar a entender os descritores, pois você pode alterá-los enquanto seu vídeo está sendo executado para ver o que acontece.

Provavelmente é tarde demais, mas pode ajudar outra pessoa a procurar uma solução.

Você já tentou ver alguns dos trabalhos do grupo de geometria visual Oxford?

Seu sistema de Video Google descreve em grande medida o quevocê quer, detecção de instância.

Seu trabalho em Nomeando Pessoas em programas de TV também é muito relevante.Um pipeline de detecção de rosto e recurso facial está incluído e pode ser executado a partir do Matlab.Você está familiarizado com o Matlab?

Você já experimentou estruturas de visão computacional como Cassandra ?Lá você pode fazer isso exatamente com alguns cliques do mouse.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top