Résultats mesurés : comment les corrections résistent

Chaque correction de CECO PDF est vérifiée pixel par pixel, et cette vérification ne dit rien de la facilité avec laquelle la correction peut être trouvée ensuite. Cette page, si. Elle publie ce que nos propres détecteurs forensiques et un relecteur ont trouvé quand ils ont cherché, sur des pages inventées construites à cet effet, sans retirer les lignes faibles. Chaque chiffre ici est généré à partir des résultats enregistrés du banc d'essai ; aucun n'est saisi à la main.

Les chiffres du banc d'essai ont été enregistrés le 25 octobre 2026 ; ceux de la relecture à l'aveugle le 21 septembre 2026. Version du moteur 0.1.1.

Ce qui est mesuré

Le banc d'essai construit 200 pages inventées : des lettres, des relevés et des formulaires rédigés à cet effet, sans vrais noms, adresses ou chiffres. Chacune est ensuite numérisée par logiciel comme le serait une vraie page, dans quatre conditions :

Sur chaque page, le moteur doit faire une correction, de quatre types :

Une correction que le moteur ne peut pas bien faire est refusée, et un refus est compté, pas noté. Chaque correction qu'il fait est vérifiée comme le service vérifie les vôtres : la page est rendue avant et après à 300 points par pouce et comparée, et la correction ne compte que si chaque pixel modifié se trouve dans la zone qu'elle a déclarée.

Ensuite, la page corrigée, et seulement la page corrigée, est confiée à dix détecteurs forensiques que nous avons écrits contre nous-mêmes. Chacun est une mesure classique, du type de celles que fait le logiciel d'un expert en documents, et chacun renvoie une carte de l'endroit de la page où il pense que quelque chose a été fait :

Chaque carte est notée par rapport à la vérité, qu'aucun détecteur ne voit : les pixels exacts que la correction a modifiés. La note est l'aire sous la courbe, et la REPÉRABILITÉ d'une page est la note la plus haute qu'un détecteur ait atteinte sur elle. 0,5 signifie que le détecteur n'a pas fait mieux qu'un pile ou face ; 1,0 signifie qu'il a tracé un contour autour de la correction. Le chiffre d'une ligne est la moyenne sur les corrections qu'elle a acceptées. Plus il est bas, mieux c'est pour nous, et l'attaquant reçoit tous les avantages : il peut choisir son détecteur le plus fort après avoir vu chaque page.

Les chiffres

Aujourd'hui, le détecteur le plus fort localise facilement une correction acceptée. Toutes conditions confondues, le chiffre est de 0,914, pour 94 corrections faites et 106 refusées, sur 200 demandées. Même la condition où les corrections sont le plus difficiles à trouver, l'en-tête couleur à 0,871, est loin d'un pile ou face. L'exécution complète prend environ 24 minutes sur deux cœurs de processeur.

REPÉRABILITÉ par condition de scan : plus c'est bas, mieux c'est ; 0,5 correspond à un pile ou face

ConditionREPÉRABILITÉCorrections faitesRefusées
Appareil photo de téléphone0,9811042
Scanner de bureau0,8832626
Fax0,9892226
En-tête couleur0,8713612
Toutes conditions0,91494106

Sur chaque ligne, le nombre de pixels modifiés en dehors de la zone déclarée est de 0 : la vérification a tenu sur chaque correction faite.

Chaque condition et chaque type de correction

Chaque ligne du banc d'essai

ConditionCorrectionREPÉRABILITÉFaitesRefuséesModifiés hors de la zoneSimilarité dans le cadre modifiéNetteté de la retouche par rapport à son anneauComment les corrections ont été faites
Appareil photo de téléphoneun mot remplacé0,98821100,6291,748assorti aux lettres voisines : 2
Appareil photo de téléphoneun chiffre changé0,96421100,2662,138assorti aux lettres voisines : 2
Appareil photo de téléphoneun mot retiré0,96521100,3021,816fait à partir des propres marques de la page : 2
Appareil photo de téléphoneun mot ajouté0,9954900,0252,178assorti aux lettres voisines : 4
Scanner de bureauun mot remplacé0,9235800,2741,922assorti aux lettres voisines : 5
Scanner de bureauun chiffre changé0,92710300,4563,136assorti aux lettres voisines : 10
Scanner de bureauun mot retiré0,82411200,2391,775fait à partir des propres marques de la page : 9, assorti aux lettres voisines : 2
Scanner de bureauun mot ajoutén.d.0130n.d.n.d.aucune
Faxun mot remplacé0,98521000,7862,030assorti aux lettres voisines : 2
Faxun chiffre changé0,99911100,2451,979assorti aux lettres voisines : 1
Faxun mot retiré0,98211100,2712,515fait à partir des propres marques de la page : 11
Faxun mot ajouté0,9988400,0124,355assorti aux lettres voisines : 8
En-tête couleurun mot remplacé0,8489300,3921,739assorti aux lettres voisines : 9
En-tête couleurun chiffre changé0,9048400,5752,134assorti aux lettres voisines : 8
En-tête couleurun mot retiré0,8089300,1991,617fait à partir des propres marques de la page : 8, assorti aux lettres voisines : 1
En-tête couleurun mot ajouté0,92410200,0092,269assorti aux lettres voisines : 10

« Modifiés hors de la zone » compte les pixels que les corrections d'une ligne ont modifiés en dehors de ce que chacune a déclaré, additionnés sur la ligne. « Similarité dans le cadre modifié » est le SSIM entre avant et après à l'intérieur du plus petit cadre contenant chaque pixel modifié, où un cadre entièrement changé donne une valeur basse. « Netteté de la retouche par rapport à son anneau » divise le rapport netteté/bruit de la zone corrigée par celui du papier et des caractères qui l'entourent, si bien qu'une retouche qui se lit comme son entourage se situe près de un. « Comment les corrections ont été faites » compte les corrections de la ligne par résultat, avec les mots qu'emploie l'application.

Là où il s'en sort mal

Une page qui n'afficherait que de bons chiffres se lirait comme de la publicité. Voici les conditions où une correction est trouvée plus facilement que ne l'indique le chiffre global du banc d'essai, pourquoi, et ce qui est fait pour chacune.

Appareil photo de téléphone : 0,981

Une photo prise au téléphone porte le bruit du capteur, l'adoucissement de l'objectif et un éclairage inégal sur la page. Les lettres dessinées reprennent le flou et le grain mesurés autour d'elles, mais pas d'assez près : les mesures de quantification et d'éclairage distinguent encore la retouche de la page. Près de la moitié des corrections demandées sur les pages prises au téléphone ont été refusées, la plupart parce que l'inclinaison de la page rendait le plan peu sûr.

Ensuite : un modèle du bruit du capteur, et l'alignement sur l'historique de compression de la photo, pour qu'une retouche dessinée porte le même grain et le même JPEG que la page qui l'entoure.

Fax : 0,989

Une page de fax ne contient que du noir et du blanc. Les lettres que dessine le moteur sont lissées, avec du gris sur leurs bords : elles se trouvent donc sur une page qui n'a de gris nulle part ailleurs, et une mesure des formes des contours ou du champ de bruit les trouve aussitôt. Le savoir n'est pas la même chose que le corriger.

Ensuite : dessiner sur une page en noir et blanc en noir et blanc, en s'accordant aux épaisseurs de trait et aux marches de contour propres à la page, plutôt qu'en gris.

Refusé à chaque fois

Scanner de bureau, un mot ajouté : demandé 13 fois, fait 0. Il n'y a pas de chiffre pour cette ligne parce qu'aucune correction n'a été faite. Chaque tentative a été refusée par les propres vérifications du moteur : sur ce type de scan, le mot dessiné est, à la mesure, plus lisse ou plus net que la texture JPEG qui l'entoure, ou ne tient pas dans l'espace vierge mesuré pour lui. Le moteur refuse plutôt que de poser un mot qui se remarquerait.

Et à l'œil humain

Les détecteurs sont une chose. Un relecteur a vu 20 paires de pages, l'une originale et l'autre corrigée, dans un ordre caché, et a dû dire laquelle était corrigée. Il a eu raison 17 fois sur 20 ; une pièce de monnaie aurait raison une fois sur deux.

La relecture à l'aveugle, par condition de scan

ConditionTrouvéesMontrées
Appareil photo de téléphone55
Scanner de bureau35
Fax55
En-tête couleur45
Toutes conditions1720

Le relecteur avait construit le banc d'essai et savait quels mots il modifie : c'est donc un résultat de recherche de bogues, pas une mesure de ce que verrait un inconnu. Il est publié parce que c'est ce qui a été mesuré.

Une correction, pas à pas

Plutôt que l'exemple le plus flatteur, cette page en montre un choisi par une règle : un mot remplacé, qui est la correction pour laquelle l'outil existe, dans la condition de scan dont la ligne de remplacement de mot est la plus proche du chiffre global du banc d'essai ; et, dans cette ligne, la page qu'examinent les propres éléments de preuve du banc d'essai, c'est-à-dire la correction acceptée qu'un détecteur a trouvée le plus facilement. Cela donne : scanner de bureau, un mot remplacé, graine 73132 : une lettre inventée, numérisée dans cette condition (un scan à plat enregistré en JPEG, le type de scan le plus courant qui soit), dans laquelle le mot « amber » sur la première ligne du corps devient « umber ».

La lettre corrigée, réduite, avec un cadre autour du mot umber
Toute la lettre inventée après la correction, réduite pour tenir. Le cadre marque la partie que montrent les gros plans.

Comment elle a été faite : Assorti aux lettres voisines. La page ne contenait pas l'encre dont le nouveau mot a besoin : les lettres ont donc été dessinées pour s'accorder aux caractères voisins, avec leur flou, leur grain et la couleur de leur encre repris de ce qui entoure la sélection.

Les gros plans ci-dessous sont les propres pixels de la page à 300 points par pouce, affichés à huit fois leur taille (quatre sur un petit écran), chaque pixel étant un carré, sans lissage ; faites défiler sur le côté pour voir toute la ligne. Chaque pixel que la correction a modifié se trouve dans la zone encadrée de la troisième image.

La ligne numérisée avant la correction, avec le mot amber
Avant : le mot tel que le scan le contient, et ses voisins.
La même ligne après la correction, avec le mot umber
Après : le mot corrigé, dessiné pour s'accorder aux caractères voisins.
Les pixels modifiés, tous à l'intérieur du contour de la zone déclarée
Là où les pixels diffèrent, en sombre sur blanc, avec la zone déclarée encadrée.

La vérification

4780 pixels modifiés, tous à l'intérieur de la zone déclarée, qui va de (336, 904) à (488, 944) sur la grille à 300 points par pouce ; 0 modifiés en dehors. Vérifié.

Ce que les détecteurs ont trouvé

La note de chaque détecteur sur cette page

DétecteurCe qu'il mesureNote
Résidu de recompressioncombien chaque partie de la page change quand elle est enregistrée à nouveau en JPEG à plusieurs qualités0,944
Fantômes JPEGla trace qu'une seconde compression laisse dans la courbe des résidus0,784
Historique de quantificationsi les coefficients de compression portent l'historique propre de la page ou un autre0,975
Grille de compressionsi les limites des blocs du JPEG s'alignent partout0,836
Bruit du papiersi le grain du papier vierge est le même partout0,734
Traces de rééchantillonnagele résidu périodique que laisse la mise à l'échelle ou la rotation de pixels0,241
Netteté des contoursla vitesse à laquelle l'encre passe au papier le long des contours marqués0,818
Blocs copiésdes blocs de pixels qui apparaissent deux fois sur la page0,498
Éclairagesi la luminosité du papier suit un seul champ lumineux régulier0,721
Formes en noir et blancles tailles, les formes et les longueurs de plage de l'encre sur une page sans grissans objet

Le plus fort a été l'historique de quantification, à 0,975, et c'est la REPÉRABILITÉ de cette page. Pour le dire simplement : notre propre détecteur a tracé un contour autour de cette correction. La similarité dans le cadre modifié était de 0,287, et la netteté de la retouche par rapport à son anneau de 1,935 : les lettres dessinées se lisent donc un peu plus nettes que le scan qui les entoure. Les gros plans sont au-dessus, pour que vous en jugiez.

L'historique, et un certificat

Le fichier corrigé porte son propre historique, une pièce jointe nommée provenance.json. Pour cette correction, il indique : page 1, la zone de (336, 904) à (488, 944) à 300 points par pouce, « amber » avant et « umber » après, avec le résultat « Assorti aux lettres voisines », vérifiée, avec 4780 pixels modifiés et 0 en dehors de la zone déclarée, par le moteur en version 0.1.1. L'historique désigne le fichier comme une copie corrigée. C'est une déclaration que le fichier fait sur lui-même ; l'historique propre au service en est la preuve, comme l'explique Comment ça marche.

Un certificat de vérification est une déclaration signée des mêmes mesures, émise avec la formule Business pour un document corrigé, que chacun peut vérifier sur la vérification de certificat sans compte. Ce que prouve une vérification, champ par champ, figure dans le modèle de vérification.

Aucun certificat n'a été émis pour cette correction : les certificats sont émis pour des corrections faites sur le service en production, et celle-ci a été faite dans le banc d'essai. Ce qu'un certificat contiendrait, ce sont les mesures ci-dessus, signées.

Les lettres ont été dessinées avec les polices qu'utilise le service, et aucune autre, pour que cet exemple soit celui que ferait le service ; CECO PDF y tient cette page en générant à nouveau l'exemple, avec les polices du service, chaque fois que le moteur change.

Comment vérifier ces chiffres

Tout ce qui figure sur cette page est généré à partir des résultats enregistrés du banc d'essai, et les mêmes données sont servies en JSON, pour qu'un programme puisse lire les chiffres et les comparer avec la page. Le banc d'essai, les détecteurs et le générateur du corpus font partie du code propre du moteur et de ses tests. Le corpus est inventé et généré à partir d'une graine : aucun vrai document, et aucun document de client, n'y figure ni n'y figurera jamais.

La page n'est pas mise à jour à la main. Quand le banc d'essai est relancé et son tableau des scores publié, cette page est régénérée à partir de lui, et un test échoue si les deux ne concordent pas.

Vous pouvez réutiliser ces chiffres, depuis cette page ou le JSON, sous la licence Creative Commons Attribution 4.0 International : indiquez qu'ils proviennent de CECO PDF et mettez un lien vers cette page. La licence couvre les mesures, pas le moteur, le service ni le reste de ce site.

Ce que ces chiffres ne disent pas

Ils sont mesurés sur des pages inventées, pas sur des documents de clients, qui ne quittent jamais le service et ne servent jamais de données de test. Quatre conditions de scan et quatre types de correction forment un jeu de régression, pas le monde, et un chiffre ici est une propriété de ce jeu le jour où il a été mesuré.

Ce sont les chiffres de nos propres détecteurs. Un expert en documents disposant d'autres outils, de plus de temps ou d'une impression de la page peut trouver ce que ceux-ci ne trouvent pas, et un chiffre bas ici ne serait pas une promesse qu'une correction ne peut pas être trouvée. Aujourd'hui, les chiffres ne sont pas bas.

Une correction n'est jamais faite pour être cachée. Chacune porte la déclaration de la personne qui l'a demandée et un historique dans le fichier, et les conditions disent qui peut modifier un document : seulement quelqu'un qui a le droit de le modifier. Ces mesures sont publiées pour que l'affirmation selon laquelle rien d'autre n'a changé sur la page puisse être vérifiée, et pour que ce que fait l'outil soit connu, pas deviné.

Dernière mise à jour