我想使用tesseract
来识别数字。问题是我混合了数字和数字。字母和我使用SetVariable("tessedit_char_whitelist", "0123456789")
时
对于每个符号,tesseract返回错误的数字。
我可以设置一个阈值,以便tesseract
省略低相似度的符号吗?
注意:我设置tesseract
只识别数字,因此O和0之间没有混淆。
答案 0 :(得分:38)
在tesseract FAQ页面上确实只识别出数字。有关详细信息,请参阅该页面,但如果您拥有版本3软件包,则已配置配置文件。您只需在命令行上指定:
tesseract image.tif outputbase nobatch digits
至于阈值,我不确定你的意思。如果您的输入是一种不寻常的字体,也许您可能会重新输入您的输入样本。另一种方法是更改tesseract的修剪阈值。 FAQ中也提到了这两个选项。
答案 1 :(得分:12)
对于tesseract 3,根据FAQ,命令更简单tesseract imagename outputbase digits
。但它对我不起作用。
我转而尝试使用不同的psm
选项,并发现-psm 6
最适合我的情况。
man tesseract
了解详情。
答案 2 :(得分:8)
对于tesseract 3,我尝试根据FAQ创建配置文件。
在调用Init函数之前或将其放在名为tessdata/configs/digits
的文本文件中:
tessedit_char_whitelist 0123456789
然后,它使用命令:tesseract imagename outputbase digits
答案 3 :(得分:7)
我做了一点点(用tess-two)。也许它会对某人有用。
所以你需要首先初始化API。
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init(datapath, language, ocrEngineMode);
然后设置以下变量
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");
这样引擎只会检查数字。
答案 4 :(得分:7)
如果想要匹配0-9
tesseract myimage.png stdout -c tessedit_char_whitelist=0123456789
或者如果一个人几乎想要匹配0-9,但是有一个或多个不同的字符
tesseract myimage.png stdout -c tessedit_char_whitelist=01234ABCDE
答案 5 :(得分:3)
您可以指示tesseract仅使用数字,如果这不够准确,那么获得更好结果的最佳机会是通过培训过程: http://www.resolveradiologic.com/blog/2013/01/15/training-tesseract/
答案 6 :(得分:1)
custom_oem=r'digits --oem 1 --psm 7 -c tessedit_char_whitelist=0123456789'
text = tess.image_to_string(croped,config=custom_oem)
我正在使用 tesseract 4.1.1。
为了获得更好的结果,您可能需要考虑图像处理技术。
答案 7 :(得分:0)
版本4中不支持此功能。您仍然可以通过-c tessedit_char_whitelist = 0123456789来使用它,并使用“ --oem 0”来还原为旧模型。
There is a bounty to fix this issue.
可能的解决方法:
所述答案 8 :(得分:0)
当图像仅包含1行时,添加“ --psm 7 -c tessedit_char_whitelist = 0123456789'”对我有用。
答案 9 :(得分:-3)
我所做的就是识别所有内容,当我有文字时,我会删除除数字之外的所有字符
watermark
这对我很有用。