raspberry - reconocimiento de imagenes python
¿Cómo puedo detectar y rastrear personas usando OpenCV? (4)
Tengo una cámara que será estacionaria, apuntando a un área interior. La gente pasará junto a la cámara, a unos 5 metros de ella. Usando OpenCV , quiero detectar a las personas que pasan caminando; mi retorno ideal es una serie de individuos detectados, con rectángulos delimitadores.
He visto varias de las muestras integradas:
- Ninguna de las muestras de Python realmente se aplica
- La muestra de seguimiento C blob parece prometedora, pero no acepta video en vivo, lo que dificulta las pruebas. También es la más complicada de las muestras, lo que hace 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 los siguientes cuadros de video. Es de suponer que podría usar eso para encontrar componentes fuertemente conectados y extraer blobs individuales y sus cuadros delimitadores, pero todavía estoy tratando de encontrar una manera de identificar los blobs que se encuentran en los cuadros posteriores como el mismo blob.
¿Alguien puede proporcionar orientación o ejemplos para hacerlo, preferiblemente en Python ?
Esta es claramente una tarea no trivial. Tendrá que buscar publicaciones científicas en busca de inspiración ( Google Scholar es su amigo aquí). Aquí hay un documento sobre la detección y el seguimiento humano : seguimiento humano por búsqueda de modo de desplazamiento rápido medio
Esto es similar a un proyecto que hicimos como parte de un curso de Visión por computadora, y puedo decirle ahora mismo que es un problema difícil hacerlo bien.
Puede usar la segmentación de primer plano / fondo, encontrar todos los blobs y luego decidir que son personas. El problema es que no funcionará muy bien ya que las personas tienden a ir juntas, se pasan unas a otras y así sucesivamente, por lo que una burbuja podría consistir en dos personas y luego verá esa burbuja dividirse y fusionarse mientras caminan.
Necesitará algún método para discriminar entre varias personas en un blob. Esto no es un problema. Espero que alguien pueda responder en una sola publicación SO.
Mi consejo es profundizar en la investigación disponible y ver si puedes encontrar algo allí. El problema no es insostenible considerando que existen productos que hacen esto: Autoliv tiene un producto para detectar peatones que usan 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.
La última versión de SVN de OpenCV contiene una implementación (no documentada) de detección de peatones basada en HOG. Incluso viene con un detector preentrenado y una envoltura de pitón. 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 cuadro y usar su salida directamente.
Consulte src/cvaux/cvhog.cpp
para la implementación y samples/python/peopledetect.py
para obtener un ejemplo más completo de python (ambos en las fuentes de OpenCV).
Mella,
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 detección de movimiento dependiendo de lo que vas a hacer con los resultados. El más simple sería la diferenciación seguida por el umbral mientras que uno complejo podría ser el modelado de fondo adecuado -> resta en primer plano -> operaciones morfológicas -> análisis de componentes conectados, seguido de análisis de blobs si es necesario. Descargue el código de OpenCV y busque en el directorio de ejemplos. Es posible que vea lo que está buscando. Además, hay un libro de Oreilly sobre OCV.
Espero que esto ayude, Nand