¿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?
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).
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
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
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.
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