Actualmente estoy desarrollando un proyecto de contador de peatones (usando OpenCV + QT en Linux). Mi idea sobre el enfoque es:
- Marcos de captura
- Hacer sustracción de fondo
- ruidos claros (erosionar, dilatar)
- find blobs (cvBlobslib) - objetos en primer plano
- Para cada blob, establezca el ROI y busque peatones (LBP con detectMultiScale) en estos blobs (para un mejor rendimiento)
- Para cada peatón encontrado, realice una búsqueda anidada de la parte superior del cuerpo (No estoy seguro) (mejor confiabilidad)
- Si se encuentra el mismo peatón en los cuadros continuos (de 3 a 4 cuadros), agregue esa área al cambio de levas y la pista, marque como peatón
- Excluya las áreas rastreadas por desplazamiento de levas de la detección de manchas para los próximos cuadros
- Si un peatón cruza un número de incremento de línea
Quiero verificar si estoy en el camino correcto. ¿Tiene alguna sugerencia sobre cómo mejorar mi enfoque? Si alguien trabajara en algo similar, agradecería cualquier consejo útil, recursos (y críticas) sobre este problema.
Respuestas:
Puedo ver una serie de posibles problemas con este enfoque. Hablo desde mi propia experiencia aquí al mejorar un sistema de conteo de peatones con un enfoque muy similar, por lo que no quiero desanimarme. Por el contrario, me gustaría advertirle de los posibles obstáculos que puede tener que superar para construir un sistema preciso y robusto.
En primer lugar, la sustracción de fondo supone que los objetos de interés siempre se moverán, y los objetos que no le interesa contar permanecerán completamente quietos. Seguramente, este puede ser el caso en su escenario, pero sigue siendo una suposición muy limitante. También he encontrado que la sustracción de fondo es muy sensible a los cambios en la iluminación (estoy de acuerdo con geometrikal).
Tenga cuidado de suponer que un blob = una persona , incluso si cree que su entorno está bien controlado. Ocurrió con demasiada frecuencia que las manchas correspondientes a las personas no se detectaron porque no se movían o eran demasiado pequeñas, por lo que se eliminaron por erosión o por algunos criterios de umbral (y créanme, no quieren entrar en el " sintonice los umbrales hasta que todo funcione "trampa. No funciona;)). También puede suceder que una sola gota corresponda a dos personas caminando juntas, o una sola persona que lleve algún tipo de equipaje. O un perro Así que no hagas suposiciones ingeniosas sobre los blobs.
Afortunadamente, dado que mencionas que estás usando LBP para la detección de personas , creo que estás en el camino correcto de no cometer los errores en el párrafo anterior. Sin embargo, no puedo comentar sobre la efectividad de LBP en particular. También he leído que HOG (histograma de gradientes) es un método de vanguardia en la detección de personas, ver Histogramas de gradientes orientados para la detección humana .
Mi última queja está relacionada con el uso de Camshift . Se basa en histogramas de color, por lo que, por sí solo, funciona bien cuando se rastrea un solo objeto que es fácil de distinguir por color, siempre que la ventana de seguimiento sea lo suficientemente grande y no haya oclusiones o cambios bruscos. Pero tan pronto como tenga que rastrear múltiples objetivos que pueden tener descripciones de color muy similares y que se moverán muy cerca uno del otro, simplemente no puede prescindir de un algoritmo que de alguna manera le permita mantener múltiples hipótesis. Esto puede ser un filtro de partículas o un marco como MCMCDA (Asociación de datos de Markov Chain Monte Carlo, ver Asociación de datos de Markov Chain Monte Carlo para seguimiento de objetivos múltiples) Mi experiencia con el uso de Meanshift solo cuando rastrea varios objetos es todo lo que no debería suceder con el seguimiento: perder el seguimiento, confundir objetivos, fijar en segundo plano, etc. Lea un poco sobre el seguimiento de múltiples objetos y los problemas de asociación de datos, esto podría ser en el momento corazón de contar a varias personas después de todo (digo "podría ser" porque su objetivo es contar sin rastrear, por lo que no descarto por completo la posibilidad de un enfoque inteligente que cuente sin rastrear ...)
Mi último consejo es: no es mucho lo que se puede hacer con un enfoque determinado , y que va a necesitar cosas más elegante para lograr un mejor rendimiento (por lo que no estoy de acuerdo con user36624 en este sentido). Esto puede implicar cambiar una parte de su algoritmo por algo más poderoso, o cambiar la arquitectura por completo. Por supuesto, debes saber qué cosas elegantes son realmente útiles para ti. Hay publicaciones que intentan resolver el problema de una manera basada en principios, mientras que otras simplemente inventan un algoritmo para un conjunto de datos dado y esperan que usted entrene un clasificador que no se adapte realmente al problema en cuestión, mientras lo requiere ajustar algunos umbrales también. El conteo de personas esinvestigación continua, así que no esperes que las cosas vengan fácilmente. Haga un esfuerzo por aprender cosas que estén un poco más allá de su capacidad, y luego hágalo una y otra vez ...
Reconozco que no he ofrecido ninguna solución y, en cambio, solo he señalado fallas en su enfoque (que provienen de mi propia experiencia). Como inspiración, le recomiendo que lea algunas investigaciones recientes, por ejemplo , el seguimiento estable de múltiples objetivos en video de vigilancia en tiempo real . ¡Buena suerte!
fuente
Creo que lo que está preguntando es sobre la viabilidad de su algoritmo peatonal.
Hay dos estrategias generales para este tipo de problemas:
(de abajo hacia arriba) Considérelo como un problema de detección pura, en el que en cada cuadro solo se detectan peatones. Una vez que los detecta, a) contar su número en un marco es bastante fácil; yb) el seguimiento de cualquiera de ellos en cuadros consecutivos también es fácil. Por lo tanto, resuelves todo.
(de arriba a abajo) Considérelo como un problema de reconocimiento de acción, donde detecta si un ROI en cuadros consecutivos es peatonal o no según sus acciones. Una vez que resuelve este problema, resuelve los problemas de detección y seguimiento simultáneamente.
Su algoritmo heurístico está en la primera categoría. No quiero desanimarte, pero podrías perder el punto clave de cómo detectar a un peatón. Porque los datos reales pueden ser más complicados de lo que pensabas. Por ejemplo, si se trata de una cámara de metro, cuyos cuadros pueden estar llenos de peatones y, por lo tanto, eliminar el fondo o detectar manchas no ayuda en absoluto. En este caso, puede ser más razonable usar algoritmos de detección de rostros y reconocimiento de rostros para resolver el problema, porque si encuentra un rostro, encuentra un peatón. Por otro lado, dependiendo de su definición de peatón, puede ser cierto que no todos aparecieron en un cuadro deben ser tratados como peatones. En este caso, puede ser razonable utilizar algoritmos de reconocimiento de acciones (la segunda categoría), donde puede definir explícitamente a un peatón en función de sus comportamientos.
Aquí hay algunos consejos basados en mi experiencia:
Apégate a lo que sabes y lo que puedes recoger fácilmente. No invierta su tiempo en algo elegante, pero requiere muchos antecedentes que no tiene. Confía en mí, todos estos algoritmos serán buenos en algunos casos pero malos en otros. Por lo tanto, lo primero es hacer que algo funcione, no importa cuán bueno o malo sea.
Conozca más sobre sus datos y luego determine su método. Una descripción general sobre un problema es insuficiente en muchos casos.
Si quieres demostrar tu idea, es mejor usar MATLAB y construir un prototipo.
fuente