Quiero usar mi teléfono como un sistema de CCTV para controlar una habitación en mi casa y mostrar una alerta cuando algo se está moviendo.
Por ahora, lo que he logrado hacer es tomar una imagen cada minuto y subirla a mi servidor a través de un script PHP. Ahora, me gustaría comparar la imagen actual y la imagen hace 1 minuto y detectar si alguien entró en la habitación. Básicamente, necesitaría comparar las diferencias de píxeles en la imagen (pero también teniendo en cuenta que una nube puede saludar y cambiar el brillo durante un minuto)
¿Alguien tiene idea de cómo lograr eso o algún documento para leer?
Respuestas:
Me parece que lo que estás buscando es la técnica de sustracción de fondo. Con imágenes ruidosas y condiciones de iluminación cambiantes, podría no ser trivial. La técnica actual más avanzada para esto es la representación matricial de bajo rango, pero no requiere dos, sino muchas (~ docenas) de imágenes. Siguen algunos cálculos matemáticos pesados: cada imagen considerada como un vector de píxeles, vectores combinados en una matriz y esta matriz se descompone en una matriz de bajo rango y un remanente. Las columnas de matriz de bajo rango son fondos y el remanente es objetos en movimiento. Hay algunas implementaciones de código abierto, pero solo para la factorización en sí, no completa la tubería de imagen IIRC
Aquí hay un documento y un código para la factorización matricial http://www.ece.rice.edu/~aew2/sparcs.html
Aquí hay una descripción general del blog de CS y un enlace a otro código:
https://sites.google.com/site/igorcarron2/matrixfactorizations
http://nuit-blanche.blogspot.com/search/label/MF
Encuesta de algunas otras técnicas: http://www.vis.uni-stuttgart.de/uploads/tx_vispublications/Brutzer2011-2.pdf
fuente
Recuerde: hay sombras (no solo brillo).
Realmente no me gusta la idea de James Webster, ya que básicamente es reducir la resolución en cada dimensión y comparar las imágenes reducidas (tampoco me gustan los umbrales, son arbitrarios, tienes que probarlos y ajustarlos hasta que obtenga un buen valor y al día siguiente estos valores podrían quedar obsoletos debido a diferentes condiciones climáticas u otros efectos ambientales)
Pero para ser justos, tampoco tengo una muy buena solución. Mi primera idea fue diferenciar cada imagen a una imagen de referencia de la habitación vacía y ejecutar una detección de bordes en la imagen de diferencia. Pero esto también detectaría sombras. Pero supongo que no puedes diferenciar entre las sombras y otros objetos ... al menos no sé cómo. Pero tal vez pueda comparar el resultado después de la detección de borde entre 2 cuadros, ya que las sombras se mueven principalmente lentamente (aún habrá problemas cuando pasen los automóviles o cuando pase una nube)
fuente
¡La técnica de "factorización matricial" NO lo ayudará a hacer su trabajo! El artículo referido por @ mirror2image trata sobre la sustracción del fondo pero NO está basado en la "factorización matricial".
El uso de videos en ejecución para detectar objetos en movimiento (ya sea humanos o vehículos) es un área activa de investigación.
Como principio básico, el sistema estima un fondo estático típico mediante el muestreo de múltiples imágenes y toma una diferencia de energía entre la imagen entrante y el fondo. Si la energía es significativa, el píxel se clasifica como primer plano. Tal conjunto de primer plano le indica si hay una entrada del objeto en el sistema.
La mejor referencia a su trabajo de investigación (y también relativamente más simple si realmente desea implementar) sería: W4 System lo encontrará aquí y vea el documento de Picardi aquí como una encuesta más detallada para otras técnicas en el sistema.
Hay muchos desafíos que se aplican al problema:
La presencia de ruido crea problemas de gran ambigüedad. El enfoque aquí es aplicar un filtro temporal eficiente y considerar la variación del ruido para hacerlo inmune al umbral.
La presencia de sombras crea la ambigüedad de no ser un primer plano ni ser un primer plano. Hay documentos que modelan la distinción entre color e intensidad para distinguir entre sombra y primer plano real.
El fondo puede ser complejo como agitar árboles o mar, etc.
El fondo puede tener una variación de iluminación lenta o repentina donde el fondo "aprendido" anterior se adapta al nuevo.
Uno de los documentos de referencia más conocidos se llama Algoritmo de flor de pared que muestra la mejor manera de combinar varios de estos escenarios para producir una detección robusta de objetos en movimiento.
fuente
No sé la solución exacta, pero deberías hacer algún tipo de hash de la imagen; un conjunto de datos más pequeño extraído de la imagen, que es comparable mejor que la imagen completa.
Creo que el histograma de color es una buena opción para ello.
Si divide su imagen en áreas y crea histogramas separados para estas áreas, puede determinar la posición / trayectoria del intruso.
fuente
Tomar la diferencia dos veces, es decir, la diferencia de diferencias puede ayudar ... así que si la derivada doble de píxeles es mayor que un umbral en algunas regiones, entonces puede llamarlo como alguien ingresó a la sala. El cambio en el brillo dará un gradiente aproximadamente constante en toda la imagen, pero tomar la derivada hessiana o doble dará una buena indicación de movimiento o cambios importantes en la habitación.
fuente