如何使tesseract只识别数字,当他们混合字母?
我想用tesseract只识别数字。 问题是我有混合
数字和字母,当我使用SetVariable(“tessedit_char_whitelist”,“0123456789”)
对于每个符号tesseract返回错误的数字。
我可以设置一个阈值,以便tesseract省略相似度较低的符号吗?
注:我设置tesseract只识别数字,所以没有0和0之间的混淆。
只识别数字实际上是在tesseract常见问题页面上回答的。 看到这个页面的更多信息,但如果你有版本3包,configuration文件已经build立。 你只需在命令行中指定:
tesseract image.tif outputbase nobatch digits
至于门槛值,我不确定你的意思。 如果你的input是一个不寻常的字体,也许你可能会重新训练你的input样本。 另一种方法是更改tesseract的修剪阈值。 FAQ中也提到了这两个选项。
对于tesseract 3,根据FAQ ,该命令更简单的tesseract imagename outputbase digits
。 但这对我来说并不适用。
我转而尝试不同的psm
选项,并发现-psm 6
最适合我的情况。
man tesseract
的细节。
对于tesseract 3,我尝试根据FAQ创buildconfiguration文件。
在调用一个Init函数之前,或者把它放在一个名为tessdata/configs/digits
的文本文件中:
tessedit_char_whitelist 0123456789
然后,它通过使用命令: tesseract imagename outputbase digits
您可以指示tesseract仅使用数字,如果这不够准确,那么获得更好结果的最佳机会是进行低谷训练过程: http : //www.resolveradiologic.com/blog/2013/01/15/training-正方体/
我做了一些有点不同(与苔丝二)。 也许这对别人有用。
所以你需要先初始化API。
TessBaseAPI baseApi = new TessBaseAPI(); baseApi.init(datapath, language, ocrEngineMode);
然后设置下列variables
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");
这样引擎将只检查数字。
如果你想匹配0-9
tesseract myimage.png stdout -c tessedit_char_whitelist=0123456789
或者,如果几乎要匹配0-9,但是有一个或多个不同的字符
tesseract myimage.png stdout -c tessedit_char_whitelist=01234ABCDE
我所做的就是承认一切,当我有文字的时候,我把所有的字符都拿出来,除了数字
//This replaces all except numbers from 0 to 9 recognizedText = recognizedText.replaceAll("[^0-9]+", " ");
这对我来说很好。