Algoritmo de contagem de pedestres

12

Atualmente, estou desenvolvendo um projeto de balcão para pedestres (usando OpenCV + QT no Linux). Minha idéia sobre a abordagem é:

  1. Capturar quadros
  2. Subtração em segundo plano
  3. ruídos claros (corroer, dilatar)
  4. localizar blobs (cvBlobslib) - objetos em primeiro plano
  5. Para cada blob, defina o ROI e pesquise pedestres (LBP com detectMultiScale) nesses blobs (para obter melhor desempenho)
  6. Para cada pedestre encontrado, faça uma busca aninhada na parte superior do corpo (Não tenho certeza) (melhor confiabilidade)
  7. Se o mesmo pedestre for encontrado em quadros contínuos (talvez de 3 a 4 quadros) - adicione essa área ao camshift e track - marque como pedestre
  8. Excluir áreas rastreadas de mudança de cames da detecção de blob para os próximos quadros
  9. Se um pedestre cruzar um número de incremento de linha

Quero verificar se estou no caminho certo. Você tem alguma sugestão sobre como melhorar minha abordagem? Se alguém trabalhasse em algo semelhante, eu agradeceria quaisquer dicas, recursos (e críticas) úteis sobre esse problema.

bahadir
fonte
5
Você pode reformular sua pergunta e deixar de fora as partes do OpenCV. Expresse-o mais como a pergunta conceitual que realmente é (Algoritmo para contagem e rastreamento de pedestres).
Geerten
2
Sua abordagem parece razoável, você pesquisou literatura acadêmica relevante? Isso deve lhe dar uma idéia do estado da arte. A subtração de fundo pode ser complicada, efeitos ambientais e sombras podem ser um problema.
geometrikal

Respostas:

8

Eu posso ver vários problemas possíveis com essa abordagem. Falo da minha própria experiência aqui de melhorar um sistema de contagem de pedestres com uma abordagem muito semelhante, portanto não pretendo ser desencorajador. Pelo contrário, gostaria de alertá-lo sobre possíveis obstáculos que talvez você precise superar para criar um sistema preciso e robusto.

Em primeiro lugar, a subtração de fundo pressupõe que os objetos de interesse sempre estarão em movimento e os objetos que você não está interessado em contar permanecerão completamente imóveis. Certamente, esse pode ser o caso no seu cenário, mas ainda é uma suposição muito limitante. Também achei a subtração de fundo muito sensível a mudanças na iluminação (concordo com a geometrikal).

Desconfie de assumir que uma gota = uma pessoa , mesmo que você pense que seu ambiente é bem controlado. Muitas vezes acontecia que os blobs correspondentes às pessoas não eram detectados porque não estavam em movimento ou eram muito pequenos; portanto, eles foram excluídos pela erosão ou por alguns critérios de limiar (e acredite, você não quer entrar no " ajustar limites até que tudo funcione "armadilha. Não funciona;)). Também pode acontecer que um único blob corresponda a duas pessoas caminhando juntas ou uma única pessoa carregando algum tipo de bagagem. Ou um cachorro. Portanto, não faça suposições inteligentes sobre os blobs.

Felizmente, como você menciona que está usando LBPs para detecção de pessoas , acho que está no caminho certo para não cometer erros no parágrafo acima. Mas não posso comentar sobre a eficácia dos LBPs em particular. Também li que o HOG (histograma de gradientes) é um método de ponta na detecção de pessoas; consulte Histogramas de gradientes orientados para detecção humana .

Minha última queixa está relacionada ao uso do Camshift . Ele é baseado em histogramas de cores e, por si só, funciona bem ao rastrear um único objeto que é fácil de distinguir por cor, desde que a janela de rastreamento seja grande o suficiente e não haja oclusões ou alterações bruscas. Mas assim que você precisa rastrear vários destinos que podem ter descrições de cores muito semelhantes e que se aproximam muito um do outro, você simplesmente não pode prescindir de um algoritmo que de alguma forma permita manter várias hipóteses. Pode ser um filtro de partículas ou uma estrutura como o MCMCDA (Associação de dados de Monte Carlo em cadeia de Markov , consulte Associação de dados de Monte Carlo em cadeia de Markov para rastreamento de vários alvos) Minha experiência em usar o Meanshift sozinha ao rastrear vários objetos é tudo o que não deve acontecer com o rastreamento: perder o controle, destinos confusos, fixar em segundo plano etc. Leia um pouco sobre problemas de rastreamento de objetos e associação de dados. Afinal, é importante contar várias pessoas (eu digo "pode ​​ser" porque seu objetivo é contar não rastrear, então não descarto completamente a possibilidade de uma abordagem inteligente que conte sem rastrear ...)

Meu último conselho é: não há tanta coisa que você pode fazer com uma determinada abordagem , e você vai precisar de material mais sofisticado para conseguir uma melhor performance (assim que eu discordar user36624 a este respeito). Isso pode implicar na alteração de uma parte do seu algoritmo por algo mais poderoso, ou na alteração completa da arquitetura. Claro, você precisa saber quais coisas sofisticadas são realmente úteis para você. Existem publicações que tentam resolver o problema de uma maneira baseada em princípios, enquanto outras simplesmente criam um algoritmo para um determinado conjunto de dados e esperam que você treine um classificador que não seja realmente adequado ao problema em questão, enquanto exige que você ajuste alguns limites também. A contagem de pessoas épesquisa em andamento, então não espere que as coisas aconteçam facilmente. Faça um esforço para aprender coisas que estão um pouco além da sua capacidade e, em seguida, faça isso de novo e de novo ...

Reconheço que não ofereci nenhuma solução e, em vez disso, apenas apontei falhas em sua abordagem (que vêm de minha própria experiência). Para inspiração, recomendo que você leia algumas pesquisas recentes, por exemplo, Rastreamento de vários alvos estável em vídeo de vigilância em tempo real . Boa sorte!

Jong Bor Lee
fonte
9

Acho que você está perguntando sobre a viabilidade do seu algoritmo de pedestres.

Existem duas estratégias gerais para esse tipo de problemas:

  1. (de baixo para cima) Considere-o como um problema de detecção puro, em que em cada quadro você detecta apenas pedestres. Depois de detectá-los, a) contar o número em um quadro é bastante fácil; eb) rastrear qualquer um deles em quadros consecutivos também é fácil. Portanto, você resolve tudo.

  2. (de cima para baixo) Considere-o como um problema de reconhecimento de ações, em que você detecta se um ROI em quadros consecutivos é um pedestre ou não está de acordo com suas ações. Depois de resolver esse problema, você resolve os problemas de detecção e rastreamento simultaneamente.

Seu algoritmo heurístico está na primeira categoria. Não quero desencorajá-lo, mas você pode perder o ponto principal de como detectar um pedestre. Porque dados reais podem ser mais complicados do que você pensava. Por exemplo, se for uma câmera de metrô, cujos quadros talvez estejam cheios de pedestres e, assim, remover o fundo ou detectar bolhas não ajudam em nada. Nesse caso, talvez seja mais razoável usar algoritmos de detecção e reconhecimento de rosto para resolver o problema, porque se você encontrar um rosto, encontrará um pedestre. Por outro lado, dependendo da sua definição de pedestre, talvez seja verdade que nem todos que apareceram em um quadro devam ser tratados como pedestres. Nesse caso, pode ser razoável usar algoritmos de reconhecimento de ação (a segunda categoria), nos quais você pode definir explicitamente um pedestre com base em seus comportamentos.

Aqui estão algumas dicas baseadas na minha experiência:

  1. Mantenha o que sabe e o que pode captar facilmente. Não invista seu tempo em algo sofisticado, mas exija muitas experiências que você não tem. Confie em mim, todos esses algoritmos serão bons em alguns casos, mas ruins em outros. Portanto, a primeira coisa é fazer alguma coisa funcionar, não importa quão boa ou ruim ela seja.

  2. Saiba mais sobre seus dados e determine seu método. Uma descrição geral sobre um problema é insuficiente em muitos casos.

  3. Se você quiser demonstrar sua ideia, é melhor usar o MATLAB e criar um protótipo.

armadilha
fonte