余昊澄,邱浩,刘公致
(杭州电子科技大学电子信息学院,浙江杭州,310018)
随着计算机图像处理技术和高性能终端处理器的发展,机器视觉的研究已经成为热门领域。机器视觉是用处理器和摄像机代替人眼,将数字图像的像素信息进行处理后,做出测量和判断,被广泛应用于工业、农业、制药等领域。OpenCV算法是由Gary Bradsky在英特尔创立的,该算法的正式版本是在2000年发布的。2005年OpenCV算法在DARPA大战中获得冠军,随着时间的推移,OpenCV算法应用的场景越来越多,从开始的用于汽车开发,到现在的计算机视觉,不仅如此,OpenCV算法支持多种语言,如C++、Python、Java等,还可以在不同的系统平台上使用[1]。本系统使用上述技术,设计了一种基于互联网的摄像测量系统。
系统构成介绍:该测量系统主要有树莓派3B+、TPLINK互联网交换机、HIKVISION网络摄像头模块等部分构成,如图1所示,A、B两个摄像头同时对蛋白进行摄像,并将视频流信号通过交换机传输到终端树莓派处理器上,最终再在处理器上对所获取视频流进行信息获取和处理,从而得到单摆长度和角度。各模块介绍如下:
图1 基于互联网的摄像测量系统的整体结构
本系统采用海康威视的mini PTZ摄像头来获取视频流,网络高清mini PTZ摄像机是集网络远程监控功能、视频服务器功能和高清PTZ摄像机功能为一体的新型网络PTZ摄像机。PTZ摄像机安装方便、使用简单,不需要繁琐的综合布线。
PTZ摄像机内置小型WebServer服务器、网络视频服务器、解码器及机芯,性能稳定可靠。PTZ摄像机除具有预置点、扫描等基础功能外,还基于以太网控制,可实现图像压缩并通过网络传输给不同用户;基于NAS的远程集中存储,可大大方便数据的存储及调用。PTZ摄像机支持动态调整编码参数,包括TCP/P、PPPoE、DHCP、UDP、MCAST、FTP、SNMP等协议;支持Onvif、CGI、PSIA等开放互联协议。PTZ 摄像机内置云台,采用精密电机驱动,设备反应灵敏、运转平稳,在任何情况下,实现图像无抖动,非常有利于线上利用互联网直接对摄像头所捕捉区域进行实时控制。
树莓派3B+(Raspberry Pi 3ModelB+),拥有运行在1.4GHz的处理器,双频2.4GHz和5GHz无线WiFi,蓝牙4.2/BLE,更快的以太网和64位四核处理器,有着较高的性能和较为完善的交互功能[2],具备PC的大部分基本功能,它只需要接通电视机或者键盘,就能够执行文字处理与玩游戏等多种功能,有低能耗、移动便携性、GPIO等特性。利用其GPIO,可以将其当作单片机来使用,除了键盘鼠标等支持USB传输信号的外设以外,还可以利用GPIO口和自制的外部电路再结合程序对GPIO口的控制可以实现更多更丰富的人机交互。
本系统使用TP-Link的交换机,型号为TL-SG1005M,该交换机是塑壳5口千兆以太网交换机,提供5个10/100/1000M自适应RJ45端口,所有端口均支持线速转发及MDI/MDIX自动翻转功能,即插即用。端口性能方面,提供5个10/100/1000M 自适应RJ45端口,所有端口均可实现线速转发;每端口均支持MDI/MDIX自动翻转及双工/速率自协商;支持IEEE 802.3x全双工流控和Backpressure半双工流控[3]。
1.4.1 激光笔摆长L测量方法
1.4.2 激光笔摆角测量方法
基本公式:角度θ= arctan(a/b),通过两个摄像头协同工作,测量两个正交方向对单摆正视图x轴坐标位置差,即a和b,根据公式得到角度,如图2所示。
图2 单摆系统摆角测量方法
如图3所示,本系统先是将两个海康威视的摄像头HIKVISION放置于图1中的A、B两点的位置,当两个摄像头开始工作时,会将两个摄像头所获取的视频流通过网线传输给同一个网络交换机,为了方便单点的检测,该系统在每个摄像头节点处都放置了一个树莓派用于单节点的图像显示,以确保传输至网络交换机的数据没有问题。之后网络交换机会将来自两个摄像头的视频流数据通过同一条网线一同传输给终端树莓派,以便之后的图像处理和结果运算。此外每个树莓派都会配置显示器、鼠标键盘等外设,方便人机交互。
图3 硬件结构图
如图4所示,本系统是在树莓派的Python环境下,利用OpenCV对摄像头视频流进行获取和处理。事先在三台树莓派上安装了可操作的树莓派系统。
图4 系统流程图
在软件设计中,首先对IP进行访问和获取摄像头图像,两个摄像头通过双进程方式同时协同运作,减少两个摄像头之间的运行时间差[4],多线程类似于同时执行多个不同程序,多线程运行有如下优点:使用线程可以把占据长时间的程序中的任务放到后台去处理;程序的运行速度可能加快;在一些等待的任务实现上如用户输入、文件读写和网络收发数据等。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。Python3 通过两个标准库thread和threading提供对线程的支持,由于thread只是为了兼容Python2的thread模块,本系统使用threading模块实现多线程。
之后对图像进行高斯平滑滤波,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。减小背景中微小物体和光照变化的影响,主要是利用分布加权卷积距离待处理像素越近的像素对输出影响越大的物理意义。
之后主要利用背景差分的方法将运动的像素确定下来[5]:首先建立一个背景图像,也就是取背景,计算当前输入图像和背景图像的差分,数学表达式如下:,其中It是framet,即当前帧图像,Bt是背景图像,设定一个阈值Th,根据 Δt和Th的大小关系判断像素属于背景还是移动物体:
在数据测量的过程中,发现本系统存在受到周边光线影响的问题,为了解决这一问题,本系统采用了IIR滤波的方式来减少环境光影响所带来的变化,以提高系统的光照鲁棒性,IIR滤波是使用当前帧对背景图像进行更新:B(t) =α·I(t)+ (1 -α)B(t- 1),其中α是当前帧所占的比重,通过调节α的值可以改变背景的更迭速率。
再通过闭运算找出目标物体,闭运算主要是对图像先进行膨胀运算,再进行腐蚀运算,用来补充小的裂缝和弥合狭窄的断裂和细长的沟壑并且不会影响原来前景的形状大小[6、7]。
最后则是确定XY坐标,根据XY坐标拟合目标物体坐标曲线,通过曲线的峰峰值之间横坐标的距离得到摆动周期,再根据公式得到绳长,在计算角度时,通过两个摄像头获取的波峰和原点的坐标差,如图5所示是拟合的类简弦运动图像,获得图2中所示的一个直角三角形中的两个直角边,再根据三角函数得到角度。
图5 摆幅的正弦曲线
按照题目要求,对基于互联网的摄像测量系统进行测试,测试内容及结果记录如下:
L测量结果如表1所示(单位:cm)。
表1 长度测量数据
θ测量结果如表2所示(单位:度)。
表2 角度测量数据
以上单次测量均可以在较短的时间内完成。
从表1、表2测试结果分析可知,本系统对于目标物体及其位置识别较为精确,测量过程速度较快,在测量L的时候,由于激光笔中心会改变摆长,所测得的值和实际值会存在一定误差,所以测得的L必然会偏大,利用第一次测量的结果进行误差二阶拟合,从而得到一条如图6所示拟合曲线,来展示真实值和数量值之间的关系。
图6 长度拟合曲线
将该拟合曲线值放到最终的输出端,可以大大减小误差,从而得到较为精准的测量值。
在测量角度时,由于放置将激光笔者本身存在的一些因素(如投放时,给了激光笔横向的力)从而使得激光笔不能做正常的单摆运动,同时也会产生误差。
本文的制作可以利用HIKVISION网络摄像头顺利地将网络传输到交换机上并且传输到终端设备,采样用图像处理的方法,成功地实现了单摆的识别,测量出其坐标和运动周期,从而计算出单摆的长度和摆动角度,测量结果精度也比较高。该系统可以应用于诸多类似于教学实验的监测当中[8],上文中的闭运算和IIR滤波更新背景等算法可以使得系统有着较高的鲁棒性,来抵御外界环境的干扰。