67

我想用它tesseract来识别数字。问题是我混合了数字和字母,当我使用SetVariable("tessedit_char_whitelist", "0123456789")
每个符号时,tesseract 返回错误的数字。

我可以设置一个阈值以tesseract省略相似度低的符号吗?

注意:我设置tesseract为只识别数字,因此 O 和 0 之间没有混淆。

4

10 回答 10

44

tesseract FAQ页面实际上回答了仅识别数字。有关更多信息,请参阅该页面,但如果您有版本 3 包,则配置文件已经设置。您只需在命令行上指定:

tesseract image.tif outputbase nobatch digits

至于阈值,我不确定你的意思。如果你的输入是一种不寻常的字体,也许你可以用你的输入样本重新训练。另一种方法是更改​​ tesseract 的修剪阈值。常见问题解答中也提到了这两个选项。

于 2011-09-21T06:17:03.983 回答
15

对于 tesseract 3,tesseract imagename outputbase digits根据FAQ ,命令更简单。但这对我来说不是很好。

我转而尝试不同的psm选择,并找到-psm 6最适合我的情况。

man tesseract详情。

于 2013-04-12T03:24:34.360 回答
13

对于 tesseract 3,我尝试根据FAQ创建配置文件。

在调用 Init 函数之前或将其放入名为的文本文件中tessdata/configs/digits

tessedit_char_whitelist 0123456789                 

然后,它使用以下命令工作:tesseract imagename outputbase digits

于 2014-07-18T08:44:48.073 回答
12

如果要匹配0-9

tesseract myimage.png stdout -c tessedit_char_whitelist=0123456789

或者如果一个人几乎想匹配 0-9,但有一个或多个不同的字符

tesseract myimage.png stdout -c tessedit_char_whitelist=01234ABCDE
于 2016-12-15T12:41:52.830 回答
9

我让它有点不同(用 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");

这样,引擎将只检查数字。

于 2016-12-09T11:52:37.457 回答
3

您可以指示 tesseract 仅使用数字,如果这不够准确,那么获得更好结果的最佳机会是通过培训过程: http ://www.resolverradiologic.com/blog/2013/01/15/training-正方体/

于 2013-11-02T00:45:05.647 回答
3

当图像仅包含 1 行时,添加“--psm 7 -c tessedit_char_whitelist=0123456789'”对我有用。

于 2019-11-23T06:35:46.190 回答
3

版本 4 不支持此功能。您仍然可以通过 -c tessedit_char_whitelist=0123456789 与“--oem 0”一起使用它,它会恢复为旧模型。

有一个赏金来解决这个问题。

可能的解决方法:

正如@amitdo 所说

于 2019-04-24T15:47:24.437 回答
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。

为了获得更好的结果,您可能需要考虑图像处理技术。

于 2021-02-25T19:17:51.687 回答
-2

我所做的就是识别所有内容,当我有文字时,我会取出除数字以外的所有字符

//This replaces all except numbers from 0 to 9
recognizedText = recognizedText.replaceAll("[^0-9]+", " ");

这对我来说效果很好。

于 2015-08-08T21:47:28.960 回答