web-dev-qa-db-fra.com

Comment faire tesseract pour ne reconnaître que des chiffres, lorsqu'ils sont mélangés à des lettres?

Je souhaite utiliser tesseract pour reconnaître uniquement les nombres. Le problème est que j'ai un mélange de chiffres et de lettres et quand j'utilise SetVariable("tessedit_char_whitelist", "0123456789")
pour chaque symbole tesseract renvoie un chiffre incorrect.

Puis-je définir une valeur de seuil de sorte que tesseract omet les symboles de faible ressemblance?

REMARQUE: j'ai défini tesseract pour reconnaître uniquement les chiffres afin qu'il n'y ait aucune confusion entre O et 0.

52
zkunov

La reconnaissance des seuls nombres est en fait répondue sur la page FAQ tesseract . Voir cette page pour plus d'informations, mais si vous avez le package version 3, les fichiers de configuration sont déjà configurés. Vous spécifiez simplement sur la ligne de commande:

tesseract image.tif outputbase nobatch digits

Quant à la valeur seuil, je ne sais pas de quoi vous parlez. Si votre entrée est une police inhabituelle, vous pourriez peut-être vous recycler avec un échantillon de votre entrée. Une alternative est de changer le seuil d'élagage de tesseract. Les deux options sont également mentionnées dans la FAQ.

38
Jerry

Pour tesseract 3, la commande est plus simple tesseract imagename outputbase digits selon FAQ . Mais ça ne marche pas très bien pour moi.

Je me tourne pour essayer différentes options psm et trouver -psm 6 fonctionne mieux pour mon cas.

man tesseract pour plus de détails.

12
michaelliu

Pour tesseract 3, j'essaie de créer un fichier de configuration selon la FAQ.

AVANT d'appeler une fonction Init ou de la placer dans un fichier texte appelé tessdata/configs/digits:

tessedit_char_whitelist 0123456789                 

ensuite, cela fonctionne en utilisant la commande: tesseract imagename outputbase digits

10
user3852208

Si l'on veut faire correspondre 0-9

tesseract myimage.png stdout -c tessedit_char_whitelist=0123456789

Ou si l'on veut presque faire correspondre 0-9, mais avec un ou plusieurs caractères différents

tesseract myimage.png stdout -c tessedit_char_whitelist=01234ABCDE
9
neoneye

Je l'ai fait un peu différent (avec tess-two). Ce sera peut-être utile à quelqu'un.

Vous devez donc initialiser d'abord l'API.

TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init(datapath, language, ocrEngineMode);

Définissez ensuite les variables suivantes

baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
baseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, "!?@#$%&*()<>_-+=/:;'\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
baseApi.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST, ".,0123456789");
baseApi.setVariable("classify_bln_numeric_mode", "1");

De cette façon, le moteur ne vérifiera que les chiffres.

7
Blehi

Vous pouvez demander à tesseract d'utiliser uniquement des chiffres, et si ce n'est pas assez précis, alors la meilleure chance d'obtenir de meilleurs résultats est de passer par le processus de formation: http://www.resolveradiologic.com/blog/2013/01/ 15/formation-tesseract /

3
valentt

Cette fonctionnalité n'est pas prise en charge dans la version 4. Vous pouvez toujours l'utiliser via -c tessedit_char_whitelist = 0123456789 avec "--oem 0" qui revient à l'ancien modèle.

Il existe une prime pour résoudre ce problème.

Solutions de contournement possibles:

Comme indiqué par @ amitdo

1
user123959