Tesseract compilé en WebAssembly pour navigateur et Node.js
Tesseract.js fait tourner le moteur OCR Tesseract, compilé en WebAssembly, dans le navigateur (web worker) ou sous Node.js (worker thread). Il prend une image PNG, JPEG, WebP, BMP, PBM ou GIF fixe, et rend le texte reconnu. Le moteur n'est pas modifié : à réglages, données de langue et version identiques, le résultat doit être celui de la commande tesseract. React Native, faute de WebAssembly, n'est pas pris en charge.
Le comparatif des outils d'OCR open source situe Tesseract.js face aux modèles de vision et aux convertisseurs de documents vers Markdown.
Aucun serveur d'OCR à héberger, coordonnées pour chaque mot
- L'image reste sur l'appareil : dans une application web, la reconnaissance tourne dans le navigateur de l'utilisateur, sans serveur d'OCR à héberger.
- Les réglages de Tesseract passent tels quels :
tessedit_char_whitelistlimite la lecture à certains caractères, l'optionrectangleà une zone de l'image. - Des coordonnées pour chaque mot : l'option
blocksrend un JSON hiérarchique, des blocs jusqu'aux caractères, avec position et indice de confiance à chaque niveau. hOCR, TSV et un PDF de l'image doté d'une couche de texte sont aussi proposés. - Des workers réutilisables : un worker charge ses langues une fois, puis enchaîne les images. Un scheduler répartit les tâches entre plusieurs workers en parallèle.
- Des langues à la carte : seules les langues demandées sont téléchargées (0,7 Mo compressé pour le français, 2,9 Mo pour l'anglais), puis gardées en cache (IndexedDB dans le navigateur).
Ni PDF, ni manuscrit, ni mise en page reconstruite
Ni PDF, ni retouche du modèle. Le README exclut les deux de son périmètre. Pour un PDF, la FAQ conseille de rendre chaque page en image (PDF.js ou muPDF) avant de la reconnaître. Le README renvoie vers Scribe.js pour ces deux besoins : Scribe.js est sous AGPL-3.0, avec licence propriétaire sur demande, là où Tesseract.js est sous Apache-2.0.
La mise en page n'est pas reconstruite. Par défaut, Tesseract.js lit l'image comme un seul bloc de texte (mode de segmentation 6), alors que la commande tesseract segmente la page automatiquement (mode 3) : sur une même page, les deux résultats peuvent différer tant que tessedit_pageseg_mode n'est pas aligné. Les formats de sortie s'arrêtent au texte positionné (blocs, lignes, mots), sans Markdown ni cellules de tableau. PaddleOCR rend, lui, du Markdown ou du JSON, tableaux et formules compris. Pour extraire des champs, il faut un étage de plus : Receipt OCR confie à un LLM le passage d'un ticket de caisse au JSON, et réserve Tesseract au texte brut.
Du texte imprimé, en bonne résolution. La FAQ exclut l'écriture manuscrite, et la documentation de l'API conseille d'agrandir une image trop petite avant de la reconnaître.
jsDelivr par défaut. Sans configuration, le navigateur prend sur ce CDN le script du worker, le cœur WebAssembly et les langues ; sous Node.js, les langues aussi. Une application hors ligne doit héberger ces fichiers et renseigner workerPath, corePath et langPath. La page d'installation locale liste quatre variantes du cœur, quand le code de la v7 en charge six.
Des workers à recycler côté serveur. La mémoire d'un worker WebAssembly ne fait que croître, et son dictionnaire grossit des mots rencontrés. Pour un serveur Node.js qui tourne longtemps, la documentation conseille de recréer workers et schedulers, par exemple toutes les 500 tâches.
Une version majeure par an environ. La v4 est sortie en novembre 2022, la v5 en septembre 2023, la v6 en janvier 2025 et la v7 le 15 décembre 2025. La v7 exige Node.js 16 et, d'après ses notes de version, réduit de 15 à 35 % le temps de reconnaissance de la v6 selon l'appareil. La v6 a retiré worker.loadLanguage : un exemple écrit pour la v4 ne tourne plus tel quel. Depuis la v7, la branche principale n'a reçu qu'un commit (mai 2026), et le paquet npm a été téléchargé 3,9 millions de fois la semaine du 28 septembre 2026.
