En este pequeño tutorial vamos a explorar la forma de crear una cámara de seguridad diferencial. Es decir una cámara que reacciona al comparar matemáticamente dos fotografías constantemente.

Suena complejo, pero gracias a nuestros amigos de ImageMagick en Linux, termina siendo realmente sencillo.

Básicamente queremos tomar una foto como base, luego tomar otra, si esta segunda foto es diferente de la anterior, entonces algo se movió así que guardamos esa segunda foto y reportamos el hallazgo, usamos esta ultima foto como base y repetimos el proceso.

Para lograr esto en una Raspberry PI 3 (desde la cual escribo y programo hoy) vamos a utilizar dos utilitarios:

  1. raspistill: Utilitario de Raspbian que adquiere una foto de una cámara compatible con el puerto para cámara del Raspberry PI.
  2. compare: Utilitario del paquete ImageMagick de Linux que compara dos fotografías para determinar la diferencia matemática entre ellas.

(!) Antes de instalar paquetes adicionales, es importante recordar mantener al dia el sistema operativo mediante los comandos sudo apt update seguido de  sudo apt upgrade

Para instalar imagemagick usaremos: sudo apt install imagemagick

Para tomar una fotografía hay que tener en cuenta lo siguiente:

  1. Si no está habilitada, es necesario habilitar la cámara del Raspberry PI. Para esto se puede usar el Menu de Raspbian > Preferences > Raspberry PI Configuration
    Una vez en la pantalla de configuración, buscamos la pestaña «Interfaces» y nos aseguramos de que la cámara esté en posición «Enabled» y hacemos clic en «OK»
    (!) Es probable que necesite rebootear el Raspberry PI si la cámara estaba deshabilitada.
  2. El comando básico para tomar una foto es este: raspistill -o test.jpeg
  3. Una variante que usaremos más adelante para tomar una foto sin una pantalla de preview es esta: raspistill -nopreview -o test.jpeg

Para comparar dos fotografías usamos el siguiente comando: compare -metric RMSE foto1.jpeg foto2.jpeg NULL:

Así las cosas, el siguiente ejercicio tomaremos dos fotos, y las compararemos.

  1. Tomamos una primera foto: raspistill -o foto1.jpeg
  2. Sin variar la cámara ni la escena, tomamos una segunda foto: raspistill -o foto2.jpeg
  3. Variamos la escena, moviendo un objeto ligermanete y tomamos una tercera foto: raspistill -o foto3.jpeg
  4. Comparamos el resultado de una misma escena: compare -metric RMSE foto1.jpeg foto2.jpeg NULL:
    Esto nos devuelve un valor parecido a este : "2433.9 (0.0371389)".
  5. Ahora comparamos el resultado de la escena movida: compare -metric RMSE foto1.jpeg foto2.jpeg NULL:
    En este caso vemos que la diferencia matemática aumenta: "4396.62 (0.067088)"

Abajo dejo las fotos 1,2 y 3 en orden a manera de ilustración.

En nuestra próxima entrega vamos a estudiar la forma de automatizar este proceso con nodejs.

FIN!


Foto 1 – Base

foto1s


Foto 2 – Misma escena

foto2s


Foto 3 – Escena con variaciones

foto3s

 

 

 

 

 6,281 total views,  1 views today

2Shares
Última modificación: febrero 3, 2017

Autor

Comentarios

Mas que un comentario una pregunta: como guardar el valor que arroja el comando «compare» en un txt?

Hola Ariel, disculpa la demora en nuestra respuesta. Eso que preguntas es muy sencillo, simplemente tomas el comando (digamos el paso 5 del demo y le agregas la redirección de salida tal y como se muestra a continuación: compare -metric RMSE foto1.jpeg foto2.jpeg NULL: > registro.txt &> errores.txt Así la ejecución normal se registrará en el archivo registro.txt el cual será reinicializado en cada corrida. Los errores se registrarán en el archivo errores.txt Puedes encontrar más información acá: https://askubuntu.com/questions/420981/how-do-i-save-terminal-output-to-a-file

Escribe una respuesta o comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.