字符识别:识别固定位置的文字¶
字符识别用来读一块位置固定、内容也固定的文字,再和你填的标准答案逐字比:型号、规格、固定批号、警示语。印错、印少、贴错料,它都能抓出来。
内容每件都变的用可变区域;只想看字印得糊不糊、不关心内容的,用固定区域按图案比更简单。
两个名字
老版本的树里这一栏叫"字符检测",现在统一叫"字符识别",是同一种检测项。
前置条件¶
- 检测方案里已经有标签外框,并且训练过。
- 这块文字在模板图上清晰、横排、正向。
它包含哪些检测框¶
字符识别下面只有一个检测框,里面固定挂四个:
| 检测框 | 干什么 | 默认 |
|---|---|---|
| 搜索参数 | 允许这块文字相对模板漂多大范围 | 开 |
| 定位参数 | 在这个范围里按形状把这块文字精确找出来 | 关 |
| 检测参数 | 认字,并和参考字符串比对 | 开 |
| 缺陷参数 | 逐个字符查笔画有没有缺、糊、多墨(字模 OCV),要先建字体库 | 关 |
定位参数默认关
字符识别的定位模板就是框里的文字本身。内容每件会变的行(序列号、授权码)拿整行做模板,换一件就找不到,定位失败后认字和缺陷参数都不运行,整件 NG。所以新建的字符识别默认停用定位参数,只靠标签外框定位,框固定在模板位置。 内容固定、又需要框跟着文字走时,在树里"定位参数"上右键启用,再训练工程。给它"添加到副模板"时软件会自动打开这一组的定位参数:运行时要靠定位分数决定用哪张模板,关着就永远用第一张。内容会变、旁边又有固定文字的,改用可变区域锚在固定文字上;旁边有条码的,用条码字符对。
也可以在树里选中它右键,用"添加细节检测框""添加屏蔽内容检测框"再加两种框;它还支持"添加到副模板"。
新建与画框¶
- 点工具栏"新建检测项",类型选"字符识别",确定。
- 把绿框拖到那块文字上:
- 上下留一点余量,不要贴着字顶字底切。
- 一个框只框一行。多行文字要么一行建一个字符识别,要么改用多行字符。
- 尽量别把边框线、下划线、图标框进来。
- 打开"检测参数",在"参考字符串"里填上这块文字应该是什么,比如
K22R-02。也可以先跑一次,再点"设为当前识别结果"把认出来的直接填进去(填之前一定要肉眼确认它认对了)。 - Ctrl+T"训练工程",再"单模板运行"。
- 要把认出来的内容送给通讯口、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。
只查内容对不对的话,这一页不用开。
训练与调试¶
- 动过框的位置就要 Ctrl+T"训练工程";只改识别参数不用训练。
- 右键"运行此检测项"单跑,看"结果字符串"和"结果置信度"。
- 结果图片下拉框里三张图:
- 输入图片:框实际抠出来的那块。切字、框歪、混进别的行,都在这里看。
- 旋转矫正图:转正并缩放之后送去识别的图,这是模型真正看到的东西。
- 预处理图:勾了"最小字符高度"才有,能看到细线被抹掉后的效果。
- 拿十几张实拍图跑一遍,记下最低的置信度,把"置信度阈值"设在它下面一点点。
常见误判与处理¶
| 现象 | 原因 | 调哪里 |
|---|---|---|
| 完全认不出字 | 底色弄反,或方向不对 | 勾上或取消"白底黑字"(不勾 = 黑底白字);"旋转角度"转正 |
| 只认出一两个字,中间漏了 | 字间距太大或框切到字 | 重画框,四周留余量;试着把"X方向缩放"调到 1.5 |
| 数字被认成汉字 | 没勾"英文模型"(用的是中英文模型) | 内容里没汉字就勾上"英文模型" |
| 结果里混进短横线、下划线 | 框里有边框线或下划线 | 勾"最小字符高度","最小限定框高度"填正常字高的一半左右 |
| 正常品偶尔 NG,结果串看着是对的 | 置信度卡太紧,或参考字符串里有看不见的空格 | 降"置信度阈值";重新点一次"设为当前识别结果"覆盖参考字符串 |
0 和 O、1 和 I 老是判错 |
字形天生难分 | 在"混淆字符"页确认有对应的一组;要求严格时反过来把这一组删掉 |
| 印错成另一个字却判 PASS | 错的那个字和对的那个字在同一组混淆字符里 | 删掉那一组;把"比对方式"改成"结果字符串等于参考字符串" |
| 换了一批料就整批 NG | 参考字符串还是上一批的 | 改参考字符串。经常换型号的产线应该改用可变区域或逻辑检测 |
| 定位失败导致整件 NG | 搜索范围不够或分数阈值太高;或者这行内容每件都变,却开着定位参数 | 见固定区域的搜索参数与定位参数;内容会变的行停用定位参数 |
| 双击检测参数 / 缺陷参数,结果区写"本次定位失败,未运行" | 本次定位参数 NG,认字和比对都没跑,窗口里是当前图模板位置的裁剪 | 同上一条 |