基于嵌入式树莓派和OpenCV的运动检测与跟踪系统

2017-03-18 06:33吴泽民
电视技术 2017年2期
关键词:树莓图像处理嵌入式

韩 宇,张 磊,吴泽民,胡 磊

(解放军理工大学 通信工程学院,江苏 南京 210007)

基于嵌入式树莓派和OpenCV的运动检测与跟踪系统

韩 宇,张 磊,吴泽民,胡 磊

(解放军理工大学 通信工程学院,江苏 南京 210007)

为了适应运动检测与跟踪系统小型化、高效化的现实需求,将图像处理的算法移植于小巧灵活的树莓派2代B型,实现了对运动物体的实时检测与跟踪。基于openCV框架下,运用Python语言编程实现了计算帧差和二值化等图像处理要素,并用矩形框将运动物体标记。实验结果分析表明,该系统对光照条件等环境变化有一定的自适应能力,可较好地完成对运动物体的检测与跟踪。

运动物体检测跟踪;树莓派;嵌入式系统;二值化;图像处理;环境适应

伴随着嵌入式系统计算能力的不断提高,强大的图像处理分析算法完全可以在灵活小巧、机动性强的嵌入式系统上运行。基于嵌入式系统进一步实现的计算机视觉完全可应用于安防领域和边海防等军事领域的实时监控。

实时的运动检测和跟踪技术是一项融嵌入式系统、图像处理、计算机视觉、网络传输等多学科的技术。所谓实时的运动检测与跟踪技术就是将实时采集的图像信息进行检测,提取有用信息,识别目标参数特征,过滤噪声并锁定目标,追踪目标的运动轨迹等一系列处理的技术,并为下一步的深入分析提供数据基础,为目标的行为分析奠定基础。现大多数运动检测和跟踪系统多基于PC机等大型且计算能力超强的设备,不仅没有有效利用设备的计算能力,相比于嵌入式系统略显笨拙且不能灵活部署。有些场合的监控系统要求“隐蔽高效”,这正是小型的嵌入式系统发挥作用的舞台。为此,本文基于灵活且计算能力可观的树莓派2代B型,在openCV框架下移植合适算法,实现实时的运动检测与跟踪。

1 嵌入式系统平台搭建

1.1 相关开发基础

编程工具方面,Python是一种面向对象、解释型的计算机程序设计语言[1],语言简洁清晰,比起C语言更适合于初学者,在树莓派平台安装Python2和Python3两个版本,本文采用Python2.7.3作为开发语言。

图像处理方面,OpenCV轻量级而且高效。它是由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法,本文拟采用openCV及其Python接口完成算法移植和软件系统搭建。

嵌入式平台方面,本文先后采用树莓派1代B型和树莓派2代B型,采用树莓派1代B型运行论文经典算法时,CPU利用率为100%,系统容易出现死机。因此考虑计算能力提高了约4倍的树莓派2代B型,树莓派2代B型运行论文经典算法,CPU利用率仅为25%左右,为算法的改进预留了充分空间。

1.2 嵌入式系统平台搭建

1.2.1 开发平台搭建

如图1所示,硬件包括开发PC主机一台、树莓派2代B型一个、摄像头模块一个(PiCamera)、2A电源适配器、对接网线、TF存储卡、串口调试线、HDMItoVGA转接器、VGA显示器一台、USB键盘鼠标。树莓派USB接口外接USB鼠和键盘,通过HDMItoVGA接口连接到显示屏显示图形界面[2]。

图1 树莓派的硬件平台(照片)

1.2.2 树莓派的连接方式

基于PC的 Windows主机可通过putty实现两种方式连接树莓派:串口线连接和SSH登录。串口线连接时输入连接串口号和比特速率(115 200 bit/s),SSH登录时输入树莓派的IP地址,并将端口号设为22。树莓派的嵌入式Linux和Windows之间的文件交互可以通过FileZilla快捷实现。FileZilla通过SSH附带FSTP功能,利用此功能可以实现电脑和树莓派之间的文件互传,使用FileZilla在“快速连接“中输入:主机:sftp://169.254.255.253(使用自己树莓派的IP地址)、用户名和密码采用默认的pi/raspberry。

1.2.3 树莓派的图形界面显示

树莓派的图形界面显示有两种方式:

1)通过以太网网线,PC机上可用tightVNC客户端启动树莓派的虚拟图形界面,这种方式能够让树莓派共享PC机的屏幕、键盘、鼠标等资源,避免了在树莓派上外接扩展屏幕、键盘鼠标等配件操作,同时也方便PC机和树莓派之间的文件互传。VNCserver在树莓派上运行需要占据一定的CPU,增重了系统载荷,可能影响到改进算法的空间。如果树莓派采集的数据量较大,网口的传输速率是否够用也是个值得考虑的问题。

2)通过HDMItoVGA器件将树莓派和显示屏连接起来,在树莓派开机后输入startx命令启动图像界[3]。此种方式可以释放启动虚拟图形界面的CPU占有率,为算法改进让出了空间。值得提醒的是树莓派的端口无法驱动此HDMItoVGA器件,需要独立供电。

1.2.4 树莓派安装Python和openCV

在安装过程中,安装必要的图像I/O包和视频I/O包,这样才可以读入图像和视频文件。安装GTK开发库,这个库用来构建GUI,同时OpenCV中的highgui库也需要它来在屏幕上显示图像。在创建虚拟的计算机视觉环境之后进行Python的安装。这里也需要安装NumPy,因为OpenCV的Python接口通过Numpy的多维数组来表示图像[4]。

2 基于树莓派的实时检测和跟踪系统的开发

系统开发总体框图如图2所示 系统开发总体可分为3个模块,即实时图像采集模块、图像处理模块和结果输出模块。图像处理模块是本系统的核心所在,包括初始化帧、运动目标检测、目标锁定和追踪三个方面,结果输出模块将文字、时间的状态信息添加之后,将结果写入硬盘和显示屏输出。

图2 系统开发总体框图

2.1 实时图像采集模块

图像采集的摄像头模块采用树莓派原装Raspberry Pi camera模块,具备500万像素的ov5647镜头,静态图片分辨率为2 592×1 944。可以使用raspistill命令拍摄图像、raspivid命令录制视频,本系统中使用函数调用Raspberry Pi camera模块进行实时图像的采集并可用cv2.imshow将实时采集的图像显示在屏幕上。

2.2 图像处理模块

图像处理模块算法主要包括两个方面的工作。

1)建立运动物体检测的背景

系统需要适应不同光照、地形等环境因素的影响,基于帧差的图像处理算法对背景提出了较高的要求,即背景需要有自适应环境的能力,能够随着时间、光照等环境因素做出合适的改变。为了实现这个目的,综合树莓派的计算能力考量,本系统通过加权平均初始化帧的方式以达到动态调整背景的目的。采用函数cv2.accumulateWeighted(src, dst, alpha[, mask]),计算方式为

dst(x, y)← (1-alpha)×dst(x, y)+alpha×src(x, y) if mask(x, y)0

这里alpha为当前帧的权重,使用了之前帧的加权平均值配合当前帧工作,可以动态地调整背景。

2)运动物体的检测和跟踪

如图3所示,算法进行运动物体的检测和追踪主要包括以下几个步骤:

(1)计算帧差:图像处理的基础,后续的算法在此步的基础上进行。

(2)转灰阶图像:彩色图像包含红(R)、绿(G)、蓝(B)三个通道,图像的彩色与否对于运动的检测和追踪无任何影响,却会增加系统处理的复杂度,因此采cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)函数,将BGR格式的彩色图像转化为灰度图像,减小系统冗余。

(3)高斯模糊:需要指定高斯核的宽和高(必须是奇数),以及高斯函数沿X,Y方向的标准差。本文指定了X方向和Y方向的两个标准差都是0,那么函数会根据核函数的大小自己计算[5]。高斯模糊可有效过滤掉可能被误认为运动检测目标的高斯噪声,避免一帧图像中出现“假阳性”目标。

(4)二值化图像:在图像转成灰阶之后,力求更简洁的图像以分割前景,经过二值化的图像只剩黑、白两色。

(5)腐蚀膨胀:目的就是让前景、后景的对比更加明显,更加有利于寻找前景的轮廓。

(6)寻找轮廓:使用cv2.findContours函数寻找前景的轮廓,此函数会存储形状边界上所有的坐标,可设置只取一条直线的两个端点,将轮廓上的冗余点去掉,以节省内存开支。

(7)标记运动物体:计算轮廓线的外框,并绘出外框将运动物体标记。

图3 运动物体的检测和追踪主要步骤

2.3 结果输出模块

系统的输出就是关于运动物体检测与跟踪一系列处理后的图像。为了丰富图像上对于运动物体检测状态的显示,增强系统输出的可读性,在输出的图像上增添空间状态和当时的时间信息。并可设置合适的上传帧间隔,通过保存下来的一系列输出图像,可以大致还原物体的运动过程。

3 关键参数设置与系统性能测试

3.1 关键参数设置

系统的处理效果涉及到两个关键参数的设置:

1)二值化过程中的像素分类阈值。本文在图像处理的过程中,设置大于此阈值的像素都重新赋值为255,即为黑色,小于此阈值的设置为0,即为白色,此参数将图像分为前景和后景,即将运动物体和运动背景区别开来。

2)最小运动区域的值。min_area是能检测运动的最小区域,如果设置过小会导致一些“风吹草动”的小影响也会触发运动的检测和追踪,如果设置过大,可能会将“人”这般大的运动物体忽略。

3.2 系统性能测试

实验场景设置为:树莓派距离实验室的门大概有9 m的距离,在人从门口走向设备的图中,树莓派对“人”这个运动物体进行实时检测与跟踪。

3.2.1 光照条件对系统的影响

加权平均帧后,系统能自动适应光照的变化。如图4所示,图中包含实时检测运动结果的画面和对应时刻的帧差,在室内日光灯的开与否的情况下,实验结果几乎无差异。

图4 有无日光灯照射下实验结果和帧对比图

3.2.2 二值化阈值对系统的影响

如图5~8所示、最小运动检测区域都取5 000、有日光灯照射的情况下,二值化阈值分别为2、10、30、40,对比实时检测运动结果和对应时刻的二值化处理效果。

图5 二值化阈值取值为2

图6 二值化阈值取值为10

图7 二值化阈值取值为30

图8 二值化阈值取值为40

从4幅图中可以看出,二值化阈值的选择对实验结果的重大影响。阈值取值过小时,如图5阈值取2时,二值化后的一些噪声被误认为检测对象,从而有许多分散的白点,框住真正运动目标“人”的框就把分散的白点算进去了,自然框大了些。如图6,阈值取10时,检测效果较好。阈值取值过大时,如图7所示,阈值取30时,可以看见运动目标在相同的位置没有被检测出来,因为二值化后的前景不满足最小运动区域判定条件,因而无法追踪目标。如图8所示,阈值取40时,二值化后的图像几乎无前景,就更提不上运动的检测了。

3.2.3 最小运动检测区域大小对系统的影响

鉴于二值化阈值实验中,阈值取10时效果较好,在二值化阈值取10,同时在有日光灯照射的条件下,如图9~13所示,在最小运动检测区域取值分别为1 000、2 000、3 000、5 000、7 000时,抓取人在门走向树莓派的途中第一次被检测到的瞬间,包括对应时刻的实时图像处理结果和帧差。

图9 最小运动检测区域取值为1 000时

图10 最小运动检测区域为2 000时

图11 最小运动检测区域为3 000时

图12 最小运动检测区域为5 000时

图13 最小运动检测区域为7 000时

如图9所示,最小运动检测区域取为1 000时,由于取值过小,系统将人分为两个运动部分框出,当最小运动区域取值从1 000~7 000变化时,第一次触发系统检测并跟踪运动物体的位置离树莓派的距离越来越近。

3.2.4 关键参数与算法对于实验影响的结论

通过以上对比实验,二值化阈值大小主要取决于运动物体的特性,对于检测和跟踪“人”这个运动物体,阈值取5~20之间效果最好;最小运动检测区域的取值主要取决于应用场景的环境和空间大小,针对不同的场景,大小应做出相应的变化,取值并没有好坏之分。

由于本文所移植算法本身的局限性,应用空间大小和适用的检测对象有限,并不是通过参数取值的改变就可以适用于一切对象的检测和一切场景的应用。OpenCV还有许多图像处理方法可用于对运动物体的检测和分析,包括基于混合高斯模型的前景和背景分割、基于贝叶斯(概率)的前景和背景分割等,但这些算法的计算复杂度相对较大,并不适用于嵌入式树莓派平台。

4 结论

本文设计了一个基于树莓派和OpenCV框架下对于运动物体的实时追踪和跟踪系统。针对不同环境和应用空间场景做出对比实验,较好地用Python+OpenCV验证了在图像处理上采用基于帧差的算法的可行性。实验结果充分证明了系统的稳定性、可靠性,较好地利用了树莓派的处理能力,充分发挥出嵌入式系统灵活机动、计算能力较强的特点,满足了小型化、实用化、灵活化的现实需求。

实验还实现了算法在树莓派1代B型、树莓派2代B型、PC机三个不同的硬件平台之间,Linux和Windows两个不同的操作系统之间的重用和移植。在OpenCV的标准框架下结合,Python语言的跨平台开放性使算法可灵活选择不同计算能力和操作系统的硬件平台,为算法改进、平台选择和未来的应用拓展了较大空间。

[1] HETLAND M L. Pyhton基础教程[M]. 2版. 北京:人民邮电出版社,2014.

[2] ALEX B,BEN E. 树莓派Python编程指南[M]. 北京:机械工业出版社,2015.

[3] BLUM R,BRESNAHAN C. 树莓派Python编程入门与实践[M]. 北京:人民邮电出版社,2015.

[4] ROSEBROCK A. Install OpenCV and Python on your Raspberry Pi 2 and B+[EB/OL]. [2016-04-10].http://www.pyimagesearch.com/2015/02/23/install-opencv-and-python-on-your-raspberry-pi-2-and-b/.

[5] 段力辉. OpenCV-Python 中文教程[EB/OL]. [2016-04-10]. http://download.csdn.net/detail/l1w1w1/8762009.

责任编辑:薛 京

Motion detection and tracking system based on embedded raspberry pi and OpenCV

HAN Yu,ZHANG Lei,WU Zemin,HU Lei

(SchoolofCommunicationEngineering,PLAUniversityofScienceandTechnology,Nanjing210007,China)

For adapting to the practical requirements of miniaturization and high efficiency of the motion detection and the tracking embedded system, this paper ports the algorithm of image processing to the Raspberry Pi 2 Model B, which is compact and flexible. And it fufills the real-time detection and tracking of moving objects. Under the development environment of openCV, programming with Python language, some image processing elements like the calculation of frame difference and binarization are used, and the moving objects are marked with the rectangle box. The experimental results show that, this system which based on Raspberry pi, has some ability of adapting to the changes of illumination conditions, so it can do well in detecting and tracking of moving subjects.

motion detection and tracking; raspberry pi; embedded system; binarization; image processing; adapting to the changes of illumination conditions

韩宇,张磊,吴泽民,等.基于嵌入式树莓派和OpenCV的运动检测与跟踪系统[J]. 电视技术,2017,41(2):6-10. HAN Y,ZHANG L,WU Z M, et al.Motion detection and tracking system based on embedded raspberry pi and OpenCV[J]. Video engineering,2017,41(2):6-10.

TP391

A

10.16280/j.videoe.2017.02.002

国家自然科学基金项目(61501509)

2016-05-06

猜你喜欢
树莓图像处理嵌入式
基于树莓派的骑行智能头盔设计
基于图像处理的机器人精确抓取的设计与实现
机器学习在图像处理中的应用
搭建基于Qt的嵌入式开发平台
基于树莓派的远程家居控制系统的设计
嵌入式软PLC在电镀生产流程控制系统中的应用
基于图像处理的定位器坡度计算
响应面法优化红树莓酒发酵工艺
Altera加入嵌入式视觉联盟
倍福 CX8091嵌入式控制器