重构——工业视觉质检系统搭建与应用
第一章 视觉的力量
第二章 课程知识篇
第三章 实操训练
3.1 产品部件外观缺陷检测
3.2 产品部件几何尺寸测量
3.3 产品部件字符与条码识别
3.4 产品部件装配检测
3.5 产品部件功能测试辅助
第四章 项目实战
4.1 3C产品工业视觉应用
4.2 汽车部件工业视觉应用
4.3 物流场景工业视觉应用
由锐软科技提供技术支持
-
+
首页
3.3 产品部件字符与条码识别
##### [学习视频](https://b23.tv/CwgbaOo) ##### 学习目标: - 理解工业视觉字符识别(OCR)和条码/二维码识别的基本流程与挑战。 - 掌握在强反光或运动情况下获取清晰字符/条码图像的方法,例如光源角度控制和高速成像。 - 学习调用OCR引擎和条码解码库的基本编程步骤,实现对产品序列号和二维码信息的自动读取。 ##### 任务成果: - 能够搭建用于字符和条码识别的成像系统,解决如金属表面反光、标签模糊等实际问题,获取高质量影像。 - 编写程序对零件上的批次号字符和二维码进行识别,并对识别结果进行准确性校验(如验证码校验或格式校验)。 - 将识别的产品编码信息保存到文件或数据库,为生产流程追溯提供数据支持。 #### 3.3.1 场景破解 在工业生产的零部件上,常常会印刷或刻录批次号、序列号,以及粘贴条形码或二维码,用于产品追溯和自动化管理。现在让我们以**读取零件表面的批次字符和二维码**为例,看看机器视觉是如何完成此类识别任务的。在这个场景中,我们需要摄取零件表面包含字符和二维码的图像,并通过软件算法准确提取其中的信息。例如,一个金属工件表面刻有产品序列号(字母数字组合),旁边还有一个二维码标签记录了相同信息。我们的目标是同时读取这两种标识。 <center>  </center> 此过程中最大的挑战在于:**提高图像质量以便清晰辨认字符/码**。高反光表面(如金属件)会导致字符笔画泛白难辨,需要通过调整光照角度或使用偏振滤波来减少眩光;而印刷不清或运动中拍摄导致的模糊则可能使字符轮廓不连贯、二维码"糊掉",需要通过增强对比度、缩短曝光时间等手段来优化成像。只有获取了高质量的图像,我们才能依靠OCR(光学字符识别)和条码算法正确解码其中的信息。 <center> </center> ```mermaid flowchart LR A[带标识的零件] --> B[图像采集] B --> C{预处理增强} C -->|良好| D[字符/二维码识别] C -->|不良| E[调整光源/焦距] D --> F{结果校验} F -->|通过| G[输出识别信息] F -->|存疑| H[人工复核] ``` 如上图所示,我们首先对零件进行成像,并视情况进行预处理增强(例如提高对比度、过滤噪声)。如果图像质量欠佳,则需要回到调整步骤,例如改变光源角度、增大相机光圈或调整对焦直到字符与条码清晰可见。一旦获取到清晰图像,软件端将分别对字符和二维码进行识别。如果识别结果符合预期格式或通过校验(例如二维码自带的纠错校验,或字符编码满足预定规则),则输出最终读出的批次信息;若结果不可信(如识别到异常字符或解码失败),则需要标记出来供人工复核确认。 <center>  </center> 我们可以把这个过程类比为日常生活中的二维码扫描场景:当我们用手机扫二维码时,如果第一次没扫上,我们会调整手机的角度或距离,或者避免强光直射屏幕来减少反光【就像调整光源】。一旦二维码被正确识别,手机会自动跳出其中包含的信息。如果扫出的信息不完整或乱码,我们可能会重新对准二维码再试一次【相当于结果校验不通过,需重新获取】。这个过程体现了"先获取清晰图像,再正确识别并校验"的基本原则。 ```mermaid flowchart LR X[手机摄像头对准二维码] --> Y{成功识别?} Y -->|否| Z[调整角度或距离] Y -->|是| M[解码二维码] M --> N{信息合理?} N -->|是| O[显示有效信息] N -->|否| P[提示重新扫描] ``` 通过上述比喻,我们更容易理解在工业视觉字符/码识别中,提高成像质量和正确校验结果是多么重要。接下来,我们将实际搭建系统并编写相应代码来实现零件字符与条码的自动识别。 #### 3.3.2 系统搭建 ##### (1)硬件配置 根据识别任务需求,我们需要搭配出能够最大程度获取清晰字符和条码图像的硬件方案。首先,相机应具备足够的分辨率和清晰度,特别是当字符很小时需选用高像素相机(例如500万像素以上),并搭配适当的放大镜头(如35mm定焦镜头)以确保在工作距离下字符细节可分辨。其次,光源的选择对抑制反光和突显字符非常关键:对于激光刻印在金属表面的字符,可采用**同轴光源**使刻印文字形成黑底白字的效果,或使用**低角度环形光**勾勒刻印痕迹;对于打印在标签上的二维码,**环形均匀光**可以避免局部阴影。无论哪种情况,**偏振滤光片**都是应对高反光的有力工具——在光源和镜头前分别加装偏振片并交叉偏振,可以显著降低镜面反射光线。在需要高速运动中采集的场景,还可选配高亮度短脉冲光源,以在短曝光时间内获得足够亮度、冻结运动避免拖影。 <center>  </center> 综合考虑上述因素,我们确定如下硬件配置方案: 1. **工业相机**:500万像素彩色相机,配合高速快门模式,以获得清晰的字符颜色对比和冻结动作(如有输送带运动)。 2. **镜头**:35mm定焦镜头,加装焦距调节环以适应较近拍摄距离,确保小字号字符也能成像清晰。 3. **光源**:可调亮度LED环形光源(安装在相机镜头周围),提供均匀照明;另外配备同轴光模块,可根据需要切换,用于检测刻印字符时增强对比。 4. **滤波器**:偏振片套件。一片安装在环形光源前(偏振轴水平),一片安装在镜头前(偏振轴垂直),形成交叉偏振以最大程度减少来自金属表面的眩光。 5. **安装支架**:定制可调角度支架,允许微调相机相对于零件的倾斜角,以避免某些方向的直射反光进入镜头。 ##### (2)设备调试步骤 有了上述硬件,接下来通过调试使系统进入最佳工作状态: 1. **相机定位与对焦**:将相机安装在距零件约200mm的位置,使视野能够覆盖字符和二维码区域。先对焦在零件表面印刷/刻印层上,保证字符笔画清晰可见。使用一个印有清晰文字和二维码的校准板,观察实时图像放大后的效果,微调焦距直到图像上最小的字符也边缘锐利。 2. **光源角度调整**:先打开环形光源,调整其亮度到中等水平。观察金属表面反光情况:若出现镜面高光斑点,略微倾斜相机或者改变光源安装角度,使直射反光避开镜头视线。然后逐渐增加环形光亮度直至字符反差明显。对于刻印字符,尝试打开同轴光源并关掉环形光,比较两种光照下字符呈现效果,选择更佳的方案(刻印较浅时同轴光往往能提供更好的对比度)。 <center> <图片: 不同光源下刻印字符成像对比图>  </center> 3. **偏振调节**:如果仍有反光干扰,确保环形光源前已经贴附偏振片,并在镜头上安装偏振片。缓慢旋转镜头前偏振片角度,直到图像中金属表面的眩光明显减弱、字符笔画对背景亮度差异最大为止。记下此偏振角度设定。 4. **曝光设置**:在保持图像清晰的前提下,尽可能缩短相机曝光时间。例如将曝光时间降至5ms以内,并相应提高光源亮度或相机增益,拍摄一张图像检查亮度。如果发现图像有轻微运动模糊(可能由于流水线运动),继续减小曝光时间并增加光照直到字符边缘无拖影。与此同时,注意增益不宜过高以免噪声增加干扰OCR。 5. **测试采集与验证**:选取一个示范零件(上面有已知的字符和二维码),采集图像并运行识别软件(OCR和二维码识读算法)进行测试。如果字符识别结果与已知批次号一致,二维码也成功解析出正确信息,则说明成像质量和参数设置满足要求。若存在识别错误或失败,需检查是哪方面原因导致:常见如字符区域光照不均导致OCR错误,这时可调节光源位置;或焦距略差导致二维码模糊,则需重新精确对焦。 6. **批量运行准备**:锁定相机和光源的位置和参数设置,在后续批量检测中不再随意更改。确保每次更换零件的位置一致(可以使用定位治具保证零件上的码位于相机固定视野),以提高识别的稳定性和成功率。 经过以上调试,我们就建立了一个稳定的字符与条码采集系统。接下来将进入软件部分,利用图像处理和识别算法,读取图像中的批次号和二维码信息。 ##### (3)软件开发与算法实现 软件部分,我们需要分别处理字符和条码(包括二维码)两类识别任务。通常流程是:**图像预处理 → 字符区域识别(OCR)+ 条码区域识别 → 信息校验与整合**。在实际编程中,可以使用现有的开源库:如pytesseract(Python封装的Tesseract OCR引擎)用于字符识别,Zxing或OpenCV自带的QR解码器用于二维码解析。下面提供一个示例核心函数`decode_markings()`,演示如何同时读取字符和二维码: ```python import cv2 import pytesseract def decode_markings(image_path): """ 读取零件图像,识别其中的文本字符和二维码信息。 返回一个包含识别结果的字典,例如{"text": "AB1234", "qr": "http://..."}。 """ # 1. 图像读取与灰度转换 image = cv2.imread(image_path) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 2. 图像预处理:提高对比度,平滑噪声 gray = cv2.convertScaleAbs(gray, alpha=1.5, beta=0) # 提高对比度 blurred = cv2.medianBlur(gray, 3) # 中值滤波去噪 # 3. 尝试二维码检测与解码 result = {} qr_detector = cv2.QRCodeDetector() data, pts, _ = qr_detector.detectAndDecode(blurred) if data: result["qr"] = data # 4. OCR字符识别(配置OCR引擎只识别数字和大写字母,提高准确率) custom_config = r'--oem 3 --psm 6 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' text = pytesseract.image_to_string(blurred, config=custom_config) text = text.strip() if text: result["text"] = text return result # 示例使用 output = decode_markings("part_code_sample.jpg") print("识别输出:", output) <图片: part_code_sample.jpg 示例 (含字符与二维码)> <图片: 预处理后用于OCR和二维码识别的图像> <图片: 字符与二维码识别结果标注图> ``` 上述代码对输入图像进行了灰度和对比度增强处理,以突出字符和二维码的对比。然后使用OpenCV的`QRCodeDetector`尝试检测并解码二维码。如果返回的数据非空,说明图像中存在二维码并已成功读取,其内容存储在`result["qr"]`中。接下来,我们调用pytesseract执行OCR识别。在此之前,我们指定了一个自定义配置,将OCR限定为识别大写字母和数字(这假定批次号只包含这些字符),并采用合适的Page Segmentation Mode(PSM)以提高识别准确率。得到的文本经过`strip()`清理空白字符后,如果非空,就存入`result["text"]`。最终函数返回包含识别文本和二维码的字典。 在真实应用中,我们还需要对`result`进行**结果校验**:例如,检查OCR识别的批次号格式是否符合预期(长度、前缀等),若发现异常字符可考虑让系统提醒重新拍照;对于二维码,很多自带纠错能力,但仍应验证解码内容是否合理(比如是否包含预期的字段)。通过增加校验和错误处理,可以提高系统的可靠性。此外,如果字符可能有旋转,我们可以在OCR前尝试旋转校正图像角度,或者使用更高级的版面分析来自动检测文字方向。对于污损的二维码,可以尝试图像修复或多次采样来提高解码成功率。 <center>  </center> #### 3.3.3 技能图谱 ```mermaid mindmap root((字符与条码识别技能)) (设备操作技能) [光源角度与偏振控制] [高速曝光消除模糊] [镜头微距对焦技巧] [多角度采集策略] (图像处理技能) [图像增强与去噪] [阈值化与形态学修复] [ROI提取与版面分析] [畸变校正与对齐] (Python编程技能) [OCR引擎调用(pytesseract)] [二维码/条码库使用] [识别结果格式校验] [数据存储与数据库对接] ``` 在设备操作层面,我们要懂得**调节光源角度、使用偏振滤光**来降低反光,并通过**高速相机设置**来避免运动模糊,对微小特征还需要掌握镜头的微距对焦和景深控制。如果需要从不同角度获取图像(例如应对字符刻印较深或表面曲面的情况),也要设计多角度采集的策略。 在图像处理方面,我们需要运用**图像增强技术**提高字符对比度,利用**阈值和形态学操作**来修复断笔或噪点,必要时定位感兴趣区域(ROI)或进行版面分析以分离字符和条码区域。此外,对于倾斜的文本还可能涉及**几何畸变校正**,确保识别算法的输入规范化。 最后,在Python编程层面,我们需要熟练调用OCR引擎和二维码解码库,并对输出结果进行格式校验和异常处理,如发现错误可以重试或报警。同时,识别出的信息往往需要与生产系统对接,因而掌握**数据存储**或数据库交互也是一项重要技能,便于将批次号等信息录入追溯系统。 #### 3.3.4 典型应用 * **金属零件序列号自动读取** * 针对如发动机缸体、齿轮等金属件上激光刻印的序列号,采用同轴光照明结合偏振滤光拍摄,以黑底白字形式突出刻印字符轮廓,再通过OCR识别字母数字编码。 <center> <图片: 金属零件序列号示例> <图片: 金属零件序列号OCR识别结果> _1747362406.jpeg) </center> * 系统会验证序列号格式(如固定的字母开头、后跟数字),并将结果自动录入数据库,关联每件产品的制造批次和质量记录。 * 广泛应用于汽车、航空零部件的追溯管理,实现生产过程的自动扫码替代人工记录,提高可靠性。 * **PCB板二维码识别与核对** * 在每块印刷电路板(PCB)上通常印有唯一二维码,包含生产信息。视觉系统使用顶部环形光避免PCB焊点反光干扰,拍摄二维码区域并用OpenCV解码获取板件ID。 <center> <图片: PCB板及其二维码示例> <图片: PCB二维码识别与核对结果> _1747362376.jpeg) </center> * 识别出的ID与生产数据库进行比对,确认该板的工艺流程和料号匹配无误。如果二维码污损,则系统会标记该板为需人工检查。 * 常用于电子制造业的产线,每分钟可处理数十块PCB,实现产品流转信息的自动采集。 * **包装箱条码批量扫描** * 在包装线上,纸箱或标签上的一维条形码需要快速读取以追踪发货。利用工业相机阵列覆盖传送带宽度,并辅以高亮度散射光源减少因包装褶皱产生的阴影。 <center> <图片: 包装箱条码示例> <图片: 包装箱条码批量扫描结果>  </center> * 图像通过形态学操作加强条码线条的连续性,再由条码解码库(如Zxing)读取其中编码。系统校验条码内容(例如EAN码校验位)确保准确,然后将数据上传至仓库管理系统。 * 该方案替代了手持扫码枪,提高了物流分拣中心的自动化程度,可同时识别多个快速经过的包裹条码。 > 思考与练习: > > 1. 针对可能存在角度旋转的字符(例如零件上的批号有时横向、有时竖向),有哪些方法可以提高OCR对旋转文字的识别率? > 2. 当遇到部分损坏或污渍覆盖的二维码时,可以采取哪些图像处理或算法策略来提高解码成功率? > 3. 系统在读取到批次号和条码信息后,如何将这些识别结果自动存入数据库,实现生产数据的追溯保存?尝试设计相关的数据记录流程。
ent
2025年5月16日 22:03
转发文档
收藏文档
上一篇
下一篇
AI问答
手机扫码
复制链接
手机扫一扫转发分享
复制链接
AIChat
代码在线测试
AI问答
你好,我是AI阅读助手,我可以回答与文档内容相关的内容,帮助你快速理解文档,以下是我归纳的几个核心问题,可供您参考:
发送
输入
运行
输出
Markdown文件
分享
链接
类型
密码
更新密码