Blog

Pourquoi l’OCR renvoie un mauvais mot au lieu d’une erreur

Écrit par InSnap · Publié le · ocr, text recognition, accuracy, screenshot

Pourquoi l’OCR renvoie un mauvais mot au lieu d’une erreur

La reconnaissance de texte dit rarement qu’elle a échoué. Elle rend une phrase lisible, à un caractère près — celui qui compte. Où cela arrive et comment le repérer.

Copier du texte depuis une capture d’écran fonctionne la plupart du temps, et c’est bien là le problème. Quand ça rate, ça rate rarement bruyamment. Pas de soulignement rouge, pas de « texte non reconnu », pas de champ vide. On obtient une phrase qui se lit très bien — sauf un caractère, et ce caractère change le sens.

C’est ainsi que des gens collent un numéro de commande décalé d’un chiffre, une clé de configuration avec une lettre en trop, ou une phrase de document avec un caractère qui n’a jamais existé. La reconnaissance ne s’est pas plantée. Elle a deviné avec aplomb.

La reconnaissance est un classifieur, pas un analyseur

Il est utile de savoir ce que fait réellement le moteur. La reconnaissance de texte découpe l’image en lignes, puis en régions de forme caractère, puis fait passer chaque région dans un classifieur qui renvoie le caractère le plus probable. Ce classifieur ne dit jamais « je ne sais pas ». Il renvoie toujours la correspondance la plus proche qu’il peut trouver.

Quand l’entrée est de bonne qualité, cette correspondance la plus proche est juste presque partout. Quand elle est mauvaise, la correspondance la plus proche est un autre caractère qui se trouve ressembler au premier : un a qui pourrait être un o, un 1 qui pourrait être un l, ou un caractère CJK qu’on confond facilement avec un voisin partageant une composante. Le moteur n’a aucune idée qu’il se trompe.

LANCER LA RECONNAISSANCE DE TEXTE SUR UNE CAPTURE D’ÉCRAN

Ce qui rend l’entrée « mauvaise »

Quatre choses comptent, à peu près dans cet ordre :

  1. La hauteur du texte en pixels. Un texte plus petit offre moins de pixels à classer. C’est le facteur principal.
  2. Le jeu de caractères. Les caractères chinois, japonais et coréens sont denses ; quelques pixels perdus changent à la fois la forme et l’identité du caractère. Les lettres latines sont plus simples et résistent plus longtemps.
  3. L’anticrénelage et la mise à l’échelle. Chaque redimensionnement mélange les bords de chaque trait. Un redimensionnement passe ; trois, empilés, font perdre la forme.
  4. Le contraste et l’arrière-plan. Le gris sur blanc et le clair sur sombre réduisent tous deux la force des bords. Les dégradés et les photos derrière le texte aussi.

La plupart des rapports d’échec viennent du premier point, et la solution consiste en général à capturer plus de pixels, pas à insister davantage.

InSnap n’a pas de réglage de précision séparé. Il travaille sur les pixels que vous sélectionnez : une capture 1x d’une interface dense a déjà chaque ligne à la hauteur dessinée par l’écran, et une capture Retina 2x a le double. La différence entre les deux, pour un paragraphe de texte donné, est souvent celle entre correct et plausible mais faux.

Lire un détail à la loupe

Où se situe la limite pratique

Pour voir la frontière plutôt que la deviner, il vaut la peine de monter un petit test reproductible : rendre la même phrase à plusieurs hauteurs de texte, lancer la reconnaissance sur chacune et comparer la sortie à l’entrée caractère par caractère. C’est exactement ce que font les deux images ci-dessous, à partir de sorties réelles d’un moteur local, et non d’exemples inventés.

La ligne chinoise et la ligne anglaise ont été rendues à cinq hauteurs et reconnues à nouveau à chaque fois. Le rouge signale les caractères qui diffèrent de l’original.

La même ligne à cinq hauteurs de texte, reconnue à nouveau à chaque fois

Deux choses en ressortent. D’abord, la ligne est correcte jusqu’au moment où elle ne l’est plus : pas de dégradation progressive, juste une taille en dessous de laquelle le mauvais caractère apparaît. Ensuite, les deux écritures cassent à des points différents. Ici, le texte latin a décroché plus tôt, tandis que le chinois a tenu plus longtemps, soit l’inverse de ce que la plupart des gens supposent quand ils entendent « le chinois est plus difficile ».

Quand la même phrase est reconnue à des tailles encore plus petites, la sortie devient fausse d’une autre manière. Ni vide, ni charabia, mais une vraie phrase avec de vrais caractères faux :

Les échecs à 5–7 px sont de vrais mots, juste pas les bons

C’est la deuxième image qui est utile. Elle montre à quoi ressemble réellement un mauvais résultat : pas assez visible pour sauter aux yeux, pas assez subtil pour être anodin.

Comment le repérer avant qu’il n’atteigne un document

La reconnaissance ne peut pas vous dire qu’elle a un doute ; c’est donc à vous de vérifier là où un mauvais caractère coûte cher.

  • Vérifiez tout ce qui contient des chiffres ou des identifiants. Numéros de commande, clés de licence, chaînes de version, totaux de facture. Un seul chiffre faux est invisible dans le contexte et fatal en aval.
  • Vérifiez la longueur. Un identifiant de deux caractères revenu avec trois, ou l’inverse, est un signal fiable qu’un problème est survenu.
  • Vérifiez les caractères inhabituels. Barres verticales, espaces, espaces insécables, confusion cyrillique / latin. Si le texte est du code, le coller dans une vue à chasse fixe rend ces écarts évidents.
  • Vérifiez les extrémités. Les caractères en début ou en fin de ligne sont les premiers coupés lors de la détection. Si une ligne se termine abruptement, regardez son dernier ou son avant-dernier caractère.
  • Recapturez à une taille plus grande, n’agrandissez pas. Agrandir une ligne floue ne crée pas de détail et corrige rarement un mauvais caractère. Recapturer la même zone en 2x, ou zoomer sur la source avant de capturer, le fait.

Le corollaire pratique : une capture prise avec une large sélection à bonne résolution est plus facile à reconnaître qu’une toute petite recadrée serrée. Le recadrage réduit le bruit, mais la réduction d’échelle réduit l’information, et c’est l’information que mange le classifieur.

Ce sur quoi vous pouvez compter

Le résumé honnête :

SituationGénéralement fiableGénéralement pas
Texte anglais et à écriture latine à taille d’interface normaleOui—
Chinois à taille d’interface normaleOui—
Texte d’environ 10 px de haut ou moins—Non
Kana japonais, coréen, russe—Non
Texte sur une photo ou un dégradéParfoisParfois
Captures fortement redimensionnées—Non

La reconnaissance locale d’InSnap gère bien le chinois, l’anglais et les langues à écriture latine, y compris les caractères accentués. Elle n’est pas fiable pour le kana japonais, le coréen ou le russe. C’est une propriété du modèle embarqué, pas un réglage ; pour ces écritures, la chose honnête à faire est de vérifier tout ce que vous copiez.

Questions fréquentes

La reconnaissance de texte me prévient-elle quand elle a un doute ?

Non. Un classifieur de caractères renvoie toujours sa meilleure hypothèse, et l’interface n’a pas d’indicateur de confiance pour la copie. L’hypothèse prudente est que tout caractère renvoyé est le plus probable, pas une certitude.

Puis-je corriger un mauvais caractère en relançant la reconnaissance ?

En général non, parce que l’entrée n’a pas changé et que le modèle est déterministe sur les mêmes pixels. La correction consiste à changer l’entrée : recapturer la même région à une taille plus grande, ou zoomer sur la source avant de capturer, puis reconnaître à nouveau.

Pourquoi cela fonctionne-t-il sur une capture et échoue-t-il sur une autre de la même page ?

Le plus souvent à cause de la taille du texte en pixels, qui dépend de la mise à l’échelle de l’écran et du fait que la capture a été prise en 1x ou en 2x. La même page à un autre zoom ou sur un autre écran peut franchir la limite de taille.

Lit-il le texte dans les images et les photos ?

Seulement si le texte est grand et net sur un arrière-plan uni. C’est sur une photo, un dégradé ou une illustration complexe que les caractères faux apparaissent le plus souvent.

Faut-il une connexion Internet pour que cela fonctionne ?

Non. La reconnaissance tourne localement, y compris l’étape de copie. Rien n’est envoyé en ligne, et la précision est la même hors connexion.

Votre prochaine capture est à un raccourci de vous.

macOS 14.4+ (Apple Silicon et Intel) · Windows 10+ (64 bits)