乔晶鑫
内蒙古自治区新闻出版广电局呼伦贝尔广播发射中心台 内蒙古 呼伦贝尔市 021008
随着人们物质水平的不断提高,对精神生活的追求也不断提高。为满足人们日益增长的视听娱乐等方面的需求,广播发射站的数量也逐渐增多。对于发射站的监管,传统方法是需要人工值守,此方法不仅会浪费大量人力物力,而且会因为人的疏忽导致广播意外事件的发生[1]。因此,设计一套安防系统来实时监测发射站机房内部的情况有着重大的现实意义。
在各种安防技术中,视频监控有着实时性高、操作简单、监控信息易于查看和保存等优点,得到了广泛的应用。目前的视频监控方法多是使用硬盘录像机(Digital Video Recorder, DVR) 进 行 一 天24 小时不间断存储视频数据,但此种方法有着价格昂贵、设备复杂的缺点[2]。而在本文发射台监控的任务中场景相对固定,若对发射站机房进行不间断的录像并存储视频,会包含大量的无异常冗余视频,占用存储空间;并且工作人员查看过往视频时需要全部查看,过程较为繁琐。
针对以上问题,结合发射站机房监测任务的特点,本文提出一种利用图像处理算法进行异物闯入监测的发射台安防系统,仅当有异物闯入和物体移动时才会进行视频的存储,并进行目标跟踪便于监管人员查看,并且搭建嵌入式硬件平台和移植算法,从而解决了设备复杂昂贵、存储多余视频的问题。
根据实地考察和分析,本文提出了一种基于图像处理算法和嵌入式技术的发射台安防系统,该系统的主要功能为:第一,驱动视频采集模块实时监测发射台机房内部状态,当有异物闯入或物体移动时,存储当前视频;第二,进行视频中物体的跟踪和标记;第三,驱动显示模块能够回放存储的监控视频,该视频以拍摄时间为顺序、分段存储;第四,连接外部设备,接收用户的输入控制。
本文提出的基于视频监控的发射台安防系统结构如图1 所示,包括硬件和软件两个部分,在硬件部分含有高性能处理器作为整个系统的核心,连接高清摄像头作为显示模块、连接可触控的LCD 显示器同时完成显示功能和接收用户输入的功能、连接大容量存储器用来存储多个分段的监控视频供工作人员回溯事件。软件部分包括嵌入式操作系统,它是软件程序运行的基础,操作系统内部的驱动程序来驱动硬件的各个模块高效工作;还包括基于OpenCV 的移动物体检测算法和目标跟踪算法,属于上层应用程序,调用嵌入式操作系统的API 实现对硬件的管理。
图1 基于视频监控的发射台安防系统结构图
1.2.1 嵌入式处理器
处理器是整个系统的核心,它控制其它各物理模块,也是操作系统和软件程序得以运行的基础。ARM 架构的处理器凭借精简指令集的高效、功耗低、性价比高的优势,占据了大量的市场。本文中发射站安防系统需要一个性能强大、价格低的处理器,因此处理器选择了NXP公司的iMX6ULL处理器。
图3 OKMX6ULL 开发板底板实物图
iMX6ULL 处理器基于ARM cortex-A7 架构,有着较强的性能。 运行频率最高可达900MHz,内 部 有128KB L2 缓存。集成了很多模块功能丰富,例如电源管理模块,降低了外接电源的复杂性;在连接存储器方面,接口众多,包括LPDDR2、DDR3、DDR3L、原始和管理的NAND 闪存、NOR 闪存、eMMC、Quad SPI 和各种其他接口;在连接外围设备方面,可与LCD 显示器、摄像头传感器等连接[3]。
本文安防系统将利用飞凌公司的OKMX6ULL 开发板进行开发,该开发板由主板和底板两部分组成,如图2、图3 所示, 接 口 丰 富, 包 括LCD、Camera 接 口,4 个USB 接 口,2个UART、2 个IIC、2 个CAN 总线接口等[4]。本系统直接使用OKMX6ULL 开发板所提供的接口连接视频采集模块、触控显示模块、视频数据存储模块,并在iMX6ULL 处理器中运行嵌入式操作系统,在操作系统之上运行本文设计的目标检测和跟踪程序。
1.2.2 视频采集模块
对于视频采集模块的选择,本文从拍摄效果及性价比等多方面考虑,选用色彩逼真、稳定性高的中星微301v 型号摄像头,实物图如图4 所示。
图4 摄像头模块
该款摄像头为高清CMOS 摄像头,接口类型USB2.0,图像最大分辨率640×480,拍摄速率为30fps,抗噪能力强,还包括多种影像处理功能。通过多次实际测试,能够拍摄出清晰的图像画面,并且价格适中、性价比高,符合本系统低成本的要求。
1.2.3 显示模块
显示模块和用户输入模块集合到一个物理设备中,使这个系统的操作更加高效,本文选用LCD 触控一体机作为显示和输入模块。产品为触想公司的12 寸LCD 显示屏。实物图如图5 所示,具体参数见表1。
图5 LCD 触控一体机实物图
1.3.1 OpenCV 简介
OpenCV 是一个在图像处理领域常用的机器视觉集成库,主要编程语言使C++、Python等。OpenCV 是分模块化设计的具体来说分为多个部分,各部分之间的结构和关系如图6所示:
图6 OpenCV 的模块结构
如上图所示, OpenCV HAL 模块是多硬件的支持和优化,包括SSE、CUDA 等;其次是OpenCV 对图像处理的核心代码,包括core、imgproc 模块等,内部包含多种高级图像处理的函数,提供API 供开发人员使用;最后是一些与特定开发语言的绑定,包括对Python、Java等,还有一些示例工程和解决方案[5]。
表1 触控一体机产品规格
OpenCV 已有多个版本更新,它在除了图像处理领域应用广泛,在人脸识别、机器人、运动结构分析等领域都有着广泛的应用。主要是它有着诸多优点,如下:
(1)OpenCV 中有大量覆盖计算机视觉领域的图像处理相关函数,并且是全部开源的,在研究过程中可以在代码中添加自己的思路;
(2)OpenCV 视觉库中的代码都是经过不断实验优化后发布的,可靠性强;
(3)OpenCV 支持的运行环境较为广泛,可以支持开发者在多种环境中完成对图像的研发工作,跨平台使用,可移植性强;
(4)OpenCV 提供了多种图像处理API 接口,通用性强。
因此,本文选用OpenCV3.4.1库来实现目标检测程序和跟踪程序。
1.3.2 嵌入式操作系统
在嵌入式软件部分,分为无操作系统的裸机和包含操作系统的软件部分。当任务较为简单时,不含操作系统的代码直接控制硬件器件,效率高、便于程序的编写。但是当任务较为复杂且对处理实时性有较高要求时,需要使用操作系统来完成多任务的并发的功能。目前,常用的嵌入式操作系统包括Linux、WinCE、VxWorks 等[6]。
由于嵌入式Linux 有着开源、成本低、可移植性强的优点,而且应用广泛,本文将采用嵌入式Linux 作为操作系统。由图7 可知,Linux 操作系统有4个组成部分,分别是内核、系统调用、shell 及公共函数库、应用程序。
图7 Linux 结构图
其中,内核是操作系统关键的部分,主要完成操作系统做重要的任务,包括进程管理、内存管理、文件管理等[7]。
1.3.3 移动目标检测算法
根据视频中物体背景是否变化,移动目标检测算法主要分为动态和静态背景的移动目标检测算法。当背景处于动态变化过程中,或者说是视频采集模块处于不断移动导致背景在不断改变时,此时需要的算法更强,处理器性能也需要更好[8]。
在本文任务中,发射台机房中背景相对固定,而且摄像头位置保持不变,因此属于静态背景中的移动目标检测算法。目前常用的算法有光流法、背景差法和帧差法。光流法算法较为复杂而且对硬件要求较高,不适合用于嵌入式系统中;背景差法运算速度快,但是抗干扰能力弱,容易造成误检。帧差法的鲁棒性较强,计算高效,对处理器性能要求不高,因此本文选择帧差法作为移动检测算法。算法总体流程如图8 所示。
由图8 可知,本算法对连续两帧图像做差值运算,首先是获得连续两帧图像的数据,其次进行两幅图像的预处理操作,包括图像灰度化处理、滤波降噪得到高质量的灰度图像,最后对两帧图像做差值计算得到新的图像Mat_new,并对Mat_new 进行阈值判断,若超过阈值则认为有移动物体,则对Mat_new 进行一些图像的形态学运算,开始存储该帧图像,用于以后工作人员查看。
主要的形态学后处理算法有腐蚀、膨胀、开运算、闭运算、形态学梯度、顶帽和黑帽等基本运算,本文采用图像腐蚀和图像膨胀,图像腐蚀的计算公式如下所示:
图8 移动目标检测算法流程图
图像膨胀的计算式为:
最后,利用C++语言和OpenCV 库进行编写移动目标检测算法,所调用的OpenCV 函数和调用顺序为Video Capture、cvtColor、 absdiff、 threshold、erode、dilate。
1.3.4 目标跟踪算法
当检测到异物闯入发射台机房中时,已经保存了图像,但是为了显示的更加明显,将使用目标跟踪算法对异物或移动物体进行标记其轮廓。其算法流程如图9 所示。
首先是边缘检测,本文所使用的Canny 算子进行检测其边缘。其主要步骤包括:图像降噪、计算图像的梯度,非极大值抑制和阈值筛选[9]。
通常使用高斯滤波进行降噪处理,接下来计算梯度,公式为:
梯度的大小和方向分别为:
图9 目标跟踪算法流程图
非极大值抑制和最后一步的阈值筛选的目的是使边缘更加的准确、描述更多的细节信息。图10 为Canny 滤波处理之后的效果图。
经过边缘检测之后,接下来是进行轮廓的检测和外接矩形的绘制。最后,利用C++语言和OpenCV 库进行编写移动目标检测算法,所调用的OpenCV 函数和调用顺序为Canny、find-Contours、drawContours、boudingRect、Rectangle。
图10 Canny 滤波效果图
图11 基于监控视频的发射台安防系统的流程图
在完成了硬件的选型和移动目标检测、目标跟踪算法的实现, 本节开始基于OKMX6ULL 搭建嵌入式系统,并进行操作系统的移植和算法的移植。本文所设计的基于监控视频的发射台安防系统的流程如图11 所示。
1.4.1 U-boot 的移植
首先移植U-boot,Bootloader 引导程序是处理器一上电之后执行的第一个程序,它存储在系统的ROM 中,一般来说由厂家固化好。U-boot 是属于引导加载程序的一种,因为它有着很强的移植性并开源代码,故应用广泛[10]。移植U-boot 的步骤如下:
(1)修改顶层Makefile,修改其中的CPU 类型和开发板类型;
(2)在configs 文件夹下新建IMX6ULL.h,配置引脚信息;
(3)修改配置文件board.cfg;
(4)运行build.sh shell 脚本文件,编译U-boot,并把编译后的文件烧录到Nand Flash 中。
系统上电后,U-boot 会被加载到内存的0 地址处译码执行,U-boot 的功能是检查主要硬件的功能完善性,并加载操作系统内核到内存执行。
1.4.2 操作系统的裁剪与OpenCV 的移植
所以下一步就是进行操作系统的编译与移植,在PC 中编译好操作系统程序,烧录到嵌入式开发板的Nand Flash 中。具体步骤如下:
(1) 用图像界面的方式CPU 型号。运行menuconfig 依次配置NXP 类型的IMX6ULL 系列,运行内核架构代码则会使用IMX6ULL 架构所对应的内核程序;
(2)添加设备驱动程序。本系统外接的硬件包括摄像头、LCD 触控屏,因此在操作系统中为其田间设备驱动程序以控制硬件工作。
分别编写摄像头、LCD 触控屏的驱动程序,并编译成模块,配置内核时选择编译该模块至内核,则最终生成的操作系统中就包含了控制摄像头和LCD 触控屏的代码;
(3)文件系统的移植。本文使用的是性能优越,在嵌入式系统中应用广泛的Yaffs2 嵌入式文件系统。步骤为修改内核文件中的/fs 目录下的Makefile 文件,并通过配置Kconfig 文件配置yaffs2 文件系统。最后重新配置.config 文件,使内核中包含Yaffs2 文件系统。
(4)移植OpenCV。首先在官网下载OpenCV3.4.1 源码文件,利用cmake 进行配置并编译,执行./cmake.gui,按照要求配置OpenCV 源码,其次交叉编译生成lib 库和一些头文件库,即嵌入式开发板所需要的库。最后开发板上电运行Linux 操作系统,把库文件传输到操作系统中的文件系统的根目录中即可。
1.4.3 移植移动检测与目标跟踪算法
当开发板中正常运行Linux操作系统并加载OpneCV 库之后,接下来就是移植移动检测程序和目标跟踪程序。
在PC 机中通过arm-linuxgcc 交叉编译工具链编译得到可以在嵌入式Linux 中运行的程序,并在系统上电后通过文件传输工具从PC 机传输到开发板中,然后运行此程序,至此,整个系统开始运行。
摄像头开始实时采集发射台机房中的图像,并利用移动目标检测算法和目标跟踪算法对异物和移动的物体进行视频记录保存和跟踪检测。管理人员可通过LCD 触控屏进行视频的回看和下载。
摄像头通过USB 连接开发板的USB 接口,将采集的图像传输到开发板,IMX6ULL 处理器运行本文移动目表检测算法,本节通过实验,当监控画面中出现移动物体时,该算法能够进行检测并利用外接矩形框住移动的物体,而开发板则把此时的视频信息存储到FLASH 存储器中。如图12 所示为监控移动的人,从图中可以看出,可以正确的框出视频中移动的工作人员。
图12 对移动目标的检测效果图
本文提出的检测和只对移动目标进行存储,主要是为了减少数据的存储,因此本节对视频的存储量进行计算和分析,对24 小时内的视频数据量大小进行记录,并与通常的视频存储方式进行比较,如图13所示。
图13 视频数据量大小对比
1. 本文设计的基于视频监控的发射台安防系统,通过对移动目标进行检测,并进行跟踪,使用了嵌入式系统,大大降低了开发成本。
2. 对于机房这种相对稳定的静态背景,本文只记录有移动物体时的视频数据,减少了数据的存储,便于管理人员回溯事件、回看视频。
3. 搭建的嵌入式系统具有较强的通用性和可扩展性,适合二次开发和应用于其它领域。