APP下载

基于嵌入式ZedBoard和OpenCV的运动目标检测∗

2017-12-18李哲张迎

计算机与数字工程 2017年11期
关键词:光流嵌入式像素

李哲 张迎

(西安邮电大学电子工程学院 西安 710061)

基于嵌入式ZedBoard和OpenCV的运动目标检测∗

李哲 张迎

(西安邮电大学电子工程学院 西安 710061)

为了解决以往视频监控中对静态背景长时间的获取而导致磁盘存储量过大、搜索可疑动态目标不易的问题,论文在ZedBoard开发板上,构建了一种基于OpenCV的嵌入式图像处理平台,通过USB摄像头进行视频图像采集,并在此平台上改进了OpenCV中的金字塔Lucas-kanade光流法,旨在对目标区域内运动的目标进行检测跟踪并保存成视频文件,而对静止的背景不做写入处理。实验结果表明,该系统可以有效的监测目标区域内的运动目标并存储,减少了录像的存储量,具有一定的可行性,并对智能监控有相应的参考价值和实际意义。

ZedBoard;嵌入式Linux;OpenCV;智能监控;金字塔Lucas-kanade光流法

1 引言

近年来,智能[1]视频监控技术越来越受市场的青睐,其涵盖了计算机视觉、模式识别、数字图像处理等众多领域的知识。与静态图像相比,运动目标的视频图像帧序列提供了更为丰富直观的数字图像信息。运动目标检测和跟踪[2]是智能监控的关键技术,通过获取运动目标的运动参数(如:位置,时间等),可以描绘出运动目标的移动轨迹,从而实现了对目标运动行为的检测工作,可以有效地应用在智能交通、刑侦侦测和防盗治安等众多领域中。

本文提出了一种基于ZedBoard和 OpenCV[3]的运动目标检测方案,可以实时在线捕获运动目标。该系统不仅解决了基于ARM平台的图像处理方法在运行复杂算法上速度过慢的问题,而且利用了OpenCV视觉库可以优化运动目标检测算法编写的特点,使得整个系统结构紧凑、成本低。

2 ZedBoard和OpenCV的特点

Xilinx Zynq系列可编程SoC芯片将FPGA与双核ARM Cortex-A9处理器有机融合在一个芯片内,由最新的高性能低功耗(High Performance Low Power,HPL)的28nm,高K金属栅极(High-k Metal Gate,HKMG)工艺制造而成,不仅具有高速处理器的特点,而且灵活性高。ZedBoard开发板搭载Zynq-7000系列芯片,选用其作为硬件平台,可以满足运动目标检测实时性的要求。

OpenCV(开源计算机视觉库)可以跨平台运行在 Linux、windows、Mac OS、Android、iOS、FreeBSD等操作系统上,不仅包含了常用的算法,而且代码执行速度快。它采用优化的C/C++代码编写,能够充分发挥多核处理器的优势,快速构建一个计算机视觉框架,使开发人员将精力集中在计算机视觉相关的应用程序上,而不是花费大量的时间用于算法的设计。本文将OpenCV相关库移植到ZedBoard上,通过嵌入式平台完成改进后的运动目标检测算法[4]对动态目标的检测和写入保存测试,测试结果通过以太网口接入VNC远程桌面显示。

3 运动目标检测

3.1 运动目标检测的整体思路

运动目标检测系统主要由六个部分构成,如图1所示。

图1 运动目标检测整体框架

通过ZedBoard板上的OTG USB接口接入摄像头,调用OpenCV库函数里的VideoCapture()函数打开摄像头对连续视频帧进行采集,由于原始的Luncas-Kanade光流算法采集的视频图像为RGB格式的三色图像,存储器占用量大,不方便动态视频的写入,所以本文对其做了改进:1)通过调用cvtColor()函数先将彩色图像转为灰度图,使其只包含亮度信息,减少了对存储器的使用量,提高了解算速度。接着采用金字塔Lucas-Kanade光流运动估计[5]算出稀疏光流后显示特征点和运动轨迹从而进行跟踪,视频跟踪帧序列随后会实时显示在VNC远程桌面上;2)判断跟踪点当前帧位置和上一帧初始化位置,倘若当前帧位移小于或者等于上一帧位移,即points[1][i].x<=initial[i].x,则认为目标区域没有运动目标出现,调用continue结束当前帧的获取,继续下一帧检测,直到检测出当前帧的位移大于上一帧的位移后,调用VideoWriter()写入函数,此时参数编码格式设置成MJPG编码,即CV_FOURCC(‘M’,‘J’,‘P’,‘G’),写入当前运动帧到OpenCV默认的.avi格式视频文件中。

3.2 金字塔Lucas-kanade光流运动估计

光流是空间运动物体在观察成像平面上像素运动的瞬时速度,而光流法是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体运动信息的方法。

OpenCV中的计算光流算法[6]有多种,例如calcOpticalFlowPyrLK(通过基于图像信号泰勒级数的金字塔Lucas-Kanade光流法计算稀疏光流)、calcOpticalFlowFarneback(用Gunnar Farneback法计算稠密光流)、calcOpticalFlowHS(用Horn-Schunck法计算稠密光流)等。稠密光流是图像中的每个像素均与速度相关联,并且需要特定的插值算法在比较容易跟踪的像素之间通过插值来解决运动不明确的像素,计算量复杂。而稀疏光流的计算需要在被跟踪之前指定一组具有某种明显特征的点,比如“角点”,不仅在检测跟踪中相对稳定和可靠,而且计算量比稠密光流小的多。因此,本文采用金字塔Lucas-Kanade光流[7]算法,它是一种基于像素递归的光流算法,是预测校正型的位移估算器,主要计算两帧在时间t到t+δt之间每个像素点位置的移动。

Lucas-kanade算法是基于“三个假设”[8]的:1)亮度恒定:图像场景中目标像素在帧间运动时保持外观上的不变;

2)时间连续或是“小运动”:时间变化相对图像中运动的比例要足够小,因此目标在帧间的运动就比较小;

3)空间一致:同一个场景中的同一个表面上邻近点具有相似运动,在平面上的投影也在邻近区域。

那么,基于第一个假设:假设像素点(x,y)在t时刻灰度值为l(x,y,t),像素在被逐帧跟踪时,对于灰度图,则亮度不发生变化,图像的约束方程为

基于第二个假设:每个像素点的移动足够小,对上述约束方程使用泰勒公式展开:

省略式(2)中的高阶项,将式(1)和式(2)对比,可以得出下列式(3):

其中Vx,Vy分别是 l(x,y,t)的光流向量中 x,y的组成,是图像在像素点(x,y)相应方向上的差分。

再令式(4)中的

式(5)即为二维空间光流像素运动的基本方程。

由式(5)可以得到:

其中:

由于Vx,Vy两个分量的值不唯一,只可求得与光流方程描述的方向相垂直的运动分量,则方程存在病态问题。基于假设三:若一局部区域的像素运动是一致的,则可以建立领域像素的系统方程来求解中心像素的运动,因此,需要添加附加约束条件方可求解。

垂直光流由孔径问题[9]产生,那么可以用小孔或者小窗口去测量运动。窗口选取太大会违背运动一致的假设,太小又会产生孔径问题,所以利用当前像素5×5邻域像素的亮度值计算此像素运动。

因此,根据式(6)可以得出以下结果:

由矩阵论知识可得方程有解是在(ATA)满秩,即秩为2情况下,此时跟踪窗口中心在图像的角点区域。而对于It的求取,一般采用高斯导数滤波方法。

对于大多数图像,大而不连贯运动是普遍存在的情况,在不违悖“运动连贯”假设前提下,金字塔Lucas-kanade光流算法通过在图像金字塔最高层计算光流,用得到的运动估计结果作为下一层金字塔的起点,重复这一过程,直到达到金字塔最底层的跟踪方法,可以将不满足运动假设的可能性降到最小从而实现对更快更长的运动目标的跟踪。

本文的算法实现分两部分:主函数main()和跟踪函数tracking()。其中,主函数模块通过调用VideoCapture capture(0)打开嵌入式平台默认的USB摄像头,capture>>frame用来获取连续的视频帧,然后调用跟踪模块tracking(),直到按键Esc结束。跟踪模块 tracking()主要有 cvtColor()函数将获取的视频帧转成灰度图gray,对于稀疏光流而言,在运动估计计算时需要在被跟踪前指定一组容易跟踪的点,通常是角点,因为角点被定义为两条边的交点,在任意方向上的微小变动都会引起灰度的很大变化,不仅在图像中可以轻易的定位,而且在人造物体场景中,比如门、窗、桌等处也随处可见。利用goodFeaturesToTrack()函数确定角点后调用calcOpticalFlowpyrLK()函数进行金字塔Lucas-kanade光流运动估计,接着调用布尔类型函数acceptTrackedPoint()判断——如果特征点在前后两帧移动,则认为该点是可以被跟踪的目标点,将这一帧得到的运动估计作为下一帧的初始估计位置,最后调用line()和circle()函数显示特征点并画出运动轨迹,将运动的视频帧通过VideoWriter write写入类函数write<<gray保存成.avi视频文件。

3.3 VNC实时显示

VNC——Virtual Network Computer,虚拟网络计算机,是一款AT&T欧洲研究实验室开发的优秀远程控制工具软件。VNC是在基于UNIX和Linux操作系统的免费的开源软件,远程控制能力强大,高效实用。在Linux中,VNC包括以下四个命令:vncserver,vncviewer,vncpasswd,和 vncconnect。大多数情况下用户只需要其中的两个命令:vncserver和vncviewer。本文通过在Zed Board的嵌入式Linux系统上下载安装好vncserver(xfce桌面环境下)后,PC机上安装vncviewer进行实时显示。解决了在板子上安装笨重的显示屏的问题。VNC效果图如图2所示。

图2 VNC效果图

启动VNC步骤:

1)将网络双绞线连接PC机和ZedBoard板子的以太网接口;

2)启动开发板,将PC机和Zed Board板子IP地址设置在同一个网段并ping通二者;

3)终端下输入“vncserver”;倘若之前打开过若干X远程桌面,利用“vncserver-kill:(X桌面进程号)”杀掉之前进程;若是之前未打开过,则此时显示打开第一个VNC的X桌面,桌面号为1;

4)启动PC机的vncviewer,登陆用户即为开发板的IP:1(例如:192.168.137.110:1),此时的1则为第一个X桌面。

5)vncserver将由X的桌面环境利用VNC通信协议送至客户端vncviewer,并且允许客户端控制vncserver的桌面环境及输入装置。

4 嵌入式平台搭建

4.1 硬件结构

嵌入式图像处理系统硬件电路原型如图3。

图3 系统搭建原型

将ZedBoard开发板的USB OTG(J13)接口接入USB摄像头采集视频图像,此时需注意将USB OTG跳线JP2设置成OTG短接模式从而向外提供5V USB电压。USB-UART(J14)接口和PC机USB口对接以便实现串口通信,网线两端接口分别接入PC机和开发板的以太网口用来实现VNC传输通信。

4.2 软件环境

系统的软件部分示意图如下:

图4 软件平台框架

构建软件环境的步骤需要以下几步:

1)在Windows操作系统下的PC机上安装好VMware虚拟机(Vmware10版本),并且在虚拟机下安装 Ubuntu12.04-desktop-i386(32位)版本的Linux操作系统(若是64位系统版本在配置交叉编译环境之前需要安装ia32-libs兼容库);

2)通过github下载Xilinx公司支持的交叉编译链,并对环境变量进行配置——修改根目录/etc/bash.bashrc文件,末行添加环境变量“export PATH=~/CodeSourcery/bin:$PATH Export CROSS_COMPILE=arm-xilinx-linux-gnueabi-”;然后source/etc/bash.bashrc使环境变量立即生效;

3)由于ZedBoard启动Linux有两种方式:主启动(Master Method)和从启动(Slave Method)。本文采用主启动方式将启动镜像文件存储在非易失性存储器SD卡中,所以交叉编译环境搭建好后,进行U-boot引导程序编译(u-boot2015)生成u-boot.elf、uImage(uImage2014)内核编译(主要添加V4L2支持)产生内核镜像文件uImage、制作uramdisk.image.gz文件系统、创建 devicetree.dtb(devicetree.dtb2015)设备树一系列启动文件的制作工作;

4)在 Vivado(2014)软件环境下制作基于Zynq-7000的硬件工程文件system.bit,在Xilinx SDK 2014.4软件环境中制作一级启动镜像文件fsbl_zynq.elf,最后将 fsbl_zynq.elf→ system.bit→u-boot.elf相继添加在SDK中的Creat Zynq Boot Image环节里,制作成BOOT.BIN文件;

5)将 BOOT.BIN、uramdisk.image.gz、devicetree.dtb、uImage文件放入SD卡的FAT分区中,启动引脚模式设置成SD卡启动,接通开发板电源,连接USB-UART口,启动开发板中的Linux系统。

值得注意的是经反复测试,本文嵌入式Linux系统制作过程中U-boot、uImage和devicetree.dtb设备树的版本需要按照括号内的相互配套才可顺利进行编译。

在采集视频过程中,出现无法打开摄像头的问题[10],在终端输入命令“ls/dev”查看是否存在video0设备,倘若没有,此时只需将内核kernel编译配置中使用“make menuconfig”命令来添加摄像头驱动;接着检查ZedBoard开发板的USB OTG接口,将跳线JP2设置为短接OTG模式向外输出5V电压。

OpenCV3.0是目前最新的版本,采用了cmake工具,并提供了友好的UI接口进行makefile配置。安装好cmake以及OpenCV源码包后,配置cmake(指定交叉编辑器以及目标平台等信息并设置第三方库的支持:选择WITH-V4L和WITH-QT第三方库,其他库均不编译选择),进行编译和安装OpenCV链接库,之后将这些ARM构架的链接库复制到装载有文件系统的SD卡(默认路径/usr/lib)中即可。

5 系统平台测试

本文的系统平台测试分别在光照强度适中的实验室和光照较强室外进行。

系统上电,待稳定后,切换至超级用户root模式,先检测USB连接是否正常。终端输入:lsusb查看摄像头ID号,如图5所示,USB摄像头为设备002。利用USB摄像头采集[11]视频帧数据,在光照强度适中的实验室内,图6(a)为静止的背景处于待检测状态,图6(b)为开始检测到晃动的手,打印出检测状态信息,图6(c)为经Lucas-kanade光流运动估计检测到运动目标后进行动态视频写入,对运动的轨迹进行白色线条跟踪并打印出存储信息,图6(d)为动态检测入侵目标区域后发出报警信息。在强光照的室外,图7(a)所示为目标区域静止的背景,图7(b)为行人进入目标区域后检测出运动轨迹。

图5

图6 室内检测

图7 室外检测

图8 为检测到运动目标后被写入的avi视频文件。实验结果表明,该系统能够在不同的光照环境下,对目标区域的运动目标进行检测跟踪后生成。avi格式的视频文件,并且效果良好,适合嵌入式视频监控。

图8 AVI视频文件

6 结语

本文提出在ZedBoard平台上构建嵌入式动态检测系统,验证了OpenCV跨平台的便捷性以及代码的简易性,并采用改进的金字塔Lucas-kanade光流运动估计和MJPG编码来实现对运动目标的跟踪和监测保存,实验结果证明该系统的可行性。本文的嵌入式动态检测系统可以有效地应用在智能交通、刑侦侦测和防盗治安等众多领域中。下一步的研究重点是如何在ZedBoard的PL端进行光流算法的加速以便得到更好的实时性。

[1]光伏智能监控运维渐热[N].中国电力报,2016-06-16(6).Photovoltaic intelligent monitoring operation and maintenance heat[N].China Electric Power News,2016-06-16(6).

[2]ZHIHUI F,HUI W.Robust moving object detection based on spatio-temporal confidence relationship[J].Electronics Letters,2016,52(10):825-827.

[3]G.Bradski,G.&A.kaehler.Learning Open-CV[M].Oreilly&Associates Inc,2016.

[4]XUEGANG H,JIAMIN Z.An Improved Moving Object Detection Algorithm Based on Gaussian Mixture Models[J].Open Journal of Applied Sciences,2016,6(7):449-456.

[5]KARAMANIDIS K,TRAVLOU A,KRAUSS P,et al.Use of a Lucas-Kanade-Based Template Tracking Algorithm to Examine In Vivo Tendon Excursion during Voluntary Contraction Using Ultrasonography[J].Ultrasound in Medicine&Biology,2016,42(7):1689-700.

[6]谢红,原博,解武.LK光流法和三帧差分法的运动目标检测算法[J].应用科技,2016,43(3):23-27,33.XIE Hong,YUAN Bo,XIE Wu.Moving target detection algorithm based on LK optical flow and three-frame difference method[J].Applied Science and Technology,2016,43(03):23-27,33.

[7]肖军,朱世鹏,黄杭,等.基于光流法的运动标检测与跟踪算法[J].东北大学学报(自然科学版),2016,37(6):770-774.XIAO Jun,ZHU Shipeng,HUANG Hang,et al.Object Detecting and Tracking Algorithm Based on Optical Flow[J].Journal of Northeastern University(Natural Science),2016,37(6):770-774.

[8]K.MOSTAFA A,ALI A A.Multiresolution Video Watermarking Algorithm Exploiting the Block-Based Motion Estimation[J].Journal of Information Security,2016,7(4):260-268.

[9]稂龙亚,钱雪忠.基于SURF特征点的多人脸跟踪方法研究[J].计算机应用与软件,2016,32(2):178-181.LANG Longya,QIAN Xuezhong.Research On Multi-face Trackking Method Based On SURF Feature Points[J].Computer Applications and Software,2016,32(2):178-181.

[10]汤伟,王先通,王孟效.基于FPGA和DSP的车牌识别系统的研究[J].计算机测量与控制,2016,24(2):297-299.TANG Wei,WANG Xiantong,WANG Mengxiao.Study of FPGA&DSP-based vehicle license plate recognition system[J].Computer Measurement&Control,2016,24(2):297-299.

[11]黄凯奇,陈晓棠,康运锋,等.智能视频监控技术综述[J].计算机学报,2015,38(6):1093-1118.HUANG Kaiqi,CHEN Xiaotang,KANG Yunfeng,et al.Intelligent Visual Surveillance:A Review[J].Chinese Journal Of Computers,2015,38(6):1093-1118.

Moving Object Detection Based on OpenCV and Embedded ZedBoard

LI ZheZHANG Ying
(Xi'an University of Posts and Telecommunications,College of Electronic Engineering,Xi'an 710061)

In order to solve the problem that the disk storage is too large and the search for suspicious dynamic objects is not easy in the past,this paper builds an embedded image processing platform based on OpenCV at ZedBoard development board.By using USB camera to collect the video image and improving the the Pyramid Lucas-kanade optical flow method in OpenCV,the purpose of this paper is to detect and track the moving objects in the target area and also save them as video files without writing to the static background.Experimental results show that the system can effectively monitor moving objects in the target area and store them,not only reducing the storage capacity of video recording,but also having certain feasibility.The system of this paper has the corresponding reference value and the practical significance to the intelligent monitoring.

ZedBoard,embedded Linux,OpenCV,intelligent monitoring,Pyramid Lucas-kanade of optical flow

TP391.4

10.3969/j.issn.1672-9722.2017.11.015

Class Number TP391.4

2017年5月8日,

2017年6月22日

李哲,男,硕士,硕士生导师,研究方向:电路与系统、嵌入式系统、电子与通信工程。张迎,女,硕士研究生,研究方向:数字信号处理与嵌入式通信系统。

猜你喜欢

光流嵌入式像素
利用掩膜和单应矩阵提高LK光流追踪效果
基于改进Cycle-GAN的光流无监督估计方法
基于IMX6ULL的嵌入式根文件系统构建
像素前线之“幻影”2000
一种多尺度光流预测与融合的实时视频插帧方法
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
基于自适应纹理复杂度的仿生视觉导航方法研究
“像素”仙人掌
TS系列红外传感器在嵌入式控制系统中的应用
嵌入式PLC的设计与研究