¿Cómo puedo detectar y rastrear personas usando OpenCV?


Tengo una cámara que estará estacionaria, apuntando a un área interior. La gente caminará más allá de la cámara, a unos 5 metros de ella. Usando OpenCV , quiero detectar individuos que pasan caminando - mi retorno ideal es una matriz de individuos detectados, con rectángulos delimitadores.

He mirado varias de las muestras integradas:

  • Ninguna de las muestras de Python realmente se aplican
  • La muestra de seguimiento de blob C parece prometedora, pero no acepta video en vivo, lo que dificulta las pruebas. También es la más complicada de las muestras, haciendo que extraer el conocimiento relevante y convertirlo a la API de Python sea problemático.
  • La muestra C 'motempl' también parece prometedora, ya que calcula una silueta a partir de fotogramas de vídeo posteriores. Presumiblemente podría usar eso para encontrar componentes fuertemente conectados y extraer manchas individuales y sus cajas delimitadoras, pero todavía estoy tratando de encontrar una manera de identificar blobs encontrados en fotogramas posteriores como el mismo blob.

Es alguien capaz de proporcionar orientación o muestras para hacer esto - preferiblemente en Python?

Author: Jav_Rock, 2010-02-03

4 answers

La última versión SVN de OpenCV contiene una implementación (indocumentada) de detección de peatones basada en cerdos. Incluso viene con un detector pre-entrenado y una envoltura de python. El uso básico es el siguiente:

from cv import *

storage = CreateMemStorage(0)
img = LoadImage(file)  # or read from camera

found = list(HOGDetectMultiScale(img, storage, win_stride=(8,8),
                padding=(32,32), scale=1.05, group_threshold=2))

Entonces, en lugar de rastrear, puede ejecutar el detector en cada fotograma y usar su salida directamente.

Ver src/cvaux/cvhog.cpp para la implementación y samples/python/peopledetect.py para un ejemplo más completo de python (ambos en las fuentes OpenCV).

 27
Author: Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-20 00:16:52

Nick,

Lo que está buscando no es la detección de personas, sino la detección de movimiento. Si nos dice mucho más sobre lo que está tratando de resolver/hacer, podemos responder mejor. De todos modos, hay muchas maneras de hacer la detección de movimiento dependiendo de lo que vas a hacer con los resultados. Una más simple sería la diferenciación seguida de umbral, mientras que una compleja podría ser el modelado de fondo adecuado - > sustracción de primer plano - > ops morfológico - > análisis de componentes conectados, seguido de análisis de blobs si es necesario. Descargue el código opencv y busque en el directorio de muestras. Puede que veas lo que estás buscando. Además, hay un libro de Oreilly sobre OCV.

Espero que esto ayude, Nand

 5
Author: Nand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-28 18:12:11

Esta es claramente una tarea no trivial. Tendrás que buscar inspiración en publicaciones científicas (Google Scholar es tu amigo aquí). Aquí hay un documento sobre la detección y el seguimiento humano: Seguimiento humano por búsqueda de modo de cambio medio rápido

 4
Author: geschema,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-14 11:19:18

Esto es similar a un proyecto que hicimos como parte de un curso de Visión por Computadora, y puedo decirles ahora mismo que es un problema difícil de resolver.

Puede usar la segmentación de primer plano/fondo, encontrar todos los blobs y luego decidir que son una persona. El problema es que no va a funcionar muy bien ya que la gente tiende a ir juntos, ir más allá de uno al otro y así sucesivamente, por lo que un blob muy bien podría consistir en dos personas y luego verá que la blob se divide y se fusiona a medida que caminan junto.

Necesitará algún método para discriminar entre varias personas en un blob. Esto no es un problema espero que nadie pueda responder en un solo SO-post.

Mi consejo es sumergirse en la investigación disponible y ver si se puede encontrar algo allí. El problema no es irresoluble teniendo en cuenta que existen productos que hacen esto: Autoliv tiene un producto para detectar peatones usando una cámara IR en un automóvil, y he visto otros productos que se ocupan de contar clientes que entran y salen de las tiendas.

 1
Author: Hannes Ovrén,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-03 09:13:15