基于QT的工业边缘侧视觉检测系统人机协同交互方法*
2021-01-22高文祥琚长江聂佳李倩郭丽君
高文祥 琚长江,2,3 聂佳 李倩,2 郭丽君,2
(1.上海电器科学研究所(集团)有限公司,上海 200063;2.上海市智能电网需求响应重点实验室,上海 200063;3.国家能源智能电网用户端电气设备研发(实验)中心,上海 200063)
0 引言
目前,国内外企业智能制造是继自动化制造之后更进一步的制造业形态,其核心是数字化,网络化,智能化。视觉检测技术是实现智能制造的一种实现方式,它为产品的检验、工件加工和装配自动化提供了一种不需要人员操作、自动检测产品缺陷、即时反馈检测结果的解决方案。
本文即对视觉检测技术应用于智能制造中所产生的一些问题提出了一种基于QT的工业边缘侧视觉检测系统人机协同交互方法。
1 智能制造视觉检测系统概述
视觉检测技术可以用于智能制造的产品检测生产线,典型场景是当输送线把产品输送到需要装配或检测的工位时,通过视觉检测算法利用摄像头拍摄的产品图片去判断此产品是否合格,该系统示意如图1所示。
在人机交互设备显示的图片都经过了视觉检测算法处理并被标注了算法处理结果。此系统部署于产线运行时,在运行初期,视觉检测算法存储的针对该产品检测数据很少,需要人工对于产品的检测结果进行确认或干预,此过程为辅助视觉检测算法建立检测数据模型。
操作人员可以使用鼠标、触摸屏、按键在人机交互设备上进行操作,操作包括更改算法检测结果、指出产品缺陷位置、选择缺陷种类等。
根据上述需求,人机交互设备需要不仅需要支持较高分辨率的显示还需要能够执行视觉检测算法、支持对画面的重绘,最终还需要将人工辅助的结果上传至远程服务器,帮助远程服务器对人机交互中的视觉算法进行优化。
视觉检测算法的运行依赖于多个库,如Opencv、Pytorch、Python解释器,大多数传统的人机界面不支持对系统库进行重新安装,所以一般会将这些库安装于X86或ARM架构计算机设备中,所以在此使用QT框架设计,不仅提供了一种较为简洁的人机交互界面,同时由于QT有着强大的可移植性,支持目前主流的操作系统平台,如Windows,Linux桌面端/服务端/嵌入式。
图1 智能制造视觉检测系统示意图
2 基于QT技术的视觉检测控制系统人机交互界面的实现
2.1 界面软件整体设计概述
采用QT框架面向对象的设计方式对人机界面进行开发设计,界面设计如图2所示。
图2 交互界面设计图
本次设计中人机交互界面的总体布局基于Stacked Widget部件,主要进行了如下设计:(1)用户界面设计;(2)图片的显示与重绘;(3)鼠标功能的重载;(4)开启线程接收视觉算法处理好的图片信息。
2.2 用户界面设计
图3 系统配置信息界面设计流程
用户界面主要用于对视觉检测系统的配置,配置内容包括当前检测产品的种类、视觉检测系统的网络地址、检测结果保存的目录路径等。这些参数保存在视觉检测系统的轻量级数据库SQLite[1]中,修改QT工程的.pro文件,添加SQL模块。设计流程如图3所示。
2.3 图片显示与重绘
图片的显示与重绘主要用于系统运行界面,显示拍摄到的产品图像,这些图像都经过了视觉检测算法的处理因而存在算法给予的标注信息。(标注信息是指该图片是否存在“缺陷点”,如果存在“缺陷点”,则该信息需要包含“缺陷点”在图片坐标系中的坐标数据)。
2.4 鼠标功能重载
鼠标功能的重载主要应用于系统运行界面中,在系统运行界面中我们对算法处理后的图片进行了显示,显示部件为QLabel类,但是当视觉检测算法存储的针对目前检测产品检测数据少,需要人工对于产品的检测结果进行确认或干预时,我们需使用鼠标在QLable部件上拖拽进行重绘图像,示意图如图4所示。
图4 鼠标功能重载示意图
图3中,我们重新定义了鼠标的功能,使得鼠标在QLabel部件中拖曳出一个矩形,在鼠标放开后需要保存最终形成的矩形信息。
2.5 矩形左上角坐标以及矩形长、宽
通过矩形左上角坐标以及矩形的长和宽可以记录了一个“缺陷点”,并存在系统中。我们可以如此绘制多个“缺陷点”,用来辅助视觉检测算法进行标定,优化其模型。
使用QLabel[2]的MousePressEvent、MouseMovement Event、MouseReleaseEvent可以实现鼠标按下、移动、放开的动作。这些函数都是继承于QObject的虚函数,需要在QLable部件中重写。这样我们在使用QLable部件使用鼠标时能够具备抽象描述出矩形的功能,再使用QLabel类的paintEvent函数进行绘制,最终在QLabel上实现了画出一个矩形。
2.6 后台线程接收模块设计
多线程技术主要应用于GUI程序开发,这对于图形界面开发的程序尤为重要,当一个操作耗时很长时,整个系统都会等待这个操作,程序就不能响应键盘、鼠标、菜单等操作,而使用多线程技术可将耗时长的操作置于一个新的线程,避免以上问题。
QT多线程实现的主要思想就是利用Qt的事件驱动特性,将需要在子线程中处理的业务放在独立的模块(类)中,由主线程创建完该对象后,将该对象移交给指定的子线程,同时在主线程中使用信号-槽设计,连接主线程发出的信号至该对象的槽函数,注意这里的槽函数即为该对象的实际处理业务的模块(类)。在连接函数connect中,指定connect函数最后一个参数为:QueuedConnection,即可对不同QWidget对象发送信号。
经测试,视觉检测算法运行在处理器为Intel Celeron 1.99GHz,2GHz、内存为8G、基于X86的WIN10操作系统运行时间为3s左右,如果不使用多线程技术,则界面可能会等待算法输出结果约3s钟,会有明显的冻结现象,此举解决了当前显示画面在等待算法输出时会出现界面冻结的问题。
3 结语
本文所介绍的基于QT框架实现的应用于工业边缘侧的视觉检测人机交互设计方法,为智能制造中广泛应用的视觉检测检测提供了一种可视化的环境,也有别于其他传统的人机交互界面设备,为视觉检测算法收集产品缺陷模型提供一种解决途径。目前基于该方法设计的人机交互界面已经可以部署在工控机中用以辅助视觉检测算法进行优化,在电机生产线上实验运行取得了良好的效果。