条码字符对:条码与明文互相校验¶
条码字符对是一个检测项里同时管三件事:解码、读码下面那行明文、核对两者是否一致。标签上码和字印的不是同一个内容——这是最典型的贴错料、串料事故,靠单独的码检测和字符识别是抓不到的。
只想拿到码的内容、不需要核对明文,用码检测更省事。
前置条件¶
- 检测方案里已经有标签外框,并且训练过。
- 标签上码和明文的相对位置固定(码在上、字在下,间距不变)。
它包含哪些检测框¶
新建之后会出现三个框,树里也是三条:
检测框 —— 框住旁边内容固定的部分,当整组的参照物。用法和固定区域完全一样:
| 检测框 | 干什么 | 默认 |
|---|---|---|
| 搜索参数 | 允许参照物漂移多大范围 | 开 |
| 定位参数 | 在这个范围里按形状精确找到参照物 | 开 |
| 缺陷参数 | 检查参照物本身印得好不好 | 开 |
条码框 —— 框住条码或二维码:
| 检测框 | 干什么 | 默认 |
|---|---|---|
| 条码检测结果 | 解码,拿到码的内容 | 开 |
| 缺陷参数 | 查条码本身有没有断条、缺角、白点、脏点 | 关,而且只对一维码有意义 |
明文框 —— 框住码下面那行人能看懂的字:
| 检测框 | 干什么 | 默认 |
|---|---|---|
| 检测参数 | 认字,并和条码解出来的内容比对 | 开 |
| 缺陷参数 | 逐字符查笔画缺陷(字模 OCV),要先建字体库 | 关 |
明文和条码是自动挂钩的
每跑一件,软件会把"条码检测结果"解出来的字串自动填进明文框"检测参数"的"参考字符串"里,再按"比对方式"判定。默认的比对方式是"参考字符串在结果字符串中",也就是"明文里必须包含码的内容"。你不需要手工去填参考字符串。
新建与画框¶
- 点工具栏"新建检测项",类型选"条码字符对",确定。
- 模板图左上角出现三个绿框。点一个,右侧树里对应那条会高亮,用这个办法分清哪个是哪个。
- 把三个框分别拖到位:
- 检测框 → 旁边那块内容固定的图案或文字,贴紧。
- 条码框 → 整个码。宁可画大一点:码被切掉一点点就可能解不出来。二维码要把四周的静区(空白边)也框进去。
- 明文框 → 码下面那一行字,上下留点余量,只框一行。
- Ctrl+T"训练工程",再"单模板运行"。
- 如果这个码就是产品的 SN:在树里选中这个检测项右键"设置为SN码",检测结果就会和这个 SN 绑在一起,以后能按 SN 回查缺陷图。

参数说明¶
检测框的三个参数页和固定区域一样,见固定区域。明文框的两个参数页和可变区域的字符框一样,见可变区域。下面只讲条码框特有的,以及明文框上和可变区域不同的地方。
条码框 —— 条码检测结果¶
| 参数 | 含义 | 调参建议 |
|---|---|---|
| 解码类型 | 三选一:二维码 / 条码 / DataMatrix | 必须选对,选错一张都解不出来。一维码选"条码" |
| 横向拉伸比例 | 解码前把图横向拉伸几倍 | 默认 1。码被打印机压扁、条纹挤在一起时调到 1.5~2 |
| 纵向拉伸比例 | 纵向同上 | 默认 1。一维码本来就矮,通常不用动 |
| 过滤冒号 | 一个快捷按钮,点一下就把"正则表达式"填成过滤冒号的规则 | 码里带冒号而下游不接受时点它 |
| 正则表达式 | 符合这个规则的字符会从结果里删掉 | 留空就不过滤。只有下游(MES、PLC)要求去掉某些字符时才填 |
| 起始位 / 长度 | "裁切结果"里的两个值:从第几位开始、取多少位 | 码很长而下游只要中间某一段时用。长度填 0 表示不裁 |
| 比对字符 | "无铭文固定字符比对":解出来的内容必须完全等于这一串,否则 NG | 用在"这台机器上流过的码永远是同一个"的场合。内容每件都变就别开 |
| 扫到多个不同的码 | "多码处理"里的下拉:"判NG(默认)" 或 "按正则筛选" | 框里只可能有一个码就保持默认。标签上下叠了两个码、框又不好画小时,选"按正则筛选" |
| 正则 | 选了"按正则筛选"才能填,只保留匹配这个规则的码 | 比如两个码里只有一个以 2636 开头,就填 ^2636。填错了框会变红 |
| 解码失败自动扩大搜索区重试(×1.5/×2/×3) | 第一次没解出来时,自动把搜索区按中心放大再试最多三次 | 默认开着,建议别关。它专治"框画小了、标签又漂了一点"导致的偶发漏读 |
| 解码方式 | 只读,主解码器 / 备用解码器 | 多数件应走主解码器 |
多码策略的副作用
选了"按正则筛选"以后,即使框里只有一个码,这个码也必须匹配正则才算过。这其实相当于多了一道内容校验,好处是能拦住串料,坏处是正则写窄了会误杀。
条码框 —— 缺陷参数¶
这一页只对一维码有意义。检测二维码或 DataMatrix 时,把它保持禁用状态(右键"禁用此检测项")。
它把一维码的每一根黑条圈出来,从三个角度找毛病。
参数模式:下拉"基础参数 / 高级参数"。日常只用基础参数(下表);高级参数是算法内部的膨胀核、平滑、动态阈值等,一般不要动。选"高级参数"后界面换成高级那一套(按组排在同一页,要往下滚),同名的阈值 / 容忍量以高级那一套为准。
基础参数:
| 参数 | 含义 | 调参建议 |
|---|---|---|
| 子面积缺陷容忍量 | 黑条如果缺了一块,缺口的面积超过这个值就判缺陷 | 从大往小调:先给很大让它全过,再逐步调小到刚好能抓住真实缺口 |
| 最大高度差缺陷容忍量 | 各根黑条的高度差超过这个像素数就判缺陷。黑条断成两截时高度会骤变 | 本来就设计成长短不齐的码(比如带保护条的),给一个很大的值等于不查这一项 |
| 孔洞检测阈值 | 黑条里面的白点,亮到什么程度算孔洞 | 调大更宽容 |
| 孔洞面积缺陷容忍量 | 孔洞总面积超过这个值才判缺陷 | 不想查细小孔洞就给一个很大的值 |
| 斑点检测阈值 | 白底里面的黑点,暗到什么程度算斑点 | 同孔洞 |
| 斑点面积缺陷容忍量 | 斑点总面积超过这个值才判缺陷 | 同孔洞 |
高级参数里主要是:把条码从周围内容中抠干净的膨胀参数(横向/纵向膨胀核宽、迭代次数)、把码整体提亮的线性拉伸参数、二值化的动态阈值高低尾和最小区域面积,以及孔洞和斑点各自的获取、膨胀、平滑参数。这些默认值一般不用动;真要动就一边改一边看右边的中间结果图。
明文框 —— 检测参数(和可变区域的差别)¶
参数表和可变区域完全一样,只有三点不同:
- 与参考字符串比对默认是开着的,而且参考字符串是自动填的,填的就是这一件条码解出来的内容,不要手工去改。
- 比对方式默认是"参考字符串在结果字符串中"。明文通常比码多印一些前缀后缀,所以用"包含"而不是"等于"。如果明文和码的内容一字不差,可以改成"结果字符串等于参考字符串",判定更严。
- 如果明文里有码里没有的分隔符,又老因为它比对不过,可以开"忽略符号(仅比对用)"。
明文框 —— 缺陷参数¶
逐字符查明文的笔画缺陷,默认关,要用先右键"启用此检测项"。算法是字模 OCV,用法见字模 OCV。
训练与调试¶
- 动过任何一个框就要 Ctrl+T"训练工程"。
- 右键"运行此检测项"单跑,然后按下面顺序看:
- 先看条码框 → 条码检测结果的"结果"。显示"未检测到值"就是没解出来,后面的比对都是空谈。
- 再看明文框 → 检测参数的"结果字符串"和"结果置信度"。
- 两个都对了,再看整体是 PASS 还是 NG;如果还是 NG,多半是比对方式不合适。
- 条码框在"输入图片"里能看到实际抠出来的那块码。码被切边、静区不够,在这里一眼就能看出来。
- 条码框的缺陷参数调好之后,一定要拿几张真实的坏码验证它确实报 NG——这类参数很容易调成"什么都过"。
常见误判与处理¶
| 现象 | 原因 | 调哪里 |
|---|---|---|
| 结果一直是"未检测到值" | 解码类型选错了 | "解码类型"改成码的真实类型 |
| 偶发解不出,重拍一张又好了 | 框画小了,标签漂一点码就被切 | 把条码框画大,盖住整张码加静区,这是最有效的一招;确认"解码失败自动扩大搜索区重试"是开着的 |
| 二维码小、印得又密,解不出 | 分辨率不够 | 先试把"横向拉伸比例""纵向拉伸比例"调到 1.5~2;根上的办法是把相机拉近或换镜头 |
| 一维码解出来但校验位不对 | 码本身印坏或被压缩 | 提高打印质量;开条码框的"缺陷参数"把坏码拦下来 |
| 结果是"多码NG: ..." | 框里同时扫到了两个不同的码 | 先试着把框画小只盖一个码;画不小就用"多码处理 → 按正则筛选"加正则 |
| 结果是"正则不匹配(...): ..." | 开了"按正则筛选",而这个码不符合正则 | 检查正则写得对不对,或改回"判NG(默认)" |
| 码和明文都读对了,还是 NG | 比对方式太严,或明文里有多余符号 | 比对方式改成"参考字符串在结果字符串中";开"忽略符号(仅比对用)" |
| 明文认不准 | 框切到字、方向不对、模型选错 | 见可变区域的常见误判 |
| 正常的一维码被缺陷参数判 NG | 容忍量给太小 | 把三组容忍量都调大,再从大往小逐个收 |
| 检测二维码时报条码缺陷 | 条码缺陷参数只适用一维码 | 选中条码框下的"缺陷参数"右键"禁用此检测项" |