0 引言
在工业上的视觉处理任务中,工业相机作为视觉任务的起点,起到采集图像数据的作用,肩负重要的职能。工业相机的款式多种多样,其中,区分它们的种类重要的一点就是相机接口标准。按照接口标准不同,工业相机常用的数字接口有GigE、Camera Link、USB3.0、CoaXPress 等类型,不同相机接口在数据传输方式、传输速度、可靠性等方面并不相同,其中GigE 接口可以满足廉价的长距离高传输量的数据传输,相比于其他传输效果性价比更高,因此在工业上得到广泛应用。但GigE 相机相比于其他类型结构不同,无法被常见的通用调用指令所使用,需要安装专业的驱动程序,且对硬件有特殊的要求。为了实现视觉处理功能,需要将工业相机连接至计算机主机上,对软硬件进行设计与配置,以达到传输数据与指令的效果。这一部分的驱动程序一般由厂家提供[1]。
将相机与计算机连接后,还需要将图像数据导入控制软件中,从而自动获取图像数据,进行视觉处理,同时为了根据实际情况进行修正,还需要实现让控制软件输出控制指令和参数到工业相机的职能。由于GigE 相机在传输数据方面的特殊性,不同厂家需要自己设计自己的连接端口,这使得各常见提供的连接程序各不相同,同时由于多数情况下工业会采用C 或C++ 程序来编写控制软件,一般厂家对GigE 相机连接 程序的软硬件方法虽然会进行开发,但是在实际操作中缺少详细的说明文档以及足够的开发实例[2]。
本文介绍了使用海康GigE 相机与 程序进行连接使用的项目经验,可以为同类型的任务提供参考。
1 海康GigE相机的硬件连接与驱动配置
1)对于GigE 相机来说,其特殊的接口结构使得其在硬件连接方面具有一定优势,具体的硬件连接方案有两种:
使用1 根电缆线将GigE 相机与网络交换机或者其他有网络交换机功能的设备连接起来,供电由交换机进行,然后将交换机与上位计算机连接,进行数据传输。这样做的好处是相机只需要连接一根线就可以同时满足供电和传输数据的要求,当相机安装在复杂的现场时,单线传输能够有效降低布线成本,提高系统的稳定性。另一方面,单线传输的方法可以将多个相机连接在同一个交换机上,再由交换机对主机进行沟通,扩张接口比较容易,缺点是该方法对电缆线的使用要求较高,需要能够同时完成两种传输要求的电缆线,且一台相机使用的可用带宽有限,约为125 Mbyte/s;
2)使用一根电缆线连接GigE 相机与计算机用于传输数据,再使用一根电源线连接GigE 相机与电源,此种连接方式的成本要求低,对电缆的可靠性要求更低,传输数据的带宽不会受到严格限制,但增加一根线提高了布线难度,降低了可靠性。
由于本项目对连接线的布线要求不高,出于节约成本的考虑,本次项目中采取了两根线连接GigE 相机的方案。
除了与计算机主机的连接,还要考虑相机本身的工作问题,为了保证相机的正常工作,一方面需要保证电源的安全稳定供应,另一方面需要配备充足的光照,且尽量不要受到外界光照过强的影响。在传输方面,传输电缆需要保证至少能够传输千兆大小的数据,从而使得图像数据能够稳定传输。
为了使用GigE 相机,需要在海康官网下载对应的驱动程序并进行安装,其中不同客户端所使用的安装程序是不同的,且安装方式有一定差别。需要注意的是Windows 客服端的驱动程序在安装时会自动设置网卡为巨帧传输,Linux 系统则需要自己进行设置,可以选择在每次使用之前进行设置,也可以直接对常用网卡进行永久设置。
图1 相机连接图
安装后按照说明书配置IP 地址,并使用海康提供的控制软件进行调试,保证能够顺利连接工作。具体的连接过程需要经过如下阶段:
1)确认连接。对相机连接,首先需要确认物理连接成功,此时需要先查看相机上的指示灯,如果其由红色变为蓝色,说明电缆和电源线正常连接,否则需要检查连线;
2)设置IP 地址。如指示灯没有问题,开始设置计算机中与相机连接的本地连接端口,将其IP 设定为固定值。之后打开MVS 控制软件,等待列表上出现对应相机。首次连接需要较常的时间,之后再使用连接会很快。出现相机后,此时应当显示黄色三角,意为IP 地址不属于同一网段,不能正常。这时双击相机即可修改相机IP,将相机IP 设置为同一网段的不同IP 地址即可。如果连接顺利,相机将变为可用状态;
3)连接调试。当相机为可用状态时可以进行调试了。双击相机,即可正常打开相机界面,通过控制界面可以完成打开相机、设置相机参数等任务,以检测是否能够正常。需要注意的是相机默认设置曝光时间为0,因此刚打开时相机画面是漆黑的,设置一个正常的曝光时间即可。使用控制软件能够较为方便地测试相机状态,建议在每次对相机连接参数进行修改(如IP 地址)以及在新计算机连接相机时先使用控制软件进行测试。
2 海康GigE相机的程序连接使用
连接调试完成后,接下来就可以使用Python 程序调取运行相机了。GigE 相机的调取无法通过常用包如opencv 完成,因此要依赖海康专门开发的用于调取运行Gige 相机的Python 包进行连接使用。海康给出了一些简单的实例程序演示如何利用Python 包中的函数使用相机,海康给出的实例程序中,调取并使用相机要经过如下阶段[3]:
2.1 发现并连接设备
程序首先需要检索并连接设备,这个阶段首先是找寻可连接的设备,输出可连接设备的信息,之后根据输入的需要连接的设备IP 进行连接。海康给出了几种连接方式,包括直接使用IP 连接,或者查找同一网段下可用于连接的相机,根据查找到的参数连接。
2.2 打开设备并设置参数
当确定了连接的设备后,接下来为了打开相机,首先要创建相机实例和对应的句柄,这是使用程序对相机进行操作的必要载体,1 个相机实例同时只能打开1 个相机。将相机实例与相机绑定后,就可以打开设备。为了获取需要的图片数据,还需要对相机的参数进行设置,实例程序中给出的调整包括探测网络最大包大小,设置触发模式和获取数据包大小。其中获取数据包大小对后面的获取图像数据有很大帮助。
2.3 获取图片数据
GigE 相机获取图片数据的方式是取流,即向相机发送信号,获取最近一帧的图片数据传回。为了获取图片数据,首先要打开取流,此时相机才开始启动。之后再获取所需的数据,主要包括两部分,一部分是图像数据的本体,另一部分是图像数据的参数,包括类型大小等。直接获取的图像数据是1 个单一的矩阵数据,如果要显示出真实数据需要根据参数信息对其进行转换。获取图像数据的方式分为主动取流和被动取流两种,主动取流会向相机发送信号,之后获得传回的下一帧数据,而被动取流不发送信号,被动接受下一帧数据。实际使用起来效果差距不大。实例还提供了使用句柄进行连续取图片的方法,可以提高获取图片的速度,连续取图片就可以达到视频的效果。
2.4 停止获取并关闭设备
使用完相机后,最后需要关闭相机,如果对相机直接采用断电等操作,会使一部分已经设置过的参数直接失效,下次需要重新设置。关闭设备主要分为三步,首先停止取流,不再获取图片,之后关闭设备,最后如果使用了句柄还需要销毁句柄。
示例程序仅仅是对功能进行一定展示,为了实际使用需要在原有的实例基础上针对项目要求进行改进。要注意的是使用相机需要调用海康提供的包文件,这些包文件可以移动至任意位置。通信程序依赖于包文件,需要对包文件进行调用,比较简单的方法是将程序与包文件以与实例程序类似的关系放置,调用起来比较简单。在调用了包文件后,主要改动如下:
1)连接阶段将IP 地址确定为设备使用的地址进行连接。可以使用事先设定好的Ip 地址进行连接,也可以读取可连接设备的IP 进行连接;
2)设置参数阶段的改变。在设置参数阶段,比较重要的改变包括对曝光时间及一些必要参数的预设值,以及改变图像的输入格式。为了获得所需的图像,需要对相机的一些参数进行设置,如白平衡、曝光时间、亮度等。海康提供了修改参数的函数,但其接口比较简单,不方便使用,故需要对其编写专门的函数,以提高调用速度。改变图像的输入格式更为重要。预设的图像格式为黑白图像,往往不能满足项目要求,具体图像要求要根据项目需要来设置。由于图像在不同格式下的数据大小和意义不同,对图像数据的操作也需要根据输入格式进行对应的改变;
3)获取所需的图片。示例程序给的处理图片的功能并不完善,为了获取所需的图片需要对其进行改造。首先是添加图片转换的模块,新得到的图片数据并没有进行转换,首先要将其转换成常见的图片格式,这一情况下要根据所读取的图像类型而定,根据官方提供的图像类名对应表,根据相机结构体读取出的实际类型,对图像类型进行对应的格式变化。为了方便接下来的处理,还应在图像转换后添加格式替换的函数,转换为统一的格式。获得对应的图像后,要根据实际需求进行操作,最常见的操作就是保存图片和展示图片,这些操作使用常用的包即可完成,为了更好地使用图像,可以在调用时对格式大小进行一定调整。为了完成实时操作,还需要调用上一阶段改变系统参数的函数,如此做到实时检测调控。如果需要对获取图片的情况做到实时预览,需要使用句柄创建进程进行操作。需要注意的是相机采集图像的频率与获取图片没有关系,因此同时使用多个线程获取图片并不会影响到相机的使用效率。
4)关闭设备的过程不用调整太多,但是如之前使用了句柄方法实现多线程读取照片的功能后,应在关闭阶段加入结束句柄的语句,做到安全退出。在使用相机时,还有一些要点需要注意。
1)句柄使用关闭后应当重启再使用,否则可能发生未知的错误;
2)Windows 系统和Linux 系统中海康提供的包文件不同,不能混用,但可以调用相同的函数,因此在不使用冲突函数的情况下程序可以在两端同时使用。海康的Linux 示例程序中使用了Windows 不提供的包,这一部分在Window 上是不能使用的。如果需要在另一个平台上使用程序,可以使用一些不会造成冲突的函数,之后替换掉对应位置的包文件,即可正常运行。或者可以选择调用绝对位置的包,以避免不互通的问题。
3)有的包函数会输出一些不想要其输出的信息,可以进入对应的包函数中进行更改。
4)有时候当相机在同一台主机上连接后换一个接口连接,在程序中可能会出现两个相机同时出现的情况,这种状况下只需要连接第一个编号的相机即可,或者根据所连接的端口来判断应当连接哪一个相机。
在程序设计完成后,对该方法进行了测试,程序能够完成之前所设计的全部功能,且之后使用该方法多次获取了3 000 多张图片,该程序成功获取了图片,达到了预想的处理速度。
图2 图像采集现场
3 结束语
本文设计了海康GigE 相机使用Python 程序的一种连接使用方法,该方法调用海康GigE 相机,能够完成获取图像并显示图像,修改相机设置等功能,在实际测试过程中能够较好的完成任务,在资料较少的情况下,对于海康GigE 相机使用Python 程序调用有一定的借鉴作用。
该研究对于多线程图片的获取、多相机同时调用、多线程同时使用同一相机等高级操作还比较缺乏,在之后的研究中,还需要继续研究更好更快地调用方式,提高获取图像的速度性能。
参考文献:
[1] 张仰月.智能相机应用软件设计及GigE Vision协议实现[D].南京:南京邮电大学,2019.
[2] 阮晖雄.GIGE工业CIS相机关键技术的研究[D].成都:电子科技大学,2022.
[3] 罗潇磊.基于的轻小型相机研究[D].上海:中国科学院研究生院(上海技术物理研究所),2016.
(本文来源于《电子产品世界》杂志2023年8月期)
相关文章