Wednesday, October 17, 2018

Sistema de videovigilancia con deteccion de movimiento en una RPi3


Existen cantidad de proyectos que se pueden llevar a cabo en una Raspberry solo es cuestión de imaginación y tiempo para dedicarle, pero en mucho de ellos nos encontramos con la limitación del hardware, admitámolos por el precio de una RPi3 que más podemos pedir, sin embargo analizando un poco el problema podemos dar con una solución al problema que supone la limitación del hardware como iremos viendo a lo largo de los posts.

Hace ya un tiempo que había comprado una cámara IP de oferta, una Sricam, es una marca china con lo que tampoco esperaba que tuviera una API accesible o un montón de herramientas para manejarla. Venía con lo justo, una app para android donde podías ver la cámara, rotarla usar el micro y poco más, pero tenía algo más interesante, usaba el protocolo onvif lo que por lo menos significaba que tenía un stream de video al que podía acceder via IP.

Esto me daba la posibilidad de reproducir el vídeo desde cualquier equipo de casa que estuviera conectado a la red, pero ¿y si le añadiera algo más para hacerlo más completo?, por ejemplo, detección de movimiento estaría bien. Existe muchas implementaciones en distintos lenguajes y numerosos algoritmos distintos para hacer uso de la detección. El algoritmo que se ha usado en este caso es el que ofrece la funcion de OpenCV cv2.BackgroundSubtractorMOG aunque existen más son similares y se basan en crear una separación del fondo y lo que sería el primer plano, pero ¿porque esta separación de dos planos? El fondo sería algo constante a lo largo de los frames y cualquier variación que se observe a lo largo de las iteraciones pertenece al primer plano y se considera movimiento.

Este método de detección es el más simple y se ve afectado por cambios en la iluminación, reflejos y sombras, básicamente cualquier cosa que varie la imagen de fondo se considera movimiento, pero también es menos costosa computacionalmente y dado que va a ir en una Raspberry sería lo ideal, la idea final es usarlo en una vivenda donde no habrá tanto movimiento como en un recinto público con lo que las veces que va hacer uso de este algoritmo van a ser reducidas.

Más adelante explicará este algoritmo en detalle. Volviendo a la parte del vídeo, tenemos una cámara IP que nos ofrece un flujo de vídeo por rtsp de la siguiente forma 'rtsp://x.x.x.x:554/onvif1', pero ¿y si no tenemos camara ip y queremos usar una RPi con un módulo de cámara? Pues lo suyo sería hacer un flujo rtsp de forma similar a como lo hace la cámara, de esta forma si algún día queremos meter una cámara IP en nuestro sistema no hay que adaptar el código para la detección.

En el siguiente post veremos como hacer una cámara IP a partir de una RPi y las herramientas que necesitamos en nuestro servidor para que funcione la detección de movimiento.

No comments:

Post a Comment