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 :
- Appareil photo de téléphone. Une page photographiée avec un téléphone : un éclairage inégal, une légère inclinaison, le bruit du capteur, et le JPEG que l'appareil enregistre.
- Scanner de bureau. Un scan à plat enregistré en JPEG, le type de scan le plus courant qui soit.
- Fax. Une page uniquement en noir et blanc, sans aucun gris, telle qu'un fax ou un scanner bitonal la livre.
- En-tête couleur. Un scan couleur d'une page avec un en-tête et une bande latérale en couleur.
Sur chaque page, le moteur doit faire une correction, de quatre types :
- Un mot remplacé : un mot de la page devient un autre.
- Un chiffre changé : un chiffre d'une quantité devient le suivant.
- Un mot retiré : un mot est enlevé et la ligne resserrée.
- Un mot ajouté : un mot est posé sur du papier vierge mesuré, à côté des caractères.
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 :
- Résidu de recompression : combien chaque partie de la page change quand elle est enregistrée à nouveau en JPEG à plusieurs qualités.
- Fantômes JPEG : la trace qu'une seconde compression laisse dans la courbe des résidus.
- Historique de quantification : si les coefficients de compression portent l'historique propre de la page ou un autre.
- Grille de compression : si les limites des blocs du JPEG s'alignent partout.
- Bruit du papier : si le grain du papier vierge est le même partout.
- Traces de rééchantillonnage : le résidu périodique que laisse la mise à l'échelle ou la rotation de pixels.
- Netteté des contours : la vitesse à laquelle l'encre passe au papier le long des contours marqués.
- Blocs copiés : des blocs de pixels qui apparaissent deux fois sur la page.
- Éclairage : si la luminosité du papier suit un seul champ lumineux régulier.
- Formes en noir et blanc : les tailles, les formes et les longueurs de plage de l'encre sur une page sans gris.
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
| Condition | REPÉRABILITÉ | Corrections faites | Refusées |
|---|---|---|---|
| Appareil photo de téléphone | 0,981 | 10 | 42 |
| Scanner de bureau | 0,883 | 26 | 26 |
| Fax | 0,989 | 22 | 26 |
| En-tête couleur | 0,871 | 36 | 12 |
| Toutes conditions | 0,914 | 94 | 106 |
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
| Condition | Correction | REPÉRABILITÉ | Faites | Refusées | Modifiés hors de la zone | Similarité dans le cadre modifié | Netteté de la retouche par rapport à son anneau | Comment les corrections ont été faites |
|---|---|---|---|---|---|---|---|---|
| Appareil photo de téléphone | un mot remplacé | 0,988 | 2 | 11 | 0 | 0,629 | 1,748 | assorti aux lettres voisines : 2 |
| Appareil photo de téléphone | un chiffre changé | 0,964 | 2 | 11 | 0 | 0,266 | 2,138 | assorti aux lettres voisines : 2 |
| Appareil photo de téléphone | un mot retiré | 0,965 | 2 | 11 | 0 | 0,302 | 1,816 | fait à partir des propres marques de la page : 2 |
| Appareil photo de téléphone | un mot ajouté | 0,995 | 4 | 9 | 0 | 0,025 | 2,178 | assorti aux lettres voisines : 4 |
| Scanner de bureau | un mot remplacé | 0,923 | 5 | 8 | 0 | 0,274 | 1,922 | assorti aux lettres voisines : 5 |
| Scanner de bureau | un chiffre changé | 0,927 | 10 | 3 | 0 | 0,456 | 3,136 | assorti aux lettres voisines : 10 |
| Scanner de bureau | un mot retiré | 0,824 | 11 | 2 | 0 | 0,239 | 1,775 | fait à partir des propres marques de la page : 9, assorti aux lettres voisines : 2 |
| Scanner de bureau | un mot ajouté | n.d. | 0 | 13 | 0 | n.d. | n.d. | aucune |
| Fax | un mot remplacé | 0,985 | 2 | 10 | 0 | 0,786 | 2,030 | assorti aux lettres voisines : 2 |
| Fax | un chiffre changé | 0,999 | 1 | 11 | 0 | 0,245 | 1,979 | assorti aux lettres voisines : 1 |
| Fax | un mot retiré | 0,982 | 11 | 1 | 0 | 0,271 | 2,515 | fait à partir des propres marques de la page : 11 |
| Fax | un mot ajouté | 0,998 | 8 | 4 | 0 | 0,012 | 4,355 | assorti aux lettres voisines : 8 |
| En-tête couleur | un mot remplacé | 0,848 | 9 | 3 | 0 | 0,392 | 1,739 | assorti aux lettres voisines : 9 |
| En-tête couleur | un chiffre changé | 0,904 | 8 | 4 | 0 | 0,575 | 2,134 | assorti aux lettres voisines : 8 |
| En-tête couleur | un mot retiré | 0,808 | 9 | 3 | 0 | 0,199 | 1,617 | fait à partir des propres marques de la page : 8, assorti aux lettres voisines : 1 |
| En-tête couleur | un mot ajouté | 0,924 | 10 | 2 | 0 | 0,009 | 2,269 | assorti 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
| Condition | Trouvées | Montrées |
|---|---|---|
| Appareil photo de téléphone | 5 | 5 |
| Scanner de bureau | 3 | 5 |
| Fax | 5 | 5 |
| En-tête couleur | 4 | 5 |
| Toutes conditions | 17 | 20 |
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 ».

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 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étecteur | Ce qu'il mesure | Note |
|---|---|---|
| Résidu de recompression | combien chaque partie de la page change quand elle est enregistrée à nouveau en JPEG à plusieurs qualités | 0,944 |
| Fantômes JPEG | la trace qu'une seconde compression laisse dans la courbe des résidus | 0,784 |
| Historique de quantification | si les coefficients de compression portent l'historique propre de la page ou un autre | 0,975 |
| Grille de compression | si les limites des blocs du JPEG s'alignent partout | 0,836 |
| Bruit du papier | si le grain du papier vierge est le même partout | 0,734 |
| Traces de rééchantillonnage | le résidu périodique que laisse la mise à l'échelle ou la rotation de pixels | 0,241 |
| Netteté des contours | la vitesse à laquelle l'encre passe au papier le long des contours marqués | 0,818 |
| Blocs copiés | des blocs de pixels qui apparaissent deux fois sur la page | 0,498 |
| Éclairage | si la luminosité du papier suit un seul champ lumineux régulier | 0,721 |
| Formes en noir et blanc | les tailles, les formes et les longueurs de plage de l'encre sur une page sans gris | sans 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