Estoy en el Alpha testing de un dispositivo llamado Sensecap Watcher, Seeed Studio me lo envió sin costo ni condición alguna que influya mi opinión. Este artículo documenta mis primeras impresiones y pruebas realizadas.

El Sensecap Watcher es un dispositivo al cual se le puede pedir que notifique cuando su cámara detecte algún objeto o actividad en específico. Ej. “Avísame cuando veas un coche rojo”. La manera en la que logran esto es muy interesante, pero primero un poco de detalle sobre el hardware.

Hardware

El Watcher tiene un procesador Arm Cortex-M55 + U55. Lo interesante es el chip U55, el cual está diseñado para poder correr de manera muy eficiente ciertas operaciones matriciales muy comunes en machine learning (especialmente en redes neuronales), lo cual le permite poder correr modelos de visión por computadora como detección de objetos, estimación de pose y clasificación de manera 100% local.

También cuenta con una cámara de Raspberry Pi, micrófono, perilla para interactuar con el dispositivo, pantalla táctil, bocina y batería. También tiene unos puertos I/O y Grove para que se pueda integrar a otros proyectos más grandes, incluso se puede usar el Watcher como si fuera un sensor.

Cuenta con un ESP32 que brinda también la conectividad por medio de bluetooth y wifi. La versión de Alpha testing que me llegó, tiene una carcasa transparente que me encantó, soy niño de los 90’s por lo que el plástico transparente me encanta.

Software

Aunque el hardware por sí solo ya es muy bueno, lo más interesante está en el software del producto. Ya que lo que buscan es que puedas pedirle que te notifique cuando su cámara detecte casi lo que sea. Los que hayan trabajado con modelos de visión de seguro están pensando que no hay manera de que este dispositivo tenga cargado (o pueda descargar) modelos detección para casi cualquier objeto que se nos pueda ocurrir. Y ese punto de vista es correcto, lo que hacen es apoyarse de modelos LLM capaces de interpretar imágenes, para explicar como es que lo hacen, tomemos el ejemplo de pedirle “Notifícame cuando veas a una persona con gorra roja”

  • Watcher envía esa pregunta a un LLM para entender que es lo que se le está pidiendo detectar.
  • Revisa si en una base de datos de modelos de detección existe lo que se le pidió.
  • Existe un modelo para detección de personas, pero no para gorras rojas.
  • Descarga el modelo de detección de personas para correr de manera 100% local en el Watcher.
  • Si no detecta a ninguna persona no hace nada, pero cuando detecta a alguien envía una fotografía a un LLM que describe imágenes
  • Si la descripción indica que es una persona con gorra roja, entonces detona una alerta.
Diagrama de como se conectan los componentes para hacer funcionar el Sensecap Watcher

Al solo usar la nube cuando detecta una persona se evita estar enviando llamados al LLM cada rato, actualmente solo se puede enviar una imagen al LLM cada 60 segundos, lo cual hace que las alertas te lleguen algunos segundos tarde. Esto se debe a que es un LLM en la nube (y al menos para el Alpha testing, usarla no tiene costo) entonces estar mandando a llamar la API, cada rato puede elevar los costos notablemente. A mí lo que me interesa es correr ese LLM de manera local (en un servidor local) para poderlo mandar a llamar cada segundo si es necesario, la capacidad de desplegarlo con modelos locales aún no está disponible, pero Seeed studio menciona que estará disponible para el tercer cuarto del año.

Pruebas

He estado probando el Watcher con dos cosas en mente, que tan fácil sería para un consumidor final sacarlo de la caja y ponerlo a funcionar y que tan fácil es para un(a) desarrollador(a) “hackear” este dispositivo para poder construir proyectos más grandes, que es para lo que me interesa a mí.

Recién salido de la caja

Para poder empezar a utilizar el watcher la verdad es que no se requiere de mucho, lo saqué de la caja, lo encendí, descargue el app y seguí pocos pasos para poderme conectar por bluetooth al Watcher. Es necesario tener el app para poder sacarle provecho al dispositivo, ya que para definir las tareas se requiere enviar la petición por medio del app.

Pruebas locales

Primero realicé unas pruebas que se realizaran de manera local en el dispositivo, eligiendo pedirle algo que sé que existe dentro de la base de datos de sus modelos (personas, autos, gatos, perros, etc.). También si uno quiere puede cargar modelos personalizados, pero yo use el de personas y perros, para este tipo de tareas el dispositivo funciona de maravilla, puedes definir cada cuanto quieres que se detone la alerta al detectar lo requerido (para evitar que sí hay una persona esté sonando cada dos segundos, pues está detectándola una y otra vez).

Como son modelos que han sido reducidos de tamaño drásticamente, es importante probar que detecte bien lo que necesitas, en mi experiencia casi siempre detectaba a las personas y perros y en los casos en los que no, variando un poco la toma o la iluminación lograba detectarlo, por lo cual sería un buen caso de uso donde tienes algunas variables controladas, como el lobby de un edificio donde la gente siempre va a pasar por los mismos lugares y la luz puede estar un poco más regulada.

Pantalla en la que le pides al Watcher la tarea. Por el momento es la manera en la que se interactua con el.

Pruebas con LLM en la nube

Las pruebas con LLM constan en pedirle a Watcher que me notifique cuando vea algo que sé que no está en sus modelos preentrenados, cosas como escoba, pelota de futbol, audífonos, etc. Para la mayoría de los casos con la petición que le realizaba al dispositivo lograba realizar bien la detección y alerta, aunque es importante mencionar que tienes que jugar a veces un poco con los prompts. Igual que con todos los LLM, saber hacer tu prompt o petición de la manera correcta modifica drásticamente tu probabilidad de éxito.

La documentación del Watcher menciona que por el momento este tipo de alertas se puede detonar cada 60 segundos (Es mucho procesamiento aun para un esquema en la nube, por lo que llamarlo cada segundo no sería muy rentable), el problema de esto es que nos limita a que si un evento ocurre en un momento, no tendremos otra notificación sobre cualquier otra alerta (Ej. Poner frente a la cámara una pelota de futbol y 15 segundos después pongo una escoba, veré la detección de la pelota)

Aquí hay un demo con el que puedes interactuar para que veas como funcionaría en persona. Funciona con prompts en inglés, puedes ponerlo en español, a final de cuenta los LLM tienen la capacidad de entender otros idiomas, pero los resultados son peores a si lo pones en inglés.

La ventaja es que todavía hay otras funcionalidades, las cuales estarán integrando durante estos próximos meses. En lo personal me interesan dos las cuales estarán en el Q3 de este año:

  • Push to talk: Poder usar la perilla de arriba como botón para poder activar comandos de voz. Esto abre muchas posibilidades para poder interactuar con el Watcher de manera más natural.
  • LLM local: La capacidad de poder desplegar de manera local (no en el Watcher, en servidor) el LLM encargado de procesar las imágenes para generar la descripción.

El segundo punto es el que más me interesa, la opción de poder procesar de manera local la información nos brindaría muchas mejoras teóricas como, reducción en latencia (respuestas más rápidas), mayor privacidad, menores costos (según la documentación en algún punto se cobrará por poder usar el LLM). EL FUTURO ES PROCESAMIENTO LOCAL!

Historico de alertas detectadas por el Watcher. App para iPhone, para android tambien existe.

Opiniones

El dispositivo me gustó, si tienes una idea clara de cuando usarla puede ser bastante útil, mientras no se puedan correr de manera local el LLM yo me estaré enfocando más en casos de uso con modelos que corran 100% local en el Watcher, afortunadamente puedes subir tus propios modelos a la plataforma de Sensecap y que se carguen al Watcher. Usarlo en la nube en su estado actual puede funcionar para alertas que tienes claro que no van a ocurrir muchas veces en poco tiempo y que aparte quieras estar enterado de cada una de ellas. Por ejemplo, “Avísame cuando llegue el de paquetería con una caja”, no van a llegar 10 carteros a tu casa en 30 segundos.

El tema es que los LLM siempre tienen un poco más de “aleatoreidad”, por lo que dos imágenes iguales pueden generar textos distintos y este tipo de sistemas estocásticos pueden ser susceptibles a tener falsos positivos o viceversa.

El precio del dispositivo no sé cuál será, aunque no creo que sea algo muy costoso, Seeed planea lanzar una preventa en kickstarter. Es importante que tengas claro como funciona Kickstarter antes de aportar a las campañas en general, yo he comprado productos de Seeed desde hace un par de años (sensorsillos, ESP32 y demás electrónicos que me encanta comprar y luego averiguar en qué proyecto integrarlos) y siempre ha salido todo muy bien.

Si trabajar haciendo integraciones de algo para espacios inteligentes, creo que algo como el Watcher es un gran producto a probar. Teniendo una idea clara de lo que buscas hacer se pueden tener muy buenos resultados y el hecho que puedas usarlo como si fuera un sensor por medio de UART me parece una muy buena idea.

Hemos avanzado mucho desde el inicio de los dispositivos capaces de correr redes neuronales