Saltar al contenido
Volver a proyectos

2026

NetTune

  • Python
  • OpenAI Vision
  • Raspberry Pi
  • Samba
  • SQLite
  • python-docx
  • pytest

Hecho para el equipo de seguridad y mantenimiento de un centro comercial, y en uso allí. El personal escanea los partes del día, escritos a mano, en una carpeta compartida de una Raspberry Pi. Un modelo de visión de OpenAI lee cada hoja dos veces, por separado; luego se fechan, se ordenan por turno y se filtran las rutinas. Un correo avisa cuando un lote está listo. Una persona del equipo revisa cada hoja junto a sus líneas en un panel web, y con un clic se genera la memoria mensual en Word del centro. Un presupuesto mensual fijo se comprueba antes de cada llamada a la API; a unas cinco páginas al día cuesta alrededor de 1,20 € al mes.

Un lote, de principio a fin

Una persona del equipo escanea las hojas del día, escritas a mano, en una carpeta compartida de una Raspberry Pi. Cada página del PDF se rasteriza a 300 ppp y el modelo de visión de OpenAI la lee dos veces, por separado.

Las lecturas se comparan línea a línea y cada fecha se comprueba con el resto del lote. Las líneas que pasan las dos comprobaciones van directas a la memoria mensual. Todo lo dudoso se desvía, en verde azulado, a una persona en el panel de revisión, que lo confirma o lo corrige antes de que se escriba la memoria.

scan.pdfcarpeta Sambarasterizar300 ppplectura ×2visión OpenAIconsenso¿coinciden?fechascontrol de loterevisiónuna personaMEMORIA.docxmemoria mensualno coincidenfecha rara25/25 páginas3 por revisar175 líneasscan.pdfcarpeta Sambarasterizar300 ppplectura ×2visión OpenAIconsenso¿coinciden?fechascontrol de loterevisiónuna personaMEMORIA.docxmemoria mensualno coincidenfecha rara25/25 páginas3 por revisar175 líneas

Por qué cada página se lee dos veces

Un modelo leyendo letra cursiva puede equivocarse con total seguridad, y con una sola lectura no hay forma de saberlo. Por eso cada página se lee dos veces, por separado, y las dos lecturas se comparan palabra a palabra, cada palabra bajo su pareja.

Donde coinciden, la línea se da por buena. Donde una palabra difiere, aquí "aire" frente a "cobre", la línea entera se marca con las dos lecturas, para que una persona revise justo esa línea y no la hoja entera. No es infalible: las dos lecturas pueden cometer el mismo error, y por eso una persona sigue viendo todas las hojas.

pasada 1: Revisión del aire acondicionado en planta 1, sin incidencias. pasada 2: Revisión del cobre acondicionado en planta 1, sin incidencias.

consenso: 8 de 9 palabras coinciden · "aire" / "cobre" difieren → línea marcada ⚠ para una persona

La fecha que no encajaba

Un lote escaneado es una sesión de días seguidos, y eso da una segunda comprobación gratis: la fecha de cada página se compara con la de sus vecinas.

Una página fechada meses lejos de las que la rodean está mal leída, aunque las dos lecturas coincidan. Se aparta y se marca en lugar de archivarse en el mes equivocado.

batch.pdf · 1 de julio25 de julio

la página 16 dice 16-04-2026 en las dos lecturas; sus vecinas son 15-07 y 17-07 → mal leída, marcada ⚠

Lo que escribe la Pi mientras trabaja

El servicio corre en la Raspberry Pi bajo systemd. Vigila la carpeta compartida, espera a que un escaneo termine de copiarse, se salta lo que ya ha procesado, lee y comprueba cada página y guarda el resultado en la carpeta de ese mes.

Cuando lleva un par de minutos sin llegar ningún escaneo nuevo, un correo por mes avisa al equipo de cuántas hojas hay y cuántas líneas hay que revisar, con un enlace al panel.

09:14:02 vigilante escaneo nuevo: incoming_scans/batch.pdf (25 páginas)
09:14:05 pdf 25 páginas rasterizadas a 300 ppp
09:14:31 lectura p01–p25: 2 lecturas cada una, 50 llamadas
09:14:58 consenso p07: 1 línea no coincide ("aire" / "cobre")
09:14:58 consenso p20: 1 línea no coincide ("09:40" / "09:10")
09:15:01 fechas p16 dice 16-04-2026, el lote es 01-07…25-07 → marcada
09:15:02 rutina 41 revisiones rutinarias fuera de la memoria
09:15:02 gasto 0,14 € este lote · 1,06 € / 5,00 € este mes
09:17:03 aviso correo enviado: JULIO listo, 3 líneas por revisar

Nunca por encima del presupuesto

Cada llamada a la API se comprueba contra un tope mensual fijo antes de hacerse. Si se alcanza el tope, los escaneos esperan en la carpeta hasta que empieza el mes siguiente: no se pierde nada y no se gasta de más.

A unas cinco páginas al día, un mes cuesta alrededor de 1,20 € de un tope de 5 €. Cada barra es el gasto de un día frente a la parte del tope que le toca a ese día.

en lo que va de mes 1,21 € de un tope de 5,00 € · [#####...............]

La letra cursiva no se puede transcribir a la perfección, y los fallos no avisan. En una hoja real, la palabra “aire” se leyó como “cobre” en cinco de seis pasadas con dos modelos, con seguridad y por unanimidad, aun teniendo ambas palabras en el glosario del prompt. Que una lectura parezca correcta no demuestra que lo sea.

Eso cambió el diseño. Ninguna lectura se da por buena sola: cada página se lee dos veces y cualquier desacuerdo pasa a una persona con las dos lecturas (figura 2), y cada fecha se comprueba con su lote (figura 3). La comprobación de fechas se ganó su sitio en un lote real de julio de 25 páginas, donde detectó una hoja leída por unanimidad como 16-04-2026, algo que comparar lecturas nunca habría detectado.