R&D LAB Investigación aplicada En desarrollo Versión Android en pruebas de campo

Vellum

Un escáner de documentos que calcula en el teléfono

Bordes, perspectiva, luz y texto se calculan en el teléfono. Un documento solo sale del dispositivo cuando alguien lo envía.

  • 0servidores por los que pasa una página
  • 1pasada de GPU para corrección y tono
  • 11modos de imagen en el mismo shader
  • 2detectores de bordes: visor y captura
Tres pantallas de teléfono de Vellum una junto a otra: la biblioteca con un documento, el visor con una página inclinada sobre un escritorio y la página terminada y enderezada dentro del documento

Capturado en el banco de pruebas del navegador, que ejecuta el mismo detector y el mismo shader que la aplicación. La página es un documento de prueba sintético proyectado en una foto de escritorio.

Por qué se publica

Construimos IA documental y asesoramos sobre dónde pueden residir los datos. Vellum muestra la parte de ese trabajo que va antes de cualquier modelo: preparar una imagen para que sea legible, y hacerlo allí donde ya está el documento. Eso exige un procesamiento de imagen cuya precisión se mide en lugar de estimarse, y la disciplina de probar en hardware real, porque es ahí donde aparecen defectos que ningún navegador encuentra. Si planea procesar documentos sensibles sin pasar por servidores ajenos, aquí ve cómo construimos algo así.

Un escáner fotografía documentos que uno prefiere no entregar: contratos, albaranes, documentos de identidad. Vellum encuentra los bordes de la página ya en la imagen de la cámara, corrige la perspectiva mediante una homografía, compensa luz y contraste en un fragment shader en la GPU y reconoce el texto en el teléfono. No hay ningún servidor por el que pase una página en el camino. Los PDF y las imágenes salen del dispositivo por el menú de compartir del sistema operativo, es decir, solo cuando alguien pulsa enviar por sí mismo. La aplicación está construida con Expo y React Native; una versión para Android se está probando actualmente en un emulador y en un teléfono.

La decisión

El teléfono ya está donde está el documento

La primera pregunta a este escáner no fue lo bien que encuentra los bordes, sino adónde va una página mientras lo hace. Un servidor que prepara imágenes y lee texto se construye rápido. Pero también es un lugar más donde quedan contratos, documentos de identidad y albaranes, con todas las preguntas que eso conlleva: quién tiene acceso, durante cuánto tiempo, en qué país. Por eso Vellum no tiene ninguno. Detección, corrección de perspectiva, corrección tonal y reconocimiento de texto se ejecutan en el teléfono.

De esa decisión se desprende casi todo lo demás. La corrección de perspectiva es una homografía en un fragment shader y no una llamada a un servicio. El reconocimiento de texto escribe una capa de texto invisible en el PDF, en la posición de cada línea reconocida, y hace que la biblioteca se pueda buscar sin que el texto se suba nunca. Enviar significa que la aplicación de correo o el menú de compartir del sistema se abre con el archivo adjunto, y una persona pulsa enviar.

El precio de eso hay que nombrarlo con claridad. Todo lo que necesita un servidor falta a propósito: sincronización entre dispositivos, enlaces para compartir, traducción, reconocimiento de texto en la nube. Tampoco existe el envío sin intervención, porque cada envío pasa por una persona. Y la potencia de cálculo es la del teléfono, así que cada paso tiene que caber en su presupuesto.

Lo que no sale del dispositivo no está en un segundo lugar.

El recorrido de una página

De la imagen de la cámara al archivo con búsqueda

  1. 01 Bordes en el visor En cada imagen de la cámara, un worklet lee el plano de luminosidad en una cuadrícula gruesa, y solo la parte que la pantalla muestra de verdad. De ahí sale un contorno que se suaviza y se mantiene durante unas pocas imágenes perdidas. Las esquinas se pueden arrastrar antes de disparar.
  2. 02 Esquinas tras la captura Sobre la foto busca un detector más minucioso: umbral de Otsu, regiones conexas, solo las celdas de borde situadas sobre un salto real de luminosidad, y después una recta por lado ajustada por mínimos cuadrados. Si no encuentra nada, se usa la imagen completa y las esquinas se colocan a mano. Por defecto sigue una revisión de esquinas.
  3. 03 Corregir y compensar la luz Una sola pasada de GPU. El shader lleva cada coordenada de salida de vuelta a la foto mediante la homografía y lee ahí. Estima el blanco del papel a partir de dos copias reducidas de la foto, de modo que cada luminosidad es relativa al papel, esté donde esté la lámpara.
  4. 04 Reconocer el texto El reconocimiento de texto se ejecuta en el dispositivo. A partir de la dirección de las líneas reconocidas, la aplicación lee si hay que girar la página y cuánto está inclinada, y corrige ambas cosas mediante la lista de esquinas. Si las líneas no coinciden, la página se queda como está.
  5. 05 PDF y envío Las páginas se convierten en un PDF con capa de texto invisible o en imágenes sueltas. Un tamaño objetivo reduce primero la calidad JPEG y solo después la resolución. El archivo sale por la aplicación de correo o por el menú de compartir del sistema.

Solo se busca lo que se ve

La vista previa llena la pantalla, pero la imagen de la cámara tiene otra relación de aspecto. En un teléfono alargado, aproximadamente un tercio de cada imagen queda por eso fuera de la pantalla. Mientras el detector buscaba también en ese tercio, podía colocar una esquina en un lugar que nadie veía y nadie podía arrastrar. Ahora los dos detectores buscan solo en la zona visible.

La segunda causa de un borde desplazado era una zona clara junto a la página, por ejemplo un círculo de luz de una lámpara, que se fundía con el papel en una sola mancha. Desde entonces, cada lado del contorno se valora según haya o no un salto real de luminosidad a través de él. Un círculo de luz se difumina suavemente; un borde de papel, no.

Los dos detectores tienen un entorno de medición que da el error de esquinas en un conjunto fijo de páginas de prueba frente a valores de referencia determinados de forma independiente. Cada cambio se mide antes y después.

Visor de Vellum: una página titulada Mietvertrag, Seite 3 inclinada sobre un escritorio oscuro, una cuadrícula de tercios encima y el disparador abajo
El visor en el banco de pruebas. La página es sintética y está calculada en la foto del escritorio mediante una proyección en perspectiva real, con iluminación desigual incluida.

Lo que está fijado en el dispositivo

01 La censura cambia píxeles Las zonas censuradas son uniforms del shader y se pintan en el mapa de bits de la página durante el renderizado. Después no queda nada bajo el recuadro negro, y cada exportación posterior lleva la censura. El límite de doce recuadros por página es el tamaño de ese array.
02 Las firmas nunca se convierten en archivo Una firma se guarda como trazado vectorial en el almacenamiento protegido del sistema operativo y se dibuja en el PDF como trazado. El menú de compartir solo recibe archivos de la carpeta de exportación y, por tanto, no tiene camino hacia la firma guardada.
03 Texto como capa invisible Cada línea reconocida se escribe de forma invisible en el PDF, en su posición. El archivo sigue siendo una imagen de la página y a la vez se puede seleccionar y buscar.
04 El original se queda junto a la página Junto a cada página renderizada se guarda la captura original. Así, esquinas, modo de imagen, giro y censura siguen siendo editables, porque cada corrección se vuelve a calcular a partir del original. Eso cuesta el doble de almacenamiento por página.
05 Una autoprueba dentro de la aplicación En los ajustes, una página de prueba incluida y fotografiada en ángulo pasa por la detección, la corrección de perspectiva, una comprobación contra salida negra, el orden de las filas, la orientación y el reconocimiento de texto, con tiempos y un informe copiable. La aplicación registra sus propios fallos en el dispositivo.

Tras la captura, todo sigue siendo editable

La vista de documento muestra cada página con su modo de imagen y su tamaño de salida. Desde aquí se puede retocar cualquier página: arrastrar esquinas, con una lupa que salta al lado opuesto para que el dedo nunca tape la esquina, y elegir un modo de imagen en una tira que muestra cada modo como pequeña vista previa del recorte actual.

Girar, recolocar las esquinas y dividir una doble página de un libro por el pliegue son cambios en la lista de esquinas del mismo original, no ediciones de píxeles. La doble página no necesita para ello una segunda foto. Además, las páginas se pueden mover, volver a capturar y unir con otro documento.

Vista de documento de Vellum con una página blanca enderezada, debajo el modo LIFT y el tamaño 805 x 1179, abajo los botones Add y Send
La misma página sintética tras la corrección de perspectiva y de luz en el modo predeterminado Lift, de 805 por 1179 píxeles en el banco de pruebas.

Lo que prueba el banco de pruebas y lo que solo muestra el dispositivo

Comprobable en el navegador

  • La geometría de la detección de bordes, porque el banco ejecuta el mismo detector.
  • El tono de cada modo de imagen, porque el mismo shader GLSL ES 1.00 se ejecuta en WebGL.
  • Un borde claro a lo largo del canto de la página, causado por un contorno elegido un poco demasiado grande.
  • El error de esquinas por página de prueba, medido frente a valores de referencia fijos.

Visible solo en la versión Android

  • Una sesión de cámara que no se dejaba configurar, porque la vista de cámara ya trae su propia vista previa.
  • Contornos en el lugar equivocado, porque las coordenadas del sensor llegan en la orientación del sensor y primero hay que girarlas.
  • Páginas reflejadas en vertical, porque un framebuffer se lee de abajo arriba.
  • Páginas negras, porque una decodificación nativa de imagen fallaba sin notificar ningún error.
  • Cierres inesperados que solo ocurren en la versión de publicación y en desarrollo son como mucho una advertencia.

Buscar en lo que el teléfono ha leído

La biblioteca filtra por etiquetas, por antigüedad y por el texto reconocido en las páginas. Un documento lleva hasta ocho etiquetas. Los preajustes de recibo, contrato y documento de identidad fijan a la vez el modo de imagen y la maquetación; con el documento de identidad, dos capturas van en una hoja A4.

Si se desea, una cola procesa el reconocimiento de texto de las páginas ya guardadas, una página tras otra y solo mientras la aplicación está en primer plano. Una foto que otra aplicación pasa a Vellum recorre la misma cadena que una captura. En ambos casos ninguna imagen sale del dispositivo.

Biblioteca de Vellum con un documento llamado Lieferschein 4471, una página, 0,7 MB, con miniatura y el botón Scan abajo
La biblioteca en el banco de pruebas, con un albarán sintético como único documento.

Para qué está pensada esta construcción

  • Documentos que no deben quedar en un servicio de escaneo: contratos, expedientes de personal, copias de documentos de identidad.
  • Servicio de campo y almacén, donde un albarán se captura in situ y se envía desde allí.
  • Recibos con impresión térmica desvaída, para los que hay un modo de imagen propio.
  • Como primer paso de una IA documental con los datos en casa: las páginas se hacen legibles en el dispositivo antes de procesar nada más.
  • Como plantilla para sus propias aplicaciones que procesan imágenes con shaders en el dispositivo en lugar de en un servidor.

Por qué se publica

Lo que esto significa para su proyecto

Más del laboratorio

¿Deben volverse legibles documentos sensibles sin pasar por servidores ajenos? Para eso existe un piloto.

Contactar

Grace Hopper

“La frase más dañina del idioma es: siempre se ha hecho así.”