码检测:读取一维码和二维码¶
码检测只干一件事:把框里的码解出来。解得出来就 PASS,解不出来就 NG。解出来的内容还能拿去当产品 SN、发给 MES 或 PLC。
如果还要核对码下面那行明文印得对不对,用条码字符对。
前置条件¶
- 检测方案里已经有标签外框,并且训练过。
- 码在图上够清晰:黑白分明、不反光、条纹分得开。
它包含哪些检测框¶
码检测下面只有一个检测框,里面挂两个:
| 检测框 | 干什么 | 默认 |
|---|---|---|
| 搜索参数 | 允许码相对模板漂多大范围 | 开 |
| 调整参数 | 解码的全部设置,以及对结果的后处理 | 开 |
码检测不支持细节检测框、屏蔽框,也不支持"添加到副模板"。
支持的码制有三类,在"调整参数"的"解码类型"里选:
- 条码 —— 一维码。先用主解码器读,读不到自动换备用解码器再读一遍,两道都过不了才算失败;"调整参数"里的"解码方式"会显示这一件是哪一道解出来的——经常走到备用解码器,说明框或打光该调了。
- 二维码 —— QR 码。
- DataMatrix —— 工业上常见的方形点阵码。
新建与画框¶
- 点工具栏"新建检测项",类型选"码检测",确定。
- 把绿框拖到码上。把框画大,不要贴着码的边缘切:
- 二维码要把四周的静区(空白边)也框进去,静区不够解码库就认不出来。
- 标签是手工贴的,漂个上百像素很常见,框大一点比什么参数都管用。
- 打开"调整参数",把"解码类型"选成码的真实类型。
- Ctrl+T"训练工程",再"单模板运行",看"结果"里有没有解出内容。
- 这个码是产品 SN 的话,在树里选中这个检测项右键"设置为SN码";要把内容送给通讯口或逻辑检测用,右键"设为自定义变量"。

参数说明¶
搜索参数¶
| 参数 | 含义 | 调参建议 |
|---|---|---|
| 横向偏移容忍绝对值 | 允许码相对模板往左右各漂多少像素 | 默认 30,也就是左右各 15 像素,对手工贴标来说太小了。手贴标签建议给到 200 以上 |
| 纵向偏移容忍绝对值 | 上下方向同上 | 同上 |
| 横向锁定 / 纵向锁定 | 批量改参数时不动这一项 | 一般不用 |
调整参数¶
| 参数 | 含义 | 调参建议 |
|---|---|---|
| 解码类型 | 二维码 / 条码 / DataMatrix | 必须选对。选错一张都解不出来,而且不会有别的提示 |
| 横向拉伸比例 | 解码前把图横向拉几倍 | 默认 1。码被打印机压扁、条纹挤在一起时调到 1.5~2 |
| 纵向拉伸比例 | 纵向同上 | 默认 1 |
| 过滤冒号 | 快捷按钮,点一下把"正则表达式"填成过滤冒号的规则 | 码里带冒号而下游不收时点它 |
| 正则表达式 | 匹配到的字符会从结果里删掉 | 留空就不处理。只在下游明确要求去掉某些字符时才填 |
| 起始位 / 长度 | "裁切结果"的两个值:结果从第几位开始取、取几位 | 码很长而下游只要其中一段时用。长度填 0 表示不裁 |
| 比对字符 | "无铭文固定字符比对":解出来的内容必须完全等于这一串,否则 NG | 用在"这条线上的码永远是同一个"的场合;内容每件都变时别开 |
| 扫到多个不同的码 | "多码处理":"判NG(默认)" 或 "按正则筛选" | 框里只可能有一个码就用默认。标签上叠了两个码、框又画不开时选"按正则筛选" |
| 正则 | 选"按正则筛选"才能填,只保留匹配的码,恰好剩一个才通过 | 例:两个码里只有一个以 2636 开头,填 ^2636。写错了输入框会变红 |
| 解码失败自动扩大搜索区重试(×1.5/×2/×3) | 第一次没解出来时,自动把区域按中心放大 1.5 倍、2 倍、3 倍各试一次 | 默认开着,别关。它专治"框画小了 + 标签漂了"造成的偶发漏读。放大到超过 4096 像素或盖满整图就自动停 |
| 解码方式 | 只读,主解码器 / 备用解码器 | 多数件应走主解码器 |
按正则筛选会连单码一起卡
选了"按正则筛选"以后,哪怕框里只有一个码,这个码也必须匹配正则才算过。这等于多了一道内容校验:能挡住串料,但正则写窄了会误杀。
训练与调试¶
- 改过框的位置就要 Ctrl+T"训练工程"。改解码参数不用训练。
- 右键"运行此检测项",打开"调整参数"看"结果"那一栏:
- 有内容 = 解出来了。
未检测到值= 一张也没解出来。多码NG: ...开头 = 扫到了多个不同的码。正则不匹配(...): ...开头 = 开了正则筛选但码不匹配。
- 右边图片下拉框选"输入图片",看实际送去解码的那块图。码被切掉边、静区不够、整块糊掉,在这里都看得出来。
- 后三种结果串只是说明文字,不是码值。送去 SN、自定义变量和通讯输出的一律是空串,下游不会收到这些提示文字。
调之前先确认码本身没问题
拿手机扫一下实物。手机都扫不出来,就不是软件参数的事,先解决打印质量或打光。
常见误判与处理¶
| 现象 | 原因 | 调哪里 |
|---|---|---|
| 一张都解不出来 | 解码类型选错 | "解码类型"改成码的真实类型 |
| 平时都好,偶尔几件解不出来 | 框画得刚好贴着码,标签漂一点就切到码 | 把框画大盖住整张标签或整个码加静区,这是最有效的办法。同时确认"解码失败自动扩大搜索区重试"开着 |
| 框已经很大还是偶发漏读 | 搜索扩张不够 | 把"横向偏移容忍绝对值"和"纵向偏移容忍绝对值"加大到 200 以上 |
| 小尺寸二维码解不出 | 裁出来的图太小,解码库吃不消 | 软件在二维码模式下会自动把小图放大再解;仍解不出就调"横向拉伸比例"和"纵向拉伸比例",或把相机拉近 |
| 码反光、一半发白 | 打光问题 | 调光源角度或换漫射光罩,软件侧调不出来 |
| 结果里多了或少了字符 | 填了"正则表达式"或开了"裁切结果" | 清空正则;把"长度"设回 0 |
结果是 多码NG |
框里盖到了两个码 | 框画小只盖一个;或用"按正则筛选"加正则 |
| 明明有码却判 NG,结果串是对的 | 开了"无铭文固定字符比对"而内容不等于比对字符 | 关掉它,或把比对字符改对 |
| 解码很慢 | 搜索范围太大,或一直在走扩大重试 | 先把框画准让第一次就能解出来;不要把偏移容忍值设成几千 |