识别方法

你可以根据目标与条件选择七种识别方法之一。

七段数码管

最为优选、可靠且快速的方法,适用于识别大多数数字显示中使用的七段字体及其相近字体。

七段数码管

备注

为使该方法正确工作,处理后的图像中数字应为黑色、背景应为白色。如果不是,请勾选/取消勾选 反转 (配置)。

网格设置

网格设置

要配置该方法,首先进入 网格设置 标签,然后指定需要识别的数字个数,并使用 左偏移、顶部偏移、宽度、高度、空格、倾斜 滑块按数字外轮廓调好网格。小数点应位于各平行四边形之间的外部。程序内置了 示例 正确设置的示例。

也可以点击相应按钮自动设置网格。自动构网算法中包含随机性,因此可以多次点击该按钮,直到得到满意的结果。

备注

网格设置被设计为网格不会越过区域边界。因此,例如当网格右边缘已贴近区域右侧时,如果你想增加左偏移,将无法直接实现。你需要先减小宽度或空格。

方法设置

方法设置

接下来,选择 方法设置 标签。里面有 字体宽度 与 数字敏感度 两个滑块,通常默认值已经较为合适,大多数情况下无需调整。但若识别不稳定,可以进行修改:当字体线条较粗时应增大字体宽度,较细时应减小。若图像较暗但无噪点,建议提高敏感度;若数字清晰但存在噪点,建议降低敏感度。重要的是噪点像素数量不要超过数字像素数量。

若勾选 将空位视为零,则某个网格平行四边形内的全白区域会作为 0 显示在识别结果中;否则显示为空字符。

通过 查找点 可以设置程序忽略小数点或在结果中显示小数点。

点敏感度 滑块用于设置小数点的检出逻辑:如果在网格两个平行四边形之间的下边界有黑色像素,则敏感度越高,视为小数点所需的像素数量越少。例如,当该值为 100 时,只需 1 个像素即可被判定为小数点。请根据小数点粗细与噪声多少进行调节。通常默认值适用于大多数情况,仅在必要时修改。

要添加对负号的识别,请点击 添加减号,并在当前区域中用两次单击框选一个矩形(每个区域只能选一个减号,且必须在当前区域内)作为减号所在位置。删除减号请点击 删除减号。

备注

完成所有设置后别忘了在 文件 中保存,以便下次使用该测量设备时不必重新配置。

指针式仪器:角点法

该方法用于指针式(模拟)测量仪表,工作原理如下:

  1. 相对于运动物体(指针)进行背景去除。为正确确定背景,程序需要处理一定数量的帧。

  2. 寻找特征点 —— 角点 。

  3. 通过找到的角点拟合一条直线。并非所有点都参与直线拟合,只保留距离直线不超过一定像素数的点。

  4. 累积已找到直线的统计并寻找中心 —— 指针的旋转轴。

  5. 将指针的 倾斜角 按所选 刻度方法**(如有需要)转换为 **刻度结果。

指针式仪表

为成功实现该方法并便于在程序中广泛应用,提供了 3 个额外的 设置菜单。

备注

无需急于修改设置。默认设置很可能已经合适,或只需调整少数几个参数。

图像设置

图像设置

原始 与 无背景 单选按钮用于选择在区域中显示的图像。原始 显示叠加了对象的原图;无背景 显示减去背景并叠加了对象的图像。

备注

无背景 模式便于调参数,因为可以直观看到设置变化的效果。

该菜单的其它设置仅影响区域图像上各种对象与标注的显示。对列表中的每个对象,你可以:

  • 启用/禁用显示

  • 设置颜色

  • 设置大小

方法设置

方法设置

复选框 固定背景 与 固定中心 分别用于锁定 背景 与 中心 (指针的旋转轴)。 这意味着新的帧不会影响背景或中心坐标。 固定背景可以在指针静止时仍然保持其识别,但即使是细微的背景变化也会逐渐累积,并可能在某个时刻变得至关重要。

刻度结果 与 结果 - 倾斜角 单选按钮决定识别结果的类型。若选择 刻度结果,识别结果为按刻度换算后的读数;若选择 结果 - 倾斜角,识别结果为指针的倾斜角,此时不考虑刻度。

备注

指针的倾斜角从水平向右的位置起,逆时针计数,范围 0 到 360 度。

内存帧数 决定用于处理而保存在内存中的帧数量。帧数越多,背景估计越好,直线与中心的统计也越充分,但对图像稳定性的要求越高。换言之,内存帧数 较大时,程序对背景变化的适应性较差。

在 内存帧数 右侧会显示两个数字 x/y,其中 x 表示程序已处理用于计算背景的帧数,y 表示为计算背景最多会存储的帧数。 当 x = y 时,每个新帧都会替换最早的帧,因此在未启用 固定背景 时,程序使用 最后 的 x 帧来计算背景。

备注

修改该值时,用于确定背景的先前帧数据会被清除,背景计算将从头开始。测量过程中不建议修改此值。

最大偏差 (像素)用于两处:

  • 拟合描述指针的直线时,只保留距离该直线不超过此值的角点;

  • 在新帧中搜索描述指针的直线时,该直线不能偏离已找到的中心超过此值。

也就是说,最大偏差 越小,中心(不同姿态的指针线交点)的期望离散度越小。

备注

每当在新帧中找到描述指针的直线后,中心值都会被进一步精化。因此,如果测量仪表在画面中缓慢移动,中心也会随之移动。但若发生较大的位移(超过 最大偏差),则可能完全找不到新的中心。在这种情况下,请通过 忘记区域统计 按钮从头开始处理。另外,保存区域设置时不会保存 背景 数据,因此当你打开先前保存的区域设置时,请留出时间让程序重新计算背景。

最小点数 决定用于拟合 指针直线 所需的最小 角点 数量;

最大角点数 决定单帧内可被检测到的 角点 的最大数量;

角点质量阈值 设定 角点 的最低质量,低于该阈值的点将被忽略;

角点最小距离**(像素)设定角点之间的最小间距。在得到角点候选后,会移除相互之间过近(小于 **角点最小距离 像素)的点;

最小指针长度 与 最大指针长度**(像素)设定 **指针直线 的最小与最大长度,有助于过滤伪直线;

stats: x / [y...z] 标签会告知用户所收集到的 指针直线**(每帧最多一条指针)样本量,这些直线用于计算它们交点处的中心。 其中 **x 为当前已找到的指针直线数量,y 为计算中心所需的 最小样本量**(也就是说,当 `x < y` 时程序不会计算中心), **z 为 最大可能的样本量。当 x = z 时,每条新直线都会替换样本中最早的直线。 因此,在未固定中心的情况下,程序会记住最近的 x 条指针直线。

忘记区域统计 按钮会清除先前帧中找到的所有直线与中心信息,从头开始处理。当图像出现明显变化(例如仪表移动、光照改变或 中心 被错误检测)时,这可能是必要的操作。

忘记背景 按钮允许重新开始计算背景,当背景突然发生变化时非常有用。

备注

为了在程序启动后的前几秒或按下 忘记区域统计 按钮后正确计算 中心,指针应在尽可能大的范围内改变其倾斜角。寻找中心需要一定时间,该时间随 内存帧数 增大而增大。

刻度

刻度

刻度 菜单用于将指针的倾斜角与 刻度读数 关联起来。

对于同一 区域,可以配置多条 刻度 并在需要时切换。 菜单顶部提供了 刻度列表 以及 + 与 - 按钮。 + 按钮 会创建一条 以当前刻度为模板的新刻度, - 按钮 会在当前刻度不是最后一条时将其删除, 而 下拉列表 则用于在现有刻度之间切换。

备注

也可以通过外部命令在刻度之间切换(见 外部程序),这样就能提前配置所有需要的刻度,并在测量过程中无缝切换。

当 刻度 菜单打开时,将光标移动到刻度线上并单击左键,图像上会出现新的 刻度点,相应记录也会显示在该菜单的表格中。要将这些点与刻度值关联,请在表格中定位到 刻度值 列的单元格并双击左键,随后会出现输入框。输入该刻度点的数值。

备注

如需尽可能精确地将刻度点放在刻度线上,请先放大图像(参见 位置与尺寸控制)。

若要删除不需要的点,请在表格中选中相应行并点击 删除选中行 (选择时可使用 ctrl 与 shift 键)。

然后在 刻度方法 列表中选择合适的方法。

所有方法可分为两类:样条**(即在若干区间分别由代数多项式表示的函数)与 **具有显式解析表达式的函数。

样条包括:

  • 分段线性插值

  • 三次样条

  • 拉格朗日插值多项式

这些方法无需额外设置。详细内容可参考数学与数值方法方面的资料,本说明文档不再展开。

具有显式解析表达式的函数包括:

  • 线性关系

  • 对数关系

  • 双曲线

  • 自定义函数

选择任一此类方法后,你会看到用于刻度换算的函数显式表达式,其中变量 x 表示角度(度),其余参数(除 x 外的任意字母)将由程序自动求取。有时程序无法独立计算出参数的 精确值**(尤其在函数复杂或参数较多时),这时需要为全部或部分参数输入 **初始猜测。一般来说,即便程序已能自动求得参数,输入与其接近的初始猜测也有助于后续计算。

选择 自定义函数 方法时,你需要自行输入函数表达式:使用 x 表示自变量(必需),使用其他字母或单词表示待求的自由参数。还提供一套常用的数学函数与运算符(采用通用记法)。

如果函数表达式不正确,或不包含变量 x,输入框上方会提示错误,文本将以红色高亮。

备注

函数表达式也可以完全不包含 参数,且与 刻度点 无关。例如,可以使用 mod(90 - x, 360) / 6 这种“趣味函数”将秒针的倾斜角转换为秒数(函数 mod(a, b) 返回 a 除以 b 的余数)。

点击 显示图表 按钮将打开当前区域的 刻度图 窗口。该图会实时更新,并显示当前结果。该窗口的菜单包含 文件 部分,你可以通过 保存 将图表保存至默认目录(见 程序目录),或通过 另存为... 选择保存路径。

刻度图

备注

如果程序未检测到识别结果,刻度图 不会更新。因此,如果你修改了 刻度图,它只会在首次出现识别结果后更新。

指针式仪表:轮廓法

该方法的工作原理与 指针式仪器:角点法 类似,不同之处在于它检测的是 轮廓,并基于指针轮廓上的所有点来寻找 指针直线。因此该方法的设置略有不同。

备注

提供多种方法可使程序更具通用性:在某些场景下某一种方法表现更好,在另一些场景下则相反。

图像设置

图像设置与 角度法 相同(见 图像设置),不同的是这里显示的是 轮廓 而非 角点。

方法设置

方法设置

轮廓法设置 中包含与 角度法设置 (见 方法设置)相同用途的变量:

  • 固定背景 与 固定中心 复选框

  • 刻度结果 与 结果 - 倾斜角 单选项

  • 内存帧数

  • 最大偏差

以及若干新的(像素单位)变量:

  • 指针轮廓最小长度

  • 指针轮廓最大长度

  • 指针轮廓最小面积

  • 指针轮廓最大面积

这些变量作为长度与面积的过滤条件,帮助在画面中定位目标指针的轮廓。

刻度

与 角度法 完全相同(见 刻度)。

指针式仪表:颜色法

该方法与 指针式仪器:角点法 也类似,但有更显著的差异:

  1. 该方法同样需要估计背景,但不是相对于运动物体,而是通过颜色筛选得到的像素来定义背景;

  2. 指针直线 基于被筛选的像素拟合。直线搜索的目标是让尽可能多的被筛选像素与直线的距离不超过 最大偏差 像素。

随后流程与前述方法相同。

备注

该方法非常适用于指针颜色有明显区分(例如红色)的测量仪表(此类仪表并不少见)。这样可以通过颜色过滤出指针,从而只对指针进行处理。

图像设置

与 角度法 相同(见 图像设置),但该方法中没有 角点。

方法设置

方法设置

颜色法设置 包含与 角度法设置 (见 方法设置)相同用途的变量:

  • 固定中心 复选框

  • 刻度结果 与 结果 - 倾斜角 单选项

  • 内存帧数

  • 最大偏差

  • 最小点数

  • 最小/最大指针长度

以及若干新的按钮和变量:

  • 选择指针颜色:点击后打开颜色选择窗口,可选择指针颜色。其右侧会显示一个选定颜色的方块。

  • 三个滑块用于设置指针颜色的 范围 (红、绿、蓝)。工作原理:彩色图像的每个像素由三个 0 到 255 的数(红、绿、蓝)表示。对选定颜色 (x, y, z),滑块允许设置范围 (x ± dx, y ± dy, z ± dz),其中 dx、dy、dz 为滑块值。范围之外的像素将被视为背景。

备注

手动设置 指针颜色 可能较为繁琐,因此你也可以将光标移动到图像中的指针上并单击左键,即可自动选择指针颜色。此时 方法设置 菜单必须处于打开状态。该逻辑等价于 吸管 工具。

需要注意的是,吸管 同样适用于 颜色设置窗口**(点击 **选择指针颜色 打开的窗口),但在 Windows 操作系统上例外。

_images/pip.png

刻度

与 角度法 完全相同(见 刻度)。

神经网络

神经网络非常擅长识别俄语与英语的印刷体文本。也可以按需添加其他语言,请联系开发者。神经网络对标准字体的识别效果好,但相比 七段数码管 方法更新结果的频率较低,并且对数字显示常用字体的识别效果较差。

神经网络

图中神经网络正在处理第 2 区域

备注

要使神经网络工作,还需要安装 Tesseract-OCR,并在 主菜单 → 设置 → 连接神经网络... 中指定可执行文件路径。

二维码与条形码

该方法可识别选定区域内的二维码与条形码(zxing-cpp 库支持的一维与二维格式)。若区域内有多个码,则每个结果单独占一行显示。

备注

阈值 滑块对该方法无效。如有需要,可使用 反转。为保证可靠识别,区域内的码应清晰可见,避免强反光与严重模糊。

指示器

该方法用于判定图像的颜色。当你需要监控某些设备的指示状态时会很有用。例如,当设备面板上的红色报警灯亮起时,可以配置触发外部的安全程序。

指示器

该方法的设置同样包含 阈值 滑块与 反转 复选框,但与 七段数码管 与 神经网络 使用灰度图像不同,此方法会同时在三个通道(红、绿、蓝)上处理图像。

备注

例如,当阈值为 100,某像素的 RGB 值为 (90, 150, 200) 时,处理后该像素变为 (0, 255, 255),对应青色;若应用反转,则变为 (255, 0, 0),对应红色。

因此,经过处理后,采用 指示器 方法的区域仅保留 8 种颜色。对于每个区域也仅会识别这 8 种颜色。颜色敏感性 滑块决定在该区域中最终识别为哪种颜色。

备注

颜色敏感性 定义了在一个区域中判定某种颜色存在所需的像素占比。

例如,当该值为 100 时,只需每种颜色 1 个像素即可判定颜色存在,因此此时区域的颜色结果将始终为白色(红绿蓝混合为白)。

当该值为 0 时,必须达到 100% 的像素都为某种颜色,才判定该颜色存在,因此结果总是黑色。

介于两者之间的取值可以用来过滤无关的颜色。