菜单

可视化工具

相关源文件

本文档描述了 Tesseract OCR 系统中可用的可视化工具,主要围绕 ScrollView 框架。这些工具通过基于客户端-服务器的可视化系统,使开发人员能够可视化 OCR 处理阶段、调试识别算法以及显示中间结果。

概述

ScrollView 可视化系统由一个客户端-服务器架构组成,其中:

  • C++ 客户端(Tesseract)发送可视化命令以渲染内容。
  • 基于 Java 的服务器组件接收这些命令并显示可视化。
  • 双向通信支持通过事件处理进行交互式调试。

ScrollView 为创建图形窗口提供了全面的接口,其功能包括渲染文本、绘制形状、显示图像以及通过鼠标和键盘事件处理用户交互。

来源:src/viewer/scrollview.h18-30 src/viewer/scrollview.cpp19-30

ScrollView 系统架构

来源:src/viewer/scrollview.cpp44-67 src/viewer/scrollview.cpp274-318

ScrollView 通信遵循特定模式

  1. 来自 C++ 的 ScrollView 命令被序列化为字符串消息。
  2. 消息通过 TCP/IP(默认端口 8461)传输到 Java 服务器。
  3. 服务器解释命令并进行可视化渲染。
  4. 用户交互会产生事件,这些事件会被发送回 C++ 客户端。
  5. 事件处理程序在 C++ 代码中处理这些事件。

系统会初始化一个后台线程,该线程持续接收来自服务器的消息,然后将这些消息分派给相应的事件处理程序。

来源:src/viewer/scrollview.cpp88-185 src/viewer/scrollview.cpp244-247

ScrollView 窗口和绘图

创建窗口

要创建可视化窗口,您需要实例化一个 ScrollView 对象。

参数包括:

  • 窗口标题
  • 位置 (x, y)
  • 窗口大小 (宽度, 高度)
  • 画布大小 (宽度, 高度)
  • 可选:Y 轴方向(正常或反转)

来源:src/viewer/scrollview.h168-178 src/viewer/scrollview.cpp249-268

绘图图元

ScrollView 提供了全面的绘图函数集。

功能描述
Pen()设置轮廓线的画笔颜色。
Brush()设置形状的填充颜色。
Line()绘制连接两点的线。
Rectangle()绘制指定角的矩形。
Ellipse()绘制具有中心和尺寸的椭圆。
Text()在指定位置渲染文本。
Draw()显示图像。
SetCursor()/DrawTo()通过从当前位置绘制来创建折线。

颜色可以使用预定义的枚举值(例如,ScrollView::RED)或 RGB 值指定。

来源:src/viewer/scrollview.h228-280 src/viewer/scrollview.cpp482-643

事件处理系统

ScrollView 通过 SVEventHandler 接口提供了事件驱动的交互模型。

ScrollView 支持的事件类型

事件类型描述
SVET_DESTROY窗口被用户销毁
SVET_EXIT最后一个窗口关闭
SVET_CLICK鼠标左键单击
SVET_SELECTION区域选择
SVET_INPUT键盘输入
SVET_MOUSE鼠标移动(按下按钮时)
SVET_MOTION鼠标移动(无按钮)
SVET_HOVER鼠标静止
SVET_POPUP弹出菜单命令
SVET_MENU菜单栏命令

处理事件:

  1. 创建一个继承自 SVEventHandler 的类。
  2. 重写 Notify(const SVEvent* event) 方法。
  3. 使用 AddEventHandler() 将处理程序注册到 ScrollView 窗口。

来源:src/viewer/scrollview.h53-65 src/viewer/scrollview.h92-101 src/viewer/scrollview.cpp320-353

ScrollView 支持通过 SVMenuNode 类来创建菜单栏和弹出(上下文)菜单。

创建菜单系统:

  1. 创建一个根 SVMenuNode
  2. 为菜单类别添加子节点。
  3. 向这些类别添加命令项。
  4. 使用 BuildMenu(scrollview, true) 构建菜单栏,或使用 BuildMenu(scrollview, false) 构建弹出菜单。

菜单事件通过事件处理系统以 SVET_MENUSVET_POPUP 事件的形式到达。

来源:src/viewer/svmnode.h20-26 src/viewer/svmnode.cpp45-144

交互元素

ScrollView 支持多种类型的交互式 UI 元素。

消息框

对话框

窗口控制

来源:src/viewer/scrollview.h285-305 src/viewer/scrollview.cpp514-747

使用示例

可视化字符识别

通过交互式选择进行调试

来源:src/viewer/scrollview.h189-191 src/viewer/scrollview.cpp432-449

限制和注意事项

  • ScrollView 需要运行一个 Java 服务器组件来显示可视化。
  • 当不需要可视化时,可以通过 GRAPHICS_DISABLED 编译标志禁用所有可视化代码。
  • 该系统主要设计用于调试和开发,而不是用于生产。
  • 网络通信会增加一些开销,使其不太适合性能关键的代码路径。

来源:src/viewer/scrollview.h31-43 src/viewer/scrollview.cpp83-87

与 Unicode 和字符集可视化集成

ScrollView 特别适用于可视化 UNICHARSET 的内容,UNICHARSET 在 Tesseract 中代表 Unicode 字符集。可视化工具可以显示字符属性,提供字符识别的可视化调试,并帮助分析特定脚本的问题。

有关字符集管理,请参阅字符集管理页面。

来源: src/ccutil/unicharset.cpp329-360 src/ccutil/unicharcompress.cpp204-240