R&D LAB Recherche appliquée En développement Version Android en test terrain
Vellum
Un scanner de documents qui calcule sur le téléphone
Bords, perspective, lumière et texte sont calculés sur le téléphone. Un document ne quitte l'appareil que lorsque quelqu'un l'envoie.
- 0serveur par lequel passe une page
- 1passe GPU pour la déformation et les tons
- 11modes d'image dans le même shader
- 2détecteurs de bords : viseur et prise de vue

Capture réalisée dans le banc d'essai du navigateur, qui exécute le même détecteur et le même shader que l'application. La page est un document de test synthétique projeté dans une photo de bureau.
Pourquoi c'est publié
Nous construisons de l'IA documentaire et conseillons sur l'endroit où les données ont le droit de résider. Vellum montre la part de ce travail qui précède tout modèle : préparer une image pour qu'elle soit lisible, et le faire là où se trouve déjà le document. Cela suppose un traitement d'image dont la précision est mesurée plutôt qu'estimée, et la discipline de tester sur du vrai matériel, car c'est là qu'apparaissent des défauts qu'aucun navigateur ne trouve. Si vous prévoyez de traiter des documents sensibles sans détour par les serveurs d'un tiers, vous voyez ici comment nous construisons ce type d'outil.
Un scanner photographie des documents qu'on préfère ne pas confier : contrats, bons de livraison, pièces d'identité. Vellum trouve les bords de la page dès l'image de la caméra, redresse la perspective par une homographie, égalise la lumière et le contraste dans un fragment shader sur le GPU et reconnaît le texte sur le téléphone. Aucun serveur n'intervient sur le trajet d'une page. Les PDF et les images quittent l'appareil par le menu de partage du système d'exploitation, c'est-à-dire uniquement lorsque quelqu'un appuie lui-même sur Envoyer. L'application est construite avec Expo et React Native ; une version Android est actuellement éprouvée sur un émulateur et sur un téléphone.
La décision
Le téléphone est déjà là où se trouve le document
La première question posée à ce scanner n'était pas de savoir s'il trouve bien les bords, mais où va une page pendant ce temps. Un serveur qui prépare les images et lit le texte se construit vite. C'est aussi un endroit de plus où résident contrats, pièces d'identité et bons de livraison, avec toutes les questions qui s'y rattachent : qui y a accès, pour combien de temps, dans quel pays. Vellum n'en a donc pas. Détection, redressement, correction des tons et reconnaissance du texte s'exécutent sur le téléphone.
Presque toutes les décisions suivantes en découlent. La correction de perspective est une homographie dans un fragment shader et non un appel à un service. La reconnaissance du texte écrit une couche de texte invisible dans le PDF, à l'emplacement de chaque ligne reconnue, et rend la bibliothèque consultable sans que le texte soit jamais téléversé. Envoyer signifie que l'application de messagerie ou le menu de partage du système s'ouvre avec le fichier joint, et qu'une personne appuie sur Envoyer.
Le prix à payer mérite d'être nommé. Tout ce qui exige un serveur manque délibérément : synchronisation entre appareils, liens de partage, traduction, reconnaissance de texte dans le cloud. L'envoi sans intervention n'existe pas non plus, car chaque envoi passe par une personne. Et la puissance de calcul est celle du téléphone, si bien que chaque étape doit tenir dans son budget.
Ce qui ne quitte pas l'appareil ne se trouve nulle part ailleurs.
Le parcours d'une page
De l'image de la caméra au fichier consultable
- 01 Les bords dans le viseur À chaque image de la caméra, un worklet lit le plan de luminosité sur une grille grossière, et seulement la partie que l'écran affiche réellement. Il en sort un contour lissé, maintenu pendant quelques images manquées. Les coins peuvent être déplacés avant la prise de vue.
- 02 Les coins après la prise Sur la photo, un détecteur plus approfondi cherche : seuil d'Otsu, régions connexes, uniquement les cellules de bord situées sur une vraie marche de luminosité, puis une droite par côté ajustée par moindres carrés. S'il ne trouve rien, l'image entière est retenue et les coins se placent à la main. Par défaut, une vérification des coins suit.
- 03 Redresser et égaliser la lumière Une seule passe GPU. Le shader ramène chaque coordonnée de sortie dans la photo par l'homographie et lit à cet endroit. Il estime le blanc du papier à partir de deux copies réduites de la photo, de sorte que chaque luminosité est relative au papier, où que se trouve la lampe.
- 04 Reconnaître le texte La reconnaissance du texte s'exécute sur l'appareil. À partir de la direction des lignes reconnues, l'application lit si la page doit être tournée et de combien elle penche, et corrige les deux via la liste des coins. Si les lignes ne concordent pas, la page reste telle quelle.
- 05 PDF et envoi Les pages deviennent un PDF avec couche de texte invisible, ou des images séparées. Une taille cible abaisse d'abord la qualité JPEG, puis seulement la résolution. Le fichier sort par l'application de messagerie ou le menu de partage du système.
On ne cherche que ce que l'on voit
L'aperçu remplit l'écran, mais l'image de la caméra a un autre format. Sur un téléphone allongé, environ un tiers de chaque image se trouve donc hors de l'écran. Tant que le détecteur fouillait aussi ce tiers, il pouvait placer un coin à un endroit que personne ne voyait ni ne pouvait déplacer. Les deux détecteurs ne cherchent désormais que dans la zone visible.
La deuxième cause d'un bord décalé était une zone claire à côté de la page, par exemple un halo de lampe, qui fusionnait avec le papier en une seule tache. Depuis, chaque côté du contour est jugé selon qu'une vraie marche de luminosité le traverse. Un halo de lumière s'estompe doucement ; un bord de papier, non.
Les deux détecteurs disposent d'un environnement de mesure qui donne l'erreur sur les coins, sur un jeu fixe de pages de test, face à des valeurs de référence déterminées indépendamment. Chaque modification est mesurée avant et après.
Ce qui est fixé sur l'appareil
Après la prise, tout reste modifiable
La vue document affiche chaque page avec son mode d'image et sa taille de sortie. De là, chaque page peut être retravaillée : déplacer les coins, avec une loupe qui saute du côté opposé pour que le doigt ne masque jamais le coin, et choisir un mode d'image dans une barre qui montre chaque mode en petit aperçu du cadrage actuel.
Tourner, replacer les coins et scinder une double page de livre au niveau du pli sont des modifications de la liste des coins du même original, et non des retouches de pixels. La double page n'exige pour cela aucune seconde photo. Les pages peuvent aussi être déplacées, reprises et fusionnées avec un autre document.
Ce que prouve le banc d'essai, et ce que seul l'appareil montre
Vérifiable dans le navigateur
- La géométrie de la détection des bords, car le banc exécute le même détecteur.
- Le rendu tonal de chaque mode d'image, car le même shader GLSL ES 1.00 tourne sur WebGL.
- Un liseré clair le long du bord de page, dû à un contour choisi très légèrement trop grand.
- L'erreur sur les coins par page de test, mesurée face à des valeurs de référence fixes.
Visible seulement dans la version Android
- Une session caméra impossible à configurer, car la vue caméra apporte déjà son propre aperçu.
- Des contours au mauvais endroit, car les coordonnées du capteur arrivent dans l'orientation du capteur et doivent d'abord être tournées.
- Des pages inversées verticalement, car un framebuffer se lit de bas en haut.
- Des pages noires, car un décodage d'image natif échouait sans signaler d'erreur.
- Des plantages qui ne surviennent que dans la version de production et ne sont au plus qu'un avertissement en développement.
Chercher dans ce que le téléphone a lu
La bibliothèque filtre par étiquette, par ancienneté et par le texte reconnu sur les pages. Un document porte jusqu'à huit étiquettes. Des préréglages pour reçu, contrat et pièce d'identité fixent ensemble le mode d'image et la mise en page ; pour la pièce d'identité, deux prises de vue se retrouvent sur une feuille A4.
Sur demande, une file d'attente traite la reconnaissance du texte des pages déjà enregistrées, une page après l'autre et seulement tant que l'application est au premier plan. Une photo transmise à Vellum par une autre application passe par la même chaîne qu'une prise de vue. Dans les deux cas, aucune image ne quitte l'appareil.
Ce pour quoi cette construction est pensée
- Les documents qui ne doivent pas résider chez un service de numérisation : contrats, dossiers du personnel, copies de pièces d'identité.
- Le service terrain et l'entrepôt, où un bon de livraison est saisi sur place et envoyé de là.
- Les reçus à impression thermique pâlie, pour lesquels il existe un mode d'image dédié.
- Comme première étape d'une IA documentaire avec données conservées en interne : les pages sont rendues lisibles sur l'appareil avant tout traitement ultérieur.
- Comme modèle pour vos propres applications qui traitent les images avec des shaders sur l'appareil plutôt que sur un serveur.
Pourquoi c'est publié
Ce que cela signifie pour votre projet
Plus du laboratoire
Méthode Event Scout Un modèle de langage lit les pages d'événements, tout le reste est du code fixe. Il reste une courte liste des journées qui valent le déplacement.
Design computationnel Atlas EV1 Douze chapitres démontent une voiture électrique, jusqu'à une cellule. Aucun fichier de modèle, aucune texture : 327 pièces issues d'un tableau.
Méthode Contradiction Indiquez ce qui doit s'améliorer et ce qui se dégrade en même temps. Vous obtenez les principes qui ont résolu exactement cette paire, et les inventions qui l'ont fait. Des documents sensibles doivent-ils devenir lisibles sans détour par les serveurs d'un tiers ? C'est précisément à cela que sert un pilote.
Nous contacter