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.
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.
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.
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
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
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.
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 /
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