German

Computer vision y fuera gato

Hace tiempo que estoy intentando resolver un problema: cómo alejar al gato que viene a hacer sus necesidades en mi jardín.

Tengo un jardín bastante amplio y un nene pequeño que disfruta jugar en él, pero también tengo un gato que decidió usarlo de caja sanitaria.

Intente alejarlo usando todos los tips que se pueden encontrar en Google, hasta el que dice qué hay que orinar (si, es real y lo hice) en el pasto para marcar territorio. Compre repelentes, fabrique repelentes. Nada funcionó.

La verdad es que es bastante frustrante porque el gato deja sus regalitos por todos lados y llegamos al punto en que mi hijo no puede usar su propio jardín. Se volvió una situación insostenible.

Me propuse buscar una solución que desalentase al gato a visitar a mi jardín pero sin causarle ningún daño.

###Ahí es donde entra computer vision. alt

Python y OpenCV

OpenCV es una librería abierta de inteligencia artificial y machine learning. Con Python y OpenCV se pueden hacer cosas muy interesantes en muy poco tiempo, por ejemplo detectar objetos en tiempo real.

####¿Cómo alejar al gato? Para poder asustarlo primero tengo que poder verlo, para verlo tengo que saber cuándo está en mi jardín. Básico. Pero difícil, salvo que uno se pase 24hs al día mirando por la ventana.

Para esto hice un script que utiliza un modelo (bastante simple) y puede reconocer objetos, personas y algunos animales. El gato es uno de ellos.

La detección puede hacerse tomando una imagen o un video. En mi caso necesitaba que fuese video y que provenga de una webcam. Detección en tiempo real.

¿Por qué no usar simplemente la detección de movimiento?

Porque puede ser disparada por otros factores, no me sirvió. Lo probé.

¿Que hice?

Coloque una cámara en el jardín, apuntando al lugar más visitado por el gato, y deje corriendo el script toda la noche (suele venir a la madrugada). Funcionó.

¿Cómo funciona?

El script utiliza la cámara como fuente de imágenes y analiza constantemente lo que recibe. Hace sonar una alarma cuando detecta al gato. También guarda una captura de la imagen (así podemos saber horario de la visita). Guardo también algunos parámetros como ser el % de confidencia, fecha y hora.

La alarma lo espanta o me permite a mí poder asustarlo, ya que me avisa cuando está presente. Lo asusta y no lo lastima, ese era el objetivo.

En vez de usar una alarma podríamos accionar algún interruptor del tipo sonoff o bien prender aspersores (si se cuenta con esa posibilidad). Una vez detectado cada uno decidirá qué hacer.

Si bien esto no es nada disruptivo me pareció interesante contar cómo, con un poco de tecnología, se pudo resolver un problema donde las opciones populares no tenían efecto.

Dejo el script en GitHub https://github.com/conejog/opencv-detector

Algunas aclaraciones: El modelo está completo (se detectan todos los posibles objetos) pero lanzo la alarma solo cuando se detecta gato, perro o persona (por suerte esto último no pasó).

Dejo varias líneas comentadas para que puedan usar algunas opciones que probé.

Seguramente haya cosas para mejorar ya que no soy experto en el tema.

La idea no es explicar cómo funciona OpenCV ni Python sino mostrar cómo abordar un problema básico utilizando tecnología al alcance de casi cualquier persona.

Espero que esto pueda servirles como disparador para encontrar soluciones poco convencionales a problemas cotidianos o bien los incentive a jugar un poco con OpenCV ya que es muy divertido y sumamente útil.