跳到内容。

如何使用 Viewer 调试识别

简介

Tesseract 具有内置功能来显示其内部状态,以便您可以查看其分段和识别。

构建和安装

运行 Viewer 需要以下组件

make ScrollView.jar 将自动将它们下载到 tesseract/java,如果 curl 存在于您的路径中。

所有这些 jar 文件都需要放在同一个目录中。Tesseract 通过环境变量 SCROLLVIEW_PATH 或具有相同名称的编译器定义来了解位置。

Dmitri Silaev 提供的替代下载链接可在 http://www.4shared.com/zip/FnP8RSu0/tess_debug_3_02.html 获得。将 piccolo-1.2.jarpiccolox-1.2.jarScrollView.jar 从下载的包复制到 C:\Tesseract-OCR\java

在 Linux 上

在 Windows 上

构建 ScrollView.jar 的构建过程未定义。它包含在包 tesseract-2.04.exe.tar.gztesseract-ocr-3.02-win32-portable.ziptesseract-ocr-setup-3.02.02.exe 中。将 piccolo-1.2.jarpiccolox-1.2.jar 放置到同一位置 (Tesseract-OCR/java)。然后设置 SCROLLVIEW_PATH 环境变量以指向 java 目录。

分段器调试模式

要运行分段器测试,请尝试以下操作

tesseract phototest.tif test1 segdemo inter

您应该看到类似以下内容

tesseract_debug

图像中找到的词语以蓝色矩形表示。有 3 个菜单

MODES 设置左键单击或选择的操作模式。DISPLAY 更改窗口请求的显示内容。(并非立即)OTHER 提供许多杂项全局操作。如果您在编辑器图像窗口中右键单击,则可以动态更改任何“新”配置变量的值。但是,根据您要更改的内容,许多有用的变量都使用旧样式,无法以这种方式更改。将来有一天,有人会将所有旧样式变量更新为新变量。

请注意,菜单看起来很奇怪。这是因为该工具最初设计用于提供创建地面真相文件的能力,以极其详细的方式标记字符,以及有关构成每个字符的连通分量的信息等。大多数功能都是多余的,并且在过去 10 年中一直未使用。一些宣传的功能很容易导致程序崩溃,但此处记录的功能应该可以正常工作……

要显示字符,请取消选择 DISPLAY/Bounding Boxes,选择 DISPLAY/Polygonal Approx,然后选择 OTHER/Uniform display。

要放大,请将光标悬停在某个词语上,然后将鼠标滚轮滚离您 2 或 3 次。每次点击都会将大小翻倍。要缩小,请将鼠标滚轮滚向您。如果您没有鼠标滚轮……您可能就没办法了。Java 代码在这方面需要一些改进。

现在选择 MODES/Recog words 并在某个词语中单击。如果您选择“code”(第二行上的第二个词),那么您应该看到类似以下内容

您可能还会注意到在您启动 tesseract 的终端窗口中的文本

chop_word:
6.81 -2.16 : c [63 ]a 14.38 -4.56 : o [6f ]a 14.53 -4.61 : e [65 ]a 15.15 -4.81
: ¢ [a2 ]
chop_word:
3.98 -1.11 : 0 [30 ]0 8.37 -2.33 : o [6f ]a 10.94 -3.04 : c [63 ]a 14.43 -4.01 :
 ¤ [a4 ]
chop_word:
8.24 -1.77 : d [64 ]a
chop_word:
17.58 -4.26 : e [65 ]a 23.65 -5.73 : a [61 ]a
system words:
52.17 -5.73 : c [63 ]a  : o [6f ]a  : d [64 ]a  : a [61 ]a 45.49 -4.26 : c [63 ]
a  : o [6f ]a  : d [64 ]a  : e [65 ]a
permute_characters : 45.49 -4.26 : c [63 ]a  : o [6f ]a  : d [64 ]a  : e [65 ]a

system words:
52.17 -5.73 : c [63 ]a  : o [6f ]a  : d [64 ]a  : a [61 ]a 45.49 -4.26 : c [63 ]
a  : o [6f ]a  : d [64 ]a  : e [65 ]a
permute_characters : 45.49 -4.26 : c [63 ]a  : o [6f ]a  : d [64 ]a  : e [65 ]a

所有这些意味着:每个 chop_word: 之后的行是每个原始连通分量的分类器输出,这些连通分量在编辑器图像窗口中以不同的颜色显示。每个分类器结果包含一个评分、一个置信度、一个字符字符串、它的十六进制 Unicode 表示以及一个表示其 ctype 的字符。评分是一个正距离数字,并按轮廓长度进行缩放。置信度是与最近原型之间的距离,但取反,因此负数比更接近零的数字更糟糕。ctype 是“a”表示小写字母,“A”表示大写字母,“x”表示既不是字母也不是数字的字母,“0”表示数字。缺少 ctype 表示以上都不是。

最后一个 chop_word 之后是 permute_characters。这显示了从分类器输出构建词语字符串的第一次尝试。评分是所有字符评分的总和,置信度是所有字符中最糟糕的置信度。

本例中没有,但 improve 1 和 improve 2 将是切碎的 blob 的两半,以及相应的 permute_characters。

现在单击分段窗口。您将看到 d 和 e 变成一种颜色,相应的分类器结果将出现在您的终端中。这是关联器尝试不同的字符分段,看看它是否可以改善结果。

再次单击,它将尝试将 c 和 o 连接起来,然后连接 o 和 d,最后同时连接 c 和 o 以及 d 和 e。

进一步单击将为您提供一个名为 FXDemo 的新窗口,显示最终分段,以及该词语的基线和中线

现在您可以再次在编辑器窗口中单击。由于 tesseract 不是可重入的,因此您一次只能识别一个词语,因此当分段器运行时,您无法启动另一个 ;-)

分类器调试模式

tesseract phototest.tif test1 matdemo inter

与 segdemo 一样,要显示字符,请取消选择 DISPLAY/Bounding Boxes,选择 DISPLAY/Polygonal Approx,然后选择 OTHER/Uniform display。

现在选择 MODES/Recog blobs 并在某个字符上单击。如果您选择“code”(第二行上的第二个词)中的“e”,那么您应该看到类似以下内容(您可能需要滚动窗口才能使字符位于中心)

此文本应该出现在您的终端中

AD Matches =  e [65 ]a(8) 21.83  a [61 ]a(16) 29.38
Debugging class = e  (All Templates) ...
Best built-in template match is config 24 (21.0) (cn=0)
No AD templates for class 8 = e

Integer Matcher -------------------------------------------
Match Complete --------------------------------------------
Left-click in IntegerMatch Window to continue or right click to debug...

现在,如果您右键单击,您将看到一个包含 3 个项目的弹出式菜单。理论上,您可以要求它使用自适应模板、静态模板或两组模板进行调试。区分不同菜单项的代码尚未编写,即使编写了,也不会产生任何影响,因为代码的其余部分保持不变。您没有自适应模板,因为 pass1 尚未运行。在某些时候,这将得到修复,以便您可以在 pass1 或 pass2 中处理的词语之间进行选择。然后它将变得有意义。

因此,单击随机菜单项,您将看到一个对话框文本框,要求您输入要调试的类。它要求您输入字符类别的字符字符串,对于大多数拉丁语系语言来说,这只是一个字符,但对于其他语言(如卡纳达语)来说,可能是一个完整的字符序列。为了使非语言使用者更容易输入非键盘字符,此框接受 0xdddd 作为 4 位十六进制 Unicode 代码。

这次输入单个小写 c,然后按回车键(单击“确定”似乎不起作用!),您应该在终端窗口中看到以下内容

Debugging class = 34 = c  (All Templates) ...
Best built-in template match is config  4 (22.0) (cn=1)
No AD templates for class 34 = c

Integer Matcher -------------------------------------------
Match Complete --------------------------------------------
Left-click in IntegerMatch Window to continue or right click to debug...

IntMatchWindow 应该显示小写 c 与之匹配得很好。它获得的数字介于上面 e 和 a 之间,这表明 c 被类修剪器拒绝了。

在 IntMatchWindow 中,显示了特征和原型之间的对应关系。原型是细长的线,特征是较短较粗的线。颜色从最佳匹配到最差匹配以这种有点随意的顺序排列:白色、绿色、红色、蓝色。灰色线应该表示未知匹配哪种原型,但它们似乎落后一个分类。正方形表示静态分类器,并显示归一化单位。电车轨表示自适应分类,并显示基线、中线、下降线和上升线的位置。

其他 MODE 可能性

通常,所选的 MODE 将对您使用左键选择或单击的 blob 或词语执行某些操作。

MODE Show BL Norm Word 将在单独的窗口中显示您左键单击的词语(在编辑器窗口中),并添加基线和中线。在撰写本文时,您必须将鼠标移到 BlnWords 窗口才能使其显示任何内容。

Recog Blobs 用于在单个 blob 上测试分类器,而无需单击所有分段。它将把选择视为一个“词语”,因此您可以选择多个 blob,并且有机会看到大多数组合的分类结果。

Show point 用于获取 tesseract 坐标空间中特定 blob 的坐标,以便您可以将它们输入 textord_test_x 和 textord_test_y 以了解为什么某些特定 blob 从未进入输出。

唯一其他起作用的 MODE 是 Dump Word、Row Gaps Hist 和 Block Gaps Hist,它们都将信息转储到您的终端窗口中。

其他显示模式

您可以通过在取消选择 Display/Bounding Boxes 和选择 Display/Polygonal Approx 后不选择 Other/Uniform Display 来节省一些显示时间。相反,您单击的每个词语都将以新的格式重新显示

故障排除

在大量 ScrollView: Waiting for server… 消息中间收到消息“kill %1: no such job”?您在启动 Java 时遇到了问题。在 Windows 上,错误消息应该传送到您的终端窗口,但在 Linux 上,您必须编辑 svutil.cpp 以从 cmd_template 字符串中删除“>/dev/null 2>&1”。

尝试在 linux 上运行此命令

java -Xms512m -Xmx1024m -Djava.library.path=$SCROLLVIEW_PATH -cp $SCROLLVIEW_PATH/ScrollView.jar:$SCROLLVIEW_PATH/piccolo-1.2.jar:$SCROLLVIEW_PATH/piccolox-1.2.jar com.google.scrollview.ScrollView

在 Windows 上尝试此操作

java -Xms512m -Xmx1024m -Djava.library.path=%SCROLLVIEW_PATH% -cp %SCROLLVIEW_PATH%/ScrollView.jar;%SCROLLVIEW_PATH%/piccolo-1.2.jar;%SCROLLVIEW_PATH%/piccolox-1.2.jar com.google.scrollview.ScrollView

如果 java 和 SCROLLVIEW_PATH 设置一切正常,您应该看到

Socket started on port 8461.

否则,您需要修复问题,例如

您应该了解的其他事项

这是一个调试工具,而不是一个合适的 UI,因此,它不能很好地处理正常执行路径之外的任何内容。问题/错误包括但不限于