web-dev-qa-db-fra.com

Limiter les caractères recherchés par tesseract

Est-il possible de limiter le jeu de caractères recherché par tesseract (par exemple, rechercher uniquement les lettres de a à z)? Cela améliorerait considérablement mes résultats.

57
Danilo Bargen

Créez un fichier de configuration (par exemple "lettres") dans le répertoire tessdata/configs - généralement /usr/share/tesseract/tessdata/configs
ou
/usr/share/tesseract-ocr/tessdata/configs

Et ajoutez cette ligne au fichier de configuration:

tessedit_char_whitelist abcdefghijklmnopqrstuvwxyz  

... ou peut-être que [a-z] fonctionne .. ne sais pas :-)
Appelez ensuite tesseract comme ceci:

tesseract input.tif output nobatch letters  

Cela limitera tesseract à reconnaître uniquement les personnages recherchés

76
Blomman

Pour utiliser la liste blanche dans un fichier de configuration ou en utilisant le commutateur de ligne de commande -c tessedit_char_whitelist=..., Dans la dernière version 4.0, vous devrez définir le mode Moteur OCR sur "Original Tesseract uniquement". En effet, le nouveau mode "Neural nets LSTM" ne respecte pas le réglage de la liste blanche. Exemple de ligne de commande appropriée pour la version 4.0:

tesseract fichier_entrée fichier_sortie --oem 0 -c tessedit_char_whitelist = abc123

MISE À JOUR: Dans les versions plus récentes (4.0), il y a un fichier eng.traineddata Corrompu installé par défaut par Windows et certains installateurs Linux. La solution temporaire consiste à remplacer le fichier tessdata\eng.traineddata Par un fichier d'une ancienne version. Ce fichier doit faire environ 30 Mo. Sinon, vous obtiendrez Erreur: "Tesseract n'a pas pu charger de langues!" ou similaire.

16
Bartłomiej Uliasz

En plus du fichier de configuration, est le -c drapeau:

tesseract stdin stdout -c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz -psm 6
15
jmunsch

Il suffit d'ajouter cela pour toute personne utilisant tesseract sur Android. Dans votre fonction readOCR où vous définissez la langue, etc., ajoutez la ligne suivante;

tesseract.setVariable("tessedit_char_whitelist","ABCDEFGHIJKLMNOPQRSTUVWXYZ");

vous pouvez également faire blackList pour les caractères à exclure.

6
user3244591

Dans Tesseract version 4.00, cela ne peut pas être fait. Vous pouvez uniquement affiner votre modèle ou utiliser l'expression régulière pour supprimer des caractères supplémentaires de la prédiction.

1
Andrew Ravus