Estou tentando encontrar algum método para detectar pessoas usando apenas uma câmera 3 metros acima do solo. Este é um quadro retornado pela câmera:
ATUALIZAÇÃO: Teste de vídeo -> http://dl.dropbox.com/u/5576334/top_head_shadow.avi
Para fazer isso, primeiro entendo que preciso executar uma segmentação em segundo plano em primeiro plano. Essa é a parte fácil.
Com a máscara de primeiro plano, sou capaz de fazer operações simples como Hough transformar para encontrar círculos, mas dessa maneira apenas detecta 60% das cabeças, incluindo muitos falsos positivos.
Eu poderia usar algumas outras técnicas simples, como segmentação de cores, mas descobri que as cabeças das pessoas são muito diferentes, vistas de cima por causa de seu penteado, cor, quantidade de cabelo, ...
Outra opção que eu tenho sobre isso é a possibilidade de usar descritores HOG, ou recursos do tipo Haar, mas eu precisaria de um extenso banco de dados de pessoas vistas de cima para treinar os modelos. Eu não encontrei nada parecido.
Eu pensei que este seria um problema muito recorrente, mas não consigo encontrar muito sobre isso na literatura ou na internet. Qualquer ajuda para resolver esta tarefa será apreciada :-)
ATUALIZAÇÃO: para obter mais informações, o objetivo é implementar algum método genérico para fazer o rastreamento do fluxo de pedestres. O primeiro protótipo será testado em um shopping.
fonte
Respostas:
Existem outros objetos que podem se mover ao lado das pessoas? Se não houver, basta encontrar os blobs (componentes conectados) na sua máscara de primeiro plano, e esse é o seu pessoal.
Eles também podem "colidir" um com o outro, criando um blob em vez de dois. Nesse caso, você pode fazer um rastreamento de movimento e resolver a ambiguidade usando o fato de que a trajetória e a velocidade são suaves.
Se houver outros objetos (como cães, carros), você deve criar um classificador que obtenha parâmetros de blob como:
E retorna a classe correta (Humano / Não humano).
fonte
Eu estive na posição "para usar métodos bem testados, precisaria de um extenso banco de dados de exemplos que não tenho" em uma empresa muito pequena que "não podia pagar". Lamento muito que simplesmente não fizesse o que fosse necessário para obter o máximo possível de dados. Eu acho que teria feito um mundo de diferença para eles no final.
Qualquer tipo de detecção da visão do mundo real tem um milhão de coisas em que você não pensava até tentar e falhar. É um problema antigo muitas e muitas vezes mais difícil do que parece. Eu recomendaria seguir o método newtons de "ficar sobre os ombros dos gigantes" (ou, quase tão bom, em cima de uma grande pilha de anões). Ou seja, use um método que você já sabe que funciona e é robusto. Todas as coisas que parecerem "boas o suficiente" irão falhar miseravelmente.
O estado da arte na detecção de pedestres pela última vez que conheci foi o HOG, que foi originalmente testado exatamente nesse cenário. Você quer rastrear, então precisará brincar um pouco no google scholar para descobrir isso. O ponto principal é que eu estive em uma posição semelhante e, por isso, recomendo que você obtenha seu banco de dados, o que for necessário e use algo que você sabe que funciona, que já foi testado com uma taxa de falha conhecida, e não algo que apenas soa bem. A marcha de 40 anos de morte dos algoritmos de visão computacional que "parecem que eles funcionarão" não é algo que você deseja fazer parte.
PS: Não estou tentando criticar a visão do computador. É uma das minhas áreas favoritas. Mas a história sugere que existem mil passos errados a serem seguidos e não muitos corretos. É melhor seguir alguém que já encontrou alguns dos passos certos.
fonte
Eu acho que você pode começar combinando algumas respostas daqui.
Há duas abordagens diferentes mencionadas nesta resposta, com a grande diferença de que é impossível fazer a detecção de rostos, pois você não vê rostos. Mas a outra abordagem ainda é aplicável: decidir se o clima é um pedestre ou não com base em suas ações (movimentos) .
Como você previu, isso sugeriria o uso de algum tipo de segmentação de primeiro plano e segundo plano. Um pesquisador muito rápido encontrou este artigo recente que parecia bastante promissor, mas como nunca fiz isso pessoalmente, você ou outra pessoa pode ter sugestões melhores para o algoritmo específico a ser usado nesta etapa.
Agora, a primeira resposta que eu vinculei apenas fornece uma idéia de abordagem muito geral. Porém, esta resposta pode lhe dar uma idéia dos próximos passos: rastreie os objetos e tente distinguir entre eles com base na velocidade ou na direção do movimento .
Finalmente, nunca resolvi o problema que você teve, então provavelmente não sou de muita ajuda, mas talvez as respostas às quais vinculei possam lhe dar uma idéia geral de por onde começar. Também me surpreendeu o fato de não encontrar nenhum trabalho e artigo anterior ao procurar uma resposta para o seu problema, mas talvez você precise apenas de alguém para lhe dizer as palavras-chave corretas para descrever esse problema .
fonte
Eu tenho algum tipo de tarefa, conforme descrito aqui, contando pessoas. Mas minha exigência é que a câmera esteja voltada para as pessoas do lado esquerdo / direito, e não sobre a cabeça.
Dito isto, explorando a possível solução para o meu caso, deparo com um método interessante para o seu caso (detecção de sobrecarga). Essas soluções usam câmera estéreo para que você possa lidar com blobs (as pessoas se aproximando demais) vendo a profundidade (por exemplo, veja apenas blobs na média das pessoas no nível da cabeça).
Este produto pode fornecer uma explicação melhor: digiop . Consulte o folheto para obter mais explicações técnicas.
PS Não estou representando a empresa, apenas apontando uma solução bem documentada
fonte