重构——工业视觉质检系统搭建与应用2
第一章 视觉的力量
第二章 课程知识篇
第三章 实操训练
3.1 产品部件外观缺陷检测
3.2 产品部件几何尺寸测量
3.3 产品部件字符与条码识别
3.4 产品部件装配检测
3.5 产品部件功能测试辅助
第四章 项目实战
4.1 3C产品工业视觉应用
4.2 汽车部件工业视觉应用
4.3 物流场景工业视觉应用
由锐软科技提供技术支持
-
+
首页
3.5 产品部件功能测试辅助
##### [学习视频](https://b23.tv/OPyjuXJ) ##### 学习目标: - 理解工业视觉在产品功能测试中的辅助作用,包括按键动作验证、指示灯状态监测和显示屏质量检测等。 - 掌握高速相机捕捉瞬时状态变化的技术,以及如何通过视觉反馈验证产品功能的正确性。 - 学习编写自动化测试脚本,结合视觉识别与机械控制,实现产品功能的全自动测试流程。 ##### 任务成果: - 能够搭建一套产品功能自动测试平台,包括视觉采集、机械执行和结果判断系统。 - 编写程序实现对按键按压效果、LED指示灯状态和显示屏显示内容的自动检测与验证。 - 总结影响功能测试准确度的因素,提出提高系统稳定性和测试效率的改进方案。 #### 3.5.1 场景破解 产品在出厂前需要经过功能测试,确保各个部件如按键、指示灯、显示屏等正常工作。传统上这些测试往往依赖人工操作和目视检查,不仅效率低下,还容易受操作人员状态影响而造成漏检。现在让我们以**电子产品功能测试**为例,探索如何借助机器视觉技术辅助甚至代替人工,实现全自动功能测试。 <center>  </center> 在这个场景中,我们面临的主要挑战是:**如何通过视觉系统准确捕捉和判断产品功能状态的变化**。例如,按下某个按键后,产品可能会亮起指示灯或在显示屏上出现特定内容,我们需要视觉系统能够精确捕捉这些响应,并判断其是否符合预期。这不仅需要清晰的图像采集,还需要与测试控制系统紧密配合的时序控制,确保在正确的时刻捕捉到预期的状态变化。 ```mermaid flowchart LR A[待测产品] --> B[机械执行动作] B --> C{视觉捕捉响应} C -->|预期响应| D[功能正常] C -->|异常响应| E[功能异常] C -->|无响应| F[测试失败] F --> G[重新测试/人工检查] ``` <center>  </center> 上述流程图展示了一个基本的视觉辅助功能测试循环:首先,机械执行系统对产品执行特定操作(如按压按键);然后,视觉系统捕捉产品的响应状态(如指示灯亮起或显示屏内容变化);最后,通过图像分析判断响应是否符合预期,从而确定功能是否正常。如果测试过程中未能捕捉到任何响应,系统会标记为测试失败,转入重新测试或人工检查环节。  这种测试方式可以类比为我们日常使用远程遥控器测试电视机时的情景:我们按下遥控器上的按键(执行动作),然后观察电视屏幕是否出现预期变化(视觉捕捉响应),如果屏幕显示正确则表明功能正常,否则说明遥控器或电视可能存在问题。不同的是,机器视觉系统通过算法自动完成观察和判断,无需人工干预。 ```mermaid flowchart LR X[遥控器发送指令] --> Y[电视接收响应] Y --> Z{观察屏幕变化} Z -->|频道切换| M[功能正常] Z -->|无变化/错误显示| N[功能异常] ``` <center>  </center> 通过这个比喻,我们可以更好地理解视觉辅助功能测试的本质:就是用"机器的眼睛"替代人眼,自动化地观察和判断产品在特定操作后的行为是否符合预期。接下来,我们将探讨如何搭建这样一个视觉辅助功能测试系统。 #### 3.5.2 系统搭建 ##### (1)硬件配置 功能测试辅助系统需要综合视觉和机械控制两个方面,硬件配置应包含以下几部分: 1. **视觉采集系统**: - **工业相机**:选择200-500万像素的彩色工业相机,具备高帧率(≥60fps)以捕捉快速变化的状态,如LED闪烁或显示屏刷新。 - **镜头**:根据测试产品大小选择合适的镜头,例如对于小型电子产品,可使用16mm或25mm定焦镜头确保覆盖整个产品表面。 - **光源**:采用LED环形光或柔光箱提供均匀照明,避免反光干扰。对于指示灯测试,需特别注意控制环境光,以准确判断LED亮灭状态。 2. **机械执行系统**: - **多轴机械臂**:配备精密控制的机械臂,精度±0.02mm,用于模拟按键按压、旋钮转动等人工操作。 - **专用测试治具**:定制产品固定底座,确保测试产品位置固定且精确对准相机视野。 - **压力传感器**:安装在机械臂末端,监测按压力度,确保按键被正确触发(例如手机按键通常需要200-300g压力)。 3. **控制与协同系统**: - **主控制器**:工控机或嵌入式控制器,协调视觉采集与机械动作的时序。 - **信号接口**:与被测产品的电气接口连接,用于发送测试信号或读取产品内部状态数据作为辅助判断。 - **同步触发模块**:确保机械动作执行后能及时触发相机拍照,捕捉瞬时状态。 <图片: 功能测试辅助系统硬件配置示意图> <center> _1747363023.jpeg) </center> ##### (2)设备调试步骤 硬件搭建完成后,需进行系统调试以确保各部分协同工作: 1. **相机设置与校准**: - 安装相机于产品正上方约200-400mm处,视野覆盖整个产品。 - 调整光圈使景深足够覆盖产品表面的高低差,尤其是按键和指示灯区域。 - 设置合适的曝光参数:对于LED指示灯测试,使用较低曝光避免过曝;对于显示屏内容检测,则需较高曝光确保细节可见。 - 执行白平衡校准,确保色彩还原准确,尤其对于多色LED指示灯的检测至关重要。 <center> <图片: 相机校准与调试示例>  </center> 2. **机械系统调试**: - 设置机械臂的运动路径,对准产品上各个功能按键的位置。使用示教模式记录每个按键的精确坐标。 - 调整按压速度和力度:通常按键测试使用0.5-1.0秒的按压周期,力度根据产品说明书调整(如智能手机按键约300g)。 - 进行重复性测试,确保机械臂能够多次精确返回同一按键位置,误差不超过0.1mm。 - 检查机械臂与产品的互动安全性,确保不会因过度按压损坏产品。 <center> <图片: 机械臂按键测试调试过程> _1747363040.jpeg) </center> 3. **时序控制设置**: - 配置触发信号链,保证按键按下后能及时触发相机拍照(典型延迟控制在50ms内)。 - 对于需要连续监测的场景(如按键后等待LED变化),设置相机连续采集模式,帧率不低于30fps。 - 建立机械动作与图像采集的时间关联表,明确每个测试动作后应在何时捕捉图像。 <center> <图片: 时序控制流程图>  </center> 4. **参考样本采集**: - 对功能正常的产品进行标准操作,采集一组标准响应图像作为参考。例如,每个按键按下后应有的LED状态、显示屏内容等。 - 可能的话,也采集一些典型故障状态的图像,如LED亮度不足、显示异常等,用于后续判断。 - 为每种状态建立图像参考库,包括正常与异常情况,以便后续算法比对。 <center> <图片: 参考样本图像组>  </center> 5. **系统整体校验**: - 执行完整测试循环,检查各环节协调性。 - 针对边界情况进行测试,如快速连续按键、同时按下多个按键等。 - 验证测试判断结果的一致性和准确性,必要时调整算法阈值和时序参数。 <center> <图片: 系统整体校验过程>  </center> 完成上述调试后,我们的硬件系统就具备了执行自动化功能测试的基本能力。接下来,我们将研究如何通过软件算法实现对功能状态的智能判断。 ##### (3)软件开发与算法实现 功能测试辅助系统的软件部分需要完成三个核心任务:**控制测试流程**、**分析视觉图像**和**判断测试结果**。下面是一个典型的功能测试系统软件架构和关键算法实现: ```python import cv2 import numpy as np import time from robot_control import RobotArm # 假设的机械臂控制库 class FunctionalTester: def __init__(self, camera_id=0, robot_config='config.json'): """初始化功能测试系统""" # 初始化相机 self.camera = cv2.VideoCapture(camera_id) self.camera.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) self.camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) # 初始化机械臂 self.robot = RobotArm(robot_config) # 加载测试参考图像和配置 self.reference_images = self._load_reference_images() self.test_sequence = self._load_test_sequence() # ROI定义:按键区域、LED区域、显示屏区域 self.roi_dict = { 'button1': (100, 100, 50, 50), # (x, y, width, height) 'button2': (200, 100, 50, 50), 'led1': (150, 200, 20, 20), 'screen': (300, 300, 400, 300) } def _load_reference_images(self): """加载参考图像库""" ref_images = {} # 加载各个组件正常状态的参考图像 ref_images['led1_on'] = cv2.imread('references/led1_on.jpg') ref_images['led1_off'] = cv2.imread('references/led1_off.jpg') ref_images['screen_menu'] = cv2.imread('references/screen_menu.jpg') # 可以继续添加更多参考图像 return ref_images def _load_test_sequence(self): """加载测试序列配置""" # 此处简化,实际可从JSON或数据库加载 return [ {'action': 'press_button', 'target': 'button1', 'expect': 'led1_on', 'roi': 'led1'}, {'action': 'press_button', 'target': 'button2', 'expect': 'screen_menu', 'roi': 'screen'} # 更多测试步骤... ] def capture_image(self): """捕获当前图像""" ret, frame = self.camera.read() if not ret: raise Exception("无法从相机获取图像") return frame def check_led_status(self, image, led_roi): """检查LED状态(开/关)""" x, y, w, h = self.roi_dict[led_roi] led_image = image[y:y+h, x:x+w] # 计算LED区域的平均亮度 gray_led = cv2.cvtColor(led_image, cv2.COLOR_BGR2GRAY) avg_brightness = np.mean(gray_led) # 根据亮度阈值判断LED状态 return avg_brightness > 100 # 阈值可根据实际环境调整 def check_screen_content(self, image, ref_image_key, screen_roi='screen'): """检查屏幕内容是否符合预期""" x, y, w, h = self.roi_dict[screen_roi] screen_image = image[y:y+h, x:x+w] # 将当前屏幕图像与参考图像进行模板匹配 ref_image = self.reference_images[ref_image_key] # 调整大小以匹配 ref_image = cv2.resize(ref_image, (w, h)) # 计算结构相似性指数(SSIM)或简单地使用均方差 diff = cv2.absdiff(screen_image, ref_image) diff_score = np.sum(diff) / (w * h * 3) # 归一化差异分数 # 判断差异是否在可接受范围内 return diff_score < 30 # 阈值可根据实际需求调整 def execute_test(self): """执行完整测试序列""" results = [] for step in self.test_sequence: # 1. 执行机械动作 if step['action'] == 'press_button': button_roi = self.roi_dict[step['target']] # 计算按键中心位置 button_center = ( button_roi[0] + button_roi[2] // 2, button_roi[1] + button_roi[3] // 2 ) # 机械臂移动到按键位置并按压 self.robot.move_to(button_center) self.robot.press(force=300) # 假设300g的按压力 # 2. 等待系统响应(可根据实际产品响应时间调整) time.sleep(0.5) # 3. 捕获响应图像 response_image = self.capture_image() # 4. 分析响应 result = False if 'led' in step['expect']: result = self.check_led_status(response_image, step['roi']) elif 'screen' in step['expect']: result = self.check_screen_content(response_image, step['expect'], step['roi']) # 5. 记录测试结果 results.append({ 'step': step, 'result': result, 'timestamp': time.time() }) # 汇总测试结果 return results def cleanup(self): """释放资源""" self.camera.release() self.robot.home() # 机械臂回到初始位置 # 使用示例 if __name__ == "__main__": tester = FunctionalTester() try: results = tester.execute_test() # 输出测试结果 for i, res in enumerate(results): print(f"步骤 {i+1}: {'通过' if res['result'] else '失败'}") finally: tester.cleanup() ``` <center> <图片: 功能测试系统软件界面示例>  </center> 上述代码实现了一个基本的功能测试系统,它能够: - 通过相机捕获产品状态图像 - 通过机械臂模拟用户对按键的按压操作 - 分析按压后LED指示灯的亮灭状态或显示屏的内容变化 - 将实际响应与预期比对,判断功能是否正常 值得注意的是,代码中的`check_led_status`和`check_screen_content`两个函数实现了两种不同的视觉判断方法: 1. **亮度阈值法**:用于检测LED指示灯的亮灭状态,通过计算区域平均亮度并与预设阈值比较来判断。 2. **图像差分法**:用于检测显示屏内容是否符合预期,通过计算当前图像与参考图像的差异度来判断。 在实际应用中,可能还需要更复杂的算法来应对各种情况,例如: - 对于闪烁的LED,可能需要连续采集多帧并分析亮灭频率 - 对于颜色变化的指示灯,需要分析HSV色彩空间而非简单亮度 - 对于显示文字的屏幕,可能需要OCR技术来读取和验证内容 系统的可靠性很大程度上依赖于参考图像的质量和判断阈值的设置。因此,在系统投入使用前,必须通过大量样本测试来优化这些参数,确保正常产品能被准确判定为合格,而功能异常的产品能被正确识别出来。 #### 3.5.3 技能图谱 ```mermaid mindmap root((功能测试辅助技能)) (设备操作技能) [多轴机械臂控制] [相机高速采集设置] [同步触发时序调整] [测试治具设计] (图像处理技能) [亮度与颜色分析] [图像区域比对] [动态状态捕捉] [OCR屏幕文字识别] (系统集成技能) [测试流程自动化] [机械与视觉协同控制] [结果分析与判定] [异常处理与报警] ``` <center>  </center> <图片: 功能测试辅助技能图谱> 这份技能图谱概括了实现功能测试辅助系统所需的核心能力。在设备操作层面,需要掌握**多轴机械臂的编程和控制**以模拟人工操作,熟练设置相机的**高速采集参数**以捕捉瞬时状态变化,精确调整**同步触发时序**确保在关键时刻获取图像,以及设计专用**测试治具**固定和定位待测产品。在图像处理方面,需要应用**亮度与颜色分析**技术判断LED状态,使用**图像区域比对**算法验证显示屏内容,开发**动态状态捕捉**方法监测闪烁或变化过程,并能通过**OCR技术**读取屏幕上的文字信息。在系统集成层面,要能够实现测试流程的**完全自动化**,协调**机械与视觉系统**的精确配合,开发**结果分析与判定**算法,以及建立**异常处理与报警**机制,确保测试过程的稳定性和可靠性。 #### 3.5.4 典型应用 * **智能手机功能测试** * 在智能手机生产线上,需要验证每部手机的按键、触摸屏和显示功能是否正常。视觉辅助测试系统使用精密机械手指模拟用户按压实体按键,同时相机捕捉屏幕响应,验证是否正确显示了预期内容。 <图片: 智能手机按键功能测试示例> <center> _1747363078.jpeg) </center> * 系统还可以检测按键的触感反馈(通过观察按键按下和弹起的过程)以及屏幕亮度和色彩还原是否符合规格。 * 这种全自动测试可以取代传统的人工检查,每部手机的完整功能测试时间从人工的几分钟缩短到自动化的几十秒,大幅提高生产效率。 * **家电控制面板检测** * 家用电器(如洗衣机、微波炉)的控制面板通常包含多个按键和LED指示灯。测试系统使用机械臂按顺序按下各个功能键,同时相机监测LED指示灯的亮灭状态和显示屏上的模式变化。 <图片: 家电控制面板功能测试示例> <center> _1747363146.jpeg) </center> * 对于旋钮式控制器,机械臂配备特殊末端执行器可以精确旋转到不同档位,视觉系统则验证相应指示灯或显示内容是否正确切换。 * 此应用可以100%检验每台家电的用户界面功能,避免出厂后因操作面板问题导致的用户投诉和产品召回。 * **电子仪器校准验证** * 在精密电子仪器(如示波器、信号发生器)的生产中,需要验证各功能按键的操作是否正确触发对应功能,以及显示屏是否准确显示测量结果。 <图片: 电子仪器功能校准测试示例> <center>  </center> * 系统将按预设程序操作仪器面板,执行一系列测试操作,同时分析显示屏内容,确认测量值是否在公差范围内。 * 这种应用不仅验证了按键功能的正确性,还间接验证了产品的核心功能性能,是功能测试与性能测试的结合。 > 思考与练习: > > 1. 当测试对象为触摸屏产品(如平板电脑)时,机械臂如何精确模拟多点触控手势(如缩放、旋转)?尝试设计一种能适应不同触摸屏产品的通用测试方案。 > 2. 如果被测产品的LED指示灯有多种颜色和亮度级别,系统该如何通过视觉方式精确区分这些状态?提示:考虑HSV颜色空间分析和亮度校准技术。 > 3. 在批量测试中,如何通过视觉系统自动识别不同型号的产品,并自动选择对应的测试程序和参考图像?这对提高生产线的灵活性有何意义?
ent
2025年5月20日 14:23
转发文档
收藏文档
上一篇
下一篇
AI问答
手机扫码
复制链接
手机扫一扫转发分享
复制链接
AIChat
代码在线测试
AI问答
你好,我是AI阅读助手,我可以回答与文档内容相关的内容,帮助你快速理解文档,以下是我归纳的几个核心问题,可供您参考:
发送
输入
运行
输出
Markdown文件
分享
链接
类型
密码
更新密码