跳转至

字符识别:识别固定位置的文字

字符识别用来读一块位置固定、内容也固定的文字,再和你填的标准答案逐字比:型号、规格、固定批号、警示语。印错、印少、贴错料,它都能抓出来。

内容每件都变的用可变区域;只想看字印得糊不糊、不关心内容的,用固定区域按图案比更简单。

两个名字

老版本的树里这一栏叫"字符检测",现在统一叫"字符识别",是同一种检测项。

前置条件

  • 检测方案里已经有标签外框,并且训练过。
  • 这块文字在模板图上清晰、横排、正向。

它包含哪些检测框

字符识别下面只有一个检测框,里面固定挂四个:

检测框 干什么 默认
搜索参数 允许这块文字相对模板漂多大范围 开
定位参数 在这个范围里按形状把这块文字精确找出来 关
检测参数 认字,并和参考字符串比对 开
缺陷参数 逐个字符查笔画有没有缺、糊、多墨(字模 OCV),要先建字体库 关

定位参数默认关

字符识别的定位模板就是框里的文字本身。内容每件会变的行(序列号、授权码)拿整行做模板,换一件就找不到,定位失败后认字和缺陷参数都不运行,整件 NG。所以新建的字符识别默认停用定位参数,只靠标签外框定位,框固定在模板位置。 内容固定、又需要框跟着文字走时,在树里"定位参数"上右键启用,再训练工程。给它"添加到副模板"时软件会自动打开这一组的定位参数:运行时要靠定位分数决定用哪张模板,关着就永远用第一张。内容会变、旁边又有固定文字的,改用可变区域锚在固定文字上;旁边有条码的,用条码字符对。

也可以在树里选中它右键,用"添加细节检测框""添加屏蔽内容检测框"再加两种框;它还支持"添加到副模板"。

新建与画框

  1. 点工具栏"新建检测项",类型选"字符识别",确定。
  2. 把绿框拖到那块文字上:
    • 上下留一点余量,不要贴着字顶字底切。
    • 一个框只框一行。多行文字要么一行建一个字符识别,要么改用多行字符。
    • 尽量别把边框线、下划线、图标框进来。
  3. 打开"检测参数",在"参考字符串"里填上这块文字应该是什么,比如 K22R-02。也可以先跑一次,再点"设为当前识别结果"把认出来的直接填进去(填之前一定要肉眼确认它认对了)。
  4. Ctrl+T"训练工程",再"单模板运行"。
  5. 要把认出来的内容送给通讯口、MES 或逻辑检测,在树里选中这个检测项右键"设为自定义变量"。

字符识别的检测参数窗口

参数说明

搜索参数和定位参数与固定区域完全一样,这里只讲后两个。

检测参数

顶部有"设置""混淆字符""替换字符"三页。

预处理参数:

参数 含义 调参建议
白底黑字 字是深的还是浅的:勾上 = 白底黑字,不勾 = 黑底白字 按实际勾,弄反了基本认不出字
英文模型 勾上 = 英文模型,只认数字、英文字母和常见符号;不勾 = 中英文模型,还认汉字 内容里没有汉字就勾上"英文模型",它不会把字母认成汉字,更稳更快。有汉字才取消勾选(用中英文模型)
旋转角度 认之前先把这块图转 0 / 90 / 180 / 270 度 软件只认横排正向的字。竖排、倒排必须在这里转正
X方向缩放 认之前横向拉伸或压缩的倍数 默认 1。字被压扁时调到 1.5~2
Y方向缩放 纵向同上 默认 1。字太矮太小时往上调
最小字符高度 / 最小限定框高度 勾上"最小字符高度"后,比"最小限定框高度"矮的笔画先被抹掉再认;不勾时数值框置灰 用来去掉框里混进来的细线、下划线、上下行漏进来的半截字。"最小限定框高度"填正常字符高度的一半左右

比对参数:

参数 含义 调参建议
中文符号转英文 全角的括号、逗号、冒号统一换成半角再用 默认开着,别关
忽略符号(仅比对用) 比对时只比字母和数字,把符号丢掉。不改输出结果 内容里的横杠、点老是认不稳,但你只关心字母数字时开
过滤符号(结果输出) 直接把非字母数字从输出结果里删掉 结果要发给 MES 而符号是噪声时才开;开了以后下游拿到的也是删过的
置信度阈值 识别结果的可信程度门槛,0~1 默认 0.8。印糊了置信度会掉下来,靠它抓印刷质量。误报多降到 0.6~0.7,漏检糊字升到 0.85
字符串长度限制 结果必须正好这么多字符,否则 NG。填 -1 表示不检查 内容固定时顺手填上,能多拦一层
与参考字符串比对 是否拿结果和"参考字符串"对一遍;不勾时"比对方式""参考字符串"置灰 字符识别默认开着,这是它的主要用途,别关
比对方式 参考字符串在结果字符串中 / 结果字符串在参考字符串中 / 结果字符串等于参考字符串 默认"结果字符串等于参考字符串",最严也最常用。只想卡固定前缀就换成"参考字符串在结果字符串中"
参考字符串 标准答案 手工填,或点它下面的"设为当前识别结果"从这次识别里抓。上线前必须核对一遍

识别结果:只读的"结果字符串"和"结果置信度",调参全靠它。

混淆字符页:每一行是一组"互相认错也当对"的字符,比如 1Il、oO0。左列是组名不能改,右列填这一组互相等价的字符。只在比对时生效,不改输出。用"+"加一组,选中行用删除图标删一组。

  • 好处:0 和 O 这种天生难分的字符不会因为认反就误判。
  • 坏处:真的印错成另一个同组字符也放过了。要求严格的场合,把对应那一组删掉。

替换字符页:两列,"原字符"和"替换为"。结果里出现左列内容就换成右列。它改的是输出结果本身,用来兜底修一些固定认错。

判定顺序是固定的,照这个顺序排查最快:认不出字 → NG;长度不等于"字符串长度限制" → NG;置信度低于"置信度阈值" → NG;比对不过 → NG。

缺陷参数

这一页查的是笔画本身有没有缺角、糊团、多墨,算法是字模 OCV:把每个字和字体库里存的样本比。默认是关的,要用先右键"启用此检测项"。建字体库、调参和看结果见字模 OCV。

只查内容对不对的话,这一页不用开。

训练与调试

  1. 动过框的位置就要 Ctrl+T"训练工程";只改识别参数不用训练。
  2. 右键"运行此检测项"单跑,看"结果字符串"和"结果置信度"。
  3. 结果图片下拉框里三张图:
    • 输入图片:框实际抠出来的那块。切字、框歪、混进别的行,都在这里看。
    • 旋转矫正图:转正并缩放之后送去识别的图,这是模型真正看到的东西。
    • 预处理图:勾了"最小字符高度"才有,能看到细线被抹掉后的效果。
  4. 拿十几张实拍图跑一遍,记下最低的置信度,把"置信度阈值"设在它下面一点点。

常见误判与处理

现象 原因 调哪里
完全认不出字 底色弄反,或方向不对 勾上或取消"白底黑字"(不勾 = 黑底白字);"旋转角度"转正
只认出一两个字,中间漏了 字间距太大或框切到字 重画框,四周留余量;试着把"X方向缩放"调到 1.5
数字被认成汉字 没勾"英文模型"(用的是中英文模型) 内容里没汉字就勾上"英文模型"
结果里混进短横线、下划线 框里有边框线或下划线 勾"最小字符高度","最小限定框高度"填正常字高的一半左右
正常品偶尔 NG,结果串看着是对的 置信度卡太紧,或参考字符串里有看不见的空格 降"置信度阈值";重新点一次"设为当前识别结果"覆盖参考字符串
0 和 O、1 和 I 老是判错 字形天生难分 在"混淆字符"页确认有对应的一组;要求严格时反过来把这一组删掉
印错成另一个字却判 PASS 错的那个字和对的那个字在同一组混淆字符里 删掉那一组;把"比对方式"改成"结果字符串等于参考字符串"
换了一批料就整批 NG 参考字符串还是上一批的 改参考字符串。经常换型号的产线应该改用可变区域或逻辑检测
定位失败导致整件 NG 搜索范围不够或分数阈值太高;或者这行内容每件都变,却开着定位参数 见固定区域的搜索参数与定位参数;内容会变的行停用定位参数
双击检测参数 / 缺陷参数,结果区写"本次定位失败,未运行" 本次定位参数 NG,认字和比对都没跑,窗口里是当前图模板位置的裁剪 同上一条

相关页面