当前位置:首页 期刊杂志

基于FPGA的运动目标远程监视系统设计

时间:2024-05-04

刘存领,林青松,于洪泽

(河南科技大学 信息工程学院,河南 洛阳 471023)

0 引言

随着科技的不断发展,人们的安全意识不断提高,智能安防行业得到了飞速发展。近年来,随着网络信息技术与传感器技术的不断发展,智能监控系统逐渐走进了人们的日常生活当中,在交通、公安、住宅等多个领域起着重要的作用。如今的安防系统向着高清化、网络化的方向发展,随着移动互联网的不断发展,远距离、高效率、低成本的传输数据成为可能,视频传输技术也向着高实时性、可靠性的方向发展。另一方面,FPGA强大的性能和可并行处理的能力在医疗、交通、公共安全、智能安防、军事等领域得到了广泛地应用。FPGA对于视频图像处理以及高性能数据传输拥有着独特的优势,面对复杂多变的环境以及多元化的应用场景,能够满足智能安防系统小型化、低功耗、高性能的需求,因此本文采用FPGA作为硬件平台。

运动目标检测技术一直是安防领域的重要研究方向之一,通过监控摄像头实时监视视频中出现的运动目标,并给予预警提示是当前研究的热点。而传统的运动目标检测技术多通过样本训练神经网络的方式来提高检测精度[1-4],或者通过建立模型、改进相关算法、仿真验证[5-8]等方式在计算机上实现,这种方法的开发难度大、训练周期长,功耗较大,不适合应用到实际场景。而基于FPGA的运动目标检测大多通过外接LCD显示屏或者HDMI显示屏的方式来显示检测结果[9-10],无法满足远距离视频传输的需求。

综上所述,当前对于多个运动目标的检测系统主要在计算机以及FPGA上实现,无法对远距离目标实时监测。为此,本系统提出来可远距离检测的新型解决方案,采用以太网接口,运用UDP作为通信协议,确保视频传输的高效性,采用帧间差分法实现对多个运动目标的实时检测,提高了检测速度。本文详细介绍了FPGA实现运动目标检测的具体方法,包括图像的采集、图像处理算法、图像数据的缓存等方面,对于多个运动目标提出了一种基于邻域的检测方法,然后介绍了以太网传输视频检测结果到上位机的具体实现流程,接着通过实验对系统的功能进行验证,最后分析了系统的性能参数,满足设计要求,具有广泛的应用价值。本系统相比于其他系统具有以下优势:(1)体积小、低功耗,性价比高,检测效率高,可进行加密设置,确保运行安全;(2)板载 1片 2 Gbit DDR3内存,传输速率可以高达800 MHz,可以提供12.8 Gbps 带宽,为视频数据远距离传输提供高速缓存;(3)利用FPGA并行的特性,对视频图像做预处理操作,实现对图像处理算法的加速,提高了检测速度。

1 系统的总体设计

本系统主要由时钟模块、图像采集模块、图像处理模块、数据存储模块、以太网传输模块组成。其中时钟模块是系统时钟经过 PLL 分频,为摄像头驱动模块、DDR3缓存模块、以太网传输模块等提供驱动时钟。

系统的主要设计流程为系统时钟经过分频器为各模块提供驱动时钟。首先OV5640驱动模块通过I2C总线协议配置相应的寄存器,完成对摄像头的初始化。将摄像头采集到的图像数据送入灰度化模块,将灰度化处理后的第K-1帧图像缓存到DDR3数据缓存模块中,延时两个时钟周期,将第K帧图像和缓存模块中读出的第K-1帧图像送入差分模块,将得到的差分图像数据进行二值化和形态学滤波处理,进而得到运动目标的标志信息。经由边框检测模块得到运动目标的4个顶点坐标,通过叠加矩形框画出运动目标的边框,将带有运动目标检测边框的图像数据进行打包,通过以太网UDP协议传输检测结果。通过配置上位机的IP地址等参数,实现FPGA与上位机的通信握手,FPGA将处理后的视频图像实时的传输到上位机进行显示,在保证图像分辨率的前提下,提升运动目标的检测速度以及以太网的传输速度,最终实现远距离监视与跟踪多个运动目标,系统设计框图如图1所示。

图1 系统设计框图

1.1 图像采集模块设计

图像采集模块采用美国豪威公司的OV5640摄像头,具有很好的图像处理性能,支持较高的分辨率,其感光阵列达到500W 像素,可支持高速率图像采集,传感器采用先进的背光技术使采集的图像拥有更高的灵敏度、更低的噪声,支持两种输出接口包括MIPI、DVP,支持多种数据像素格式,如YUV、RGB565、RGB555、RAW等,通过操作相应的寄存器即可输出不同的像素格式。其主要工作原理:CMOS传感器通过控制感光阵列将光信号转换为模拟信号,将模拟信号经过放大器和数模转换器转换为数字信号,经过一系列的图像处理,最终转化为视频流数据输出。

通过配置相应的寄存器来完成摄像头初始化,寄存器的配置需要 SCCB 接口协议来驱动,由于SCCB传输协议与I2C总线协议相似,可以采用编写I2C驱动程序来完成摄像头的初始化配置[11-12]。完成OV5640的SCCB读写协议配置后,对摄像头相关寄存器进行配置,包括输入输出寄存器、系统分频寄存器、数据输出格式寄存器、复位寄存器等,寄存器配置完成后,即可通过图像采集模块产生正确的时序信号,采集摄像头所捕获的图像信息。具体配置如下:系统时钟经过 PLL为I2C驱动模块提供时钟,通过I2C驱动程序来调用SCCB接口总线,对摄像头的寄存器地址和相关信号进行配置,完成对摄像头的初始化。摄像头初始化成功后,通过图像采集模块完成8位图像数据转16位RGB565格式数据输出,并输出行场同步信号。

1.2 图像处理模块设计

1.2.1 灰度化处理

摄像头采集的图像为RGB彩色图像,其中包含了运动目标的颜色信息、位置信息、轮廓信息、梯度信息等,为了剔除冗余的无用信息,提取出运动目标的重要信息,需要对图像进行灰度化处理,同时可以减少板载资源的消耗,减轻后续图像处理的运算量,从而加快运动目标的检测速度。

由于OV5640摄像头采集到的图像数据为RGB565格式,需要通过高位补低位的方式实现16位RGB565格式到24位RGB888格式的数据转换。由色彩空间转换公式(1)~(3)可知,将24位RGB888格式转换为24位YCbCr格式数据,并提取Y分量作为灰度信息,即可实现[13]。

Y=0.229R+0.587G+0.11B

Cb=-0.172R-0.339G+0.511B+128

Cr=0.511R-0.428G-0.083B+128

(1)

(2)

(3)

式中,Y为亮度信息,Cb为偏蓝色分量,Cr为偏红色分量,R为RGB三原色中的红色分量,G为蓝色分量,B为绿色分量。

由于在FPGA中对数据进行浮点运算所消耗的资源较高,因此采取用精度换取资源的方式,首先将浮点数据扩大256倍化为整型数据,再将整型数据相加消去负数,最后将所得数据整体右移8位,即直接提取数据的高八位作为Y,Cb,Cr分量,其中Y分量值即为灰度值。

1.2.2 中值滤波

摄像头在采集图像数据之前,通过摄像头自身的图像处理单元对图像进行降噪处理,但是由于环境中存在的噪声多种多样,经过一次处理不能完全滤除,因此为了进一步提升图像的质量,降低噪声对检测精度的干扰,需要对图像进行二次滤波。常见的图像滤波可以分为线性滤波与非线性滤波。典型的线性滤波包括均值滤波、高斯滤波等,非线性滤波主要包括中值滤波、最大值滤波等。图像中经常采用均值滤波或者中值滤波来处理图像数据,其中均值滤波通过计算滑动窗口内像素的平均值来取代原来的像素值,虽然对高斯噪声的滤除效果较好,但是在滤波的同时损失了图像的细节信息,使得图像变得模糊,具有无法弥补的缺陷。而中值滤波通过求取滑动窗口中的像素的中值来代替原来的像素值,对椒盐噪声具有很好的滤除效果,同时可以消除孤点噪声,保护图像的边缘信息。为了在滤除噪声的同时确保图像的质量,决定采用中值滤波处理该系统图像数据中的噪声。

中值滤波的基本原理是将图像中一点的像素值用其邻域中各个像素的中值所代替,使得周围的像素点更加接近真实值,因此中值滤波对脉冲噪声具有很好的滤除作用,滤波后的图像信息更加平滑。中值滤波的实现方式多种多样,常见的方法有冒泡排序法、选择排序法等,这些方法不适合运用到FPGA中,考虑到逻辑资源的消耗以及实现的难易程度,选择流水线的方式来实现。通过Shift_RAM IP来生成3×3的滑动窗口,用来遍历整幅图片,与卷积操作类似。由于Shift_RAM IP核一次只能存储一行数据,因此需要例化两次IP核再加上即将输入的当前行组成3×3的矩阵。通过设计一个排序模块,对矩阵的每一行进行排序,对矩阵的第一行像素数据进行排序得到中值,然后依次对矩阵的第二行、第三行像素数据进行排序得到中值,最后对得到的3个中值继续排序得到最终的中值,将所得的中值代替图像中原像素值,通过3×3的矩阵从上到下从左到右不断遍历,直到替换完成整幅图像相应的像素点。通过这种方式实现对图像的中值滤波,可以减少板上资源的消耗,提高图像处理的速度。

1.2.3 差分及二值化处理

常见的运动目标检测方法大致分为:光流法、背景减法、帧间差分法。相比于背景减法,帧间差分法无需对背景进行复杂的建模,相比于光流法,帧间差分法设计更加简单,检测速度更快,鲁棒性更好。同时在相同条件下,该方法设计周期短,占用资源少,运行功耗最小,因此本系统采用帧间差分法实现对运动目标的检测。

帧间差分法主要通过对比视频流中相邻两个图像序列的差异来实现对视频中运动目标的检测。当视频中出现运动目标时,相邻两帧图像的差值的绝对值大于设定的检测阈值时,则判断视频图像中存在运动目标,反之视为无运动目标,通过该方法可以快速的检测运动目标。该方法具体的实现方法:为了实现相邻两帧图像的差分运算,需要将前一帧数据通过FIFO写入到DDR3中进行缓存,并标记帧起始信号,因为从FIFO中写入与读出都需要一个时钟周期,因此延迟两个时钟周期用于同步数据。当数据缓存模块检测到帧起始信号,则从FIFO中读出前一帧数据,将两帧图像送入差分运算模块做差分运算,运算公式如(4)和(5)所示。

Fn(x,y)=|fk(x,y)-fk-1(x,y)|

(4)

(5)

式中,fk(x,y)和-fk-1(x,y)为灰度化处理后的第K帧图像和第K-1帧图像,为差分结果,T为检测阈值,为图像背景。

由运算公式(4)和(5)可知,灰度化处理后的第K帧图像和第K-1帧图像为和,两帧图像相减取绝对值,所得差分结果为,设定检测阈值为T,将差分结果与阈值T对比,如果大于T则将图像背景设定为白色,即图像灰度值为255,否则图像背景设定为黑色,即图像灰度值为0,完成对图像数据的二值化处理。

1.2.4 形态学滤波处理

图像数据经过形态学滤波滤除噪声,保留了物体的轮廓信息。本系统采用先腐蚀后膨胀的方法,消除运动目标外的杂点,保证运动目标的大小和位置不变。

1)图像腐蚀处理:

在实现图像腐蚀处理之前需要调用Shift_RAM IP来生成3×3的矩阵。具体的实现步骤是:例化2个Shift_RAM移位寄存器,将二值化处理后的一行图像数据送入移位寄存器1中进行缓存;下一行数据到来时,将移位寄存器1中的数据送入移位寄存器2中进行缓存,移位寄存器1缓存当前行数据;缓存了前两行数据加上即将输入的第三行数据一起组成的矩阵3×3的矩阵,如图2所示。

图2 矩阵生成示意图

将生成的3×3矩阵中的9个值进行相与运算,当矩阵中的值全为1时则输出图像腐蚀处理后的值为1,否则为0。具体分为两步实现,首先将矩阵中第一行中的3个元素进行相与,后面两行进行相同操作,最后将三行所得结果再进行相与运算,得到腐蚀后的输出结果。

2)图像膨胀处理:

在实现图像膨胀处理之前同样需要调用Shift_RAM IP来生成3×3的矩阵,具体方法与图像腐蚀处理中方法一致。将生成的3×3矩阵中的9个值进行相或运算,当矩阵中的值有一个值为1时则输出图像膨胀处理后的值为1,当矩阵中的值全为0时,则输出为0。具体分为两步实现,首先将矩阵中第一行、第二行、第三行中的3个元素进行或运算,最后将三行所得结果再进行或运算,得到膨胀后的输出结果。

1.2.5 运动目标边框检测

将形态学滤波后的数据送入到运动目标检测模块得到边框的4个顶点坐标,为后续画出运动目标边框提供位置信息。

首先,初始化行计数和列计数,当数据有效并且行计数与列计数为1则判定为一帧图像的起始信号,否则当数据有效且行计数和列计数达到最大值时判定为一帧图像的结束信号。通过帧起始信号和结束信号进行行列计数来获得一帧图像的像素坐标。具体做法为:定义两个变量分别对x,y方向进行计数,定义上下左右4个变量用于获取运动目标的位置坐标。当帧起始信号有效时,初始化变量,当系统复位时,将变量值赋为0。通过横纵坐标寄存器计数扫描当前帧图像,当形态学滤波结果与数据有效信号都为1时,表示该点为运动目标,寄存该点的位置信息,当一帧图像扫描结束,更新位置信息。当然此方法有一定的弊端,当图像中出现一个以上目标时,输出结果仍为一个运动目标,不适合对多个目标进行检测。

本文采用一种基于邻域的检测方法,提前手动设定一个最小阈值,通过帧起始信号与行结束信号来扫描一帧图像,获取运动目标的4个顶点坐标。当出现多个运动目标时,以检测到的第一个目标边界为标准,向上下左右边界叠加设定的最小阈值,形成一个目标检测邻域。判断各个运动目标之间的间距是否重合,如果没有落在邻域范围内则说明出现了新的运动目标,进而将新的目标的边界信息更新到运动目标列表,继续进行判断,直到检测出所有的运动目标。如果出现重合则说明未出现新目标,寄存此时的边界信息,继续检测,进而实现对多个运动目标的检测。

1.2.6 叠加矩形框

叠加矩形框就是将已知的运动目标位置坐标,用红色矩形框进行标记。理论上矩形框的边框宽度是1,即矩形的4条边都是由像素宽度为1的线段组成,为了使矩形框更加突出醒目,便于人眼观察,可以适当加宽矩形框4条边框的宽度。对输入的像素坐标进行判断,确定是输出矩形框还是原像素数据。对输入的图像坐标进行x,y方向计数,设定一个寄存器类型变量,用来标记像素数据是否在运动目标的上下左右边框上,如果是则将信号拉高,否则将信号拉低。当标志信号为高电平时,将像素数据标记为红色,否则输出原像素数据,最终实现在图像数据叠加红色矩形框的效果,完成对运动目标的标记。

1.3 图像缓存模块的设计

图像缓存模块采用的是DDR3 SDRAM,相比于DDR2,DDR3在降低电压的同时拥有更高的运行性能,DDR SDRAM是在SDRAM技术的基础上不断发展改进而来,相比于传统的SDRAM,它采用双沿触发方式提高数据缓存效率,即在时钟的上升沿和下降沿同时进行数据的采集与发送,这大大提高了数据的传输速度,在相同的时钟下,DDR3 SDRAM要比传统的SDRAM提升一倍的数据读写速度。本系统采用的DDR3 SDRAM芯片型号为NT5CB128M16CP-DI,它具有16 bit的数据位宽,bank位宽为3,行位宽为14,列位宽为10,地址大小为128 M,容量大小为256 Mbyte,拥有高速的带宽和较大的存储容量。为了降低开发难度,提高用户体验,Xilinx提供了间接调用DDR3外设的方案,通过调用MIG IP核实现对DDR的读写控制[14-16]。对DDR3读写操作的设计流程如下:系统的时钟模块,负责产生外部模块、DDR控制模块以及MIG IP核所需的时钟信号。DDR 控制模块负责驱动 MIG模块实现数据读写操作,写入或读出DDR3缓存的图像数据,实现与 MIG IP 核的数据交互。MIG 模块负责连接外设和FPGA,数据缓存控制流程图如图3所示。

图3 数据缓存模块流程图

通过配置MIG IP核的26个用户端口,来实现DDR3的读写命令操作,其中主要关注读写操作命令。对于写命令操作,通过检查写命令准备信号是否为高,如果信号为高,则表明IP核已经准备好命令的接收,此时拉高时钟信号,发送写命令和要写的地址即可正常写入数据。对于读命令操作,用户只需发出读命令,等待数据的有效信号拉高,表示总线上的返回的数据是有效的,即可正常读取数据。由流程图可知,数据的缓存主要包含3个模块,分别是FIFO读写控制、MIG IP核配置模块、时钟模块。时钟模块为MIG IP核产生两个时钟信号,分别是系统时钟与参考时钟,FIFO读写控制模块主要产生读写MIG IP核所需要的时序信号,从而实现两者之间数据的交互,最为重要的是对于MIG IP核的配置,一方面MIG IP核负责与FPGA进行数据交互,另一方面还负责产生正确的读写时序,实现对DDR3芯片的读写操作。

2 以太网传输模块设计

常见的以太网通信协议包括TCP协议、UDP协议,TCP协议是一种可靠的通信协议,在传输过程中能够保证数据的完整性和有序性,通过连接发送数据,属于流传输协议,当然TCP传输所占用的资源较多,传输速度较慢,适合文件传输等对文件完整性要求较高的场合。而UDP属于不可靠的传输协议,传输过程不需要连接,属于数据报协议,UDP传输数据占用资源较少,传输速度要比TCP快,适合传输音频、视频等对实时性要求较高的场合。

图像传输模块采用以太网传输协议UDP来实现视频传输。UDP协议不同于TCP协议,在数据传输过程中无需建立安全的数据通路,减少了资源的消耗,传输效率更高[17]。在数据传输过程中,发送端只负责发送信息,不考虑接收端能否接收到数据。同样接收端只负责接收,不考虑数据是否发送成功。UDP协议属于一种特殊的IP协议,通过以太网发送和接收用户数据,需要对数据进行逐层封装处理[18-20]。用户数据加上UDP首部封装为IP协议数据段,UDP 协议层加上IP首部封装为IP协议层,IP协议加上前导码、SFD、以太网帧头封装到MAC层,UDP传输数据格式如图4所示。

图4 UDP传输数据格式

以太网传输模块主要由开始传输控制模块、图像封装模块、UDP顶层模块组成。开始传输控制模块用来解析以太网接收到的数据,当接收到上位机发送的数据为1时,将开始传输信号设定为真,否则将开始传输信号设定为假。图像数据封装模块将帧头信息、图像分辨率、图像数据封装起来,缓存待发送的图像数据,输出图像数据发送的字节数和发送信号。

UDP 顶层模块包含3个模块,首先接收模块解析接受到的数据判断目的MAC地址、IP地址与源MAC地址、IP地址是否一致。然后发送数据模块对数据进行封装,并通过CRC校验模块完成对封装数据的校验,确保数据的完整,最后等待开始发送信号的到来,完成数据的传输。

接收模块采用状态机跳转的形式进行数据接收,通过判断使能信号是否有效来接收前导码和以太网帧头,如果接收数据无误则继续接收IP首部、UDP首部以及UDP数据,否则视为数据接收错误,结束数据接收。所有数据接收无误,完成数据接收。同样UDP 发送模块也借助状态机来完成数据的接收,发送模块通过判定使能信号是否有效来进行状态跳转,首先对IP首部进行校验,校验无误后,依次发送前导码和SFD,发送完成后再依次以太网帧头、IP 首部和UDP 首部,最后发送UDP 数据以及对发送数据进行CRC 校验。数据校验成功后,完成以太网数据的发送。

3 实验结果

3.1 系统功能验证

本次实验以Vivado 2018.3为开发环境,以Verilog HDL为开发语言在Xilinx公司的A7系列FPGA开发板上实现。将OV5640摄像头连接到开发板上,通过网线将电脑和开发板相连,设置主机IP地址以及从机IP地址,上位机选定传输协议为UDP,并且设定好主机从机的端口号,搭建好测试环境。上位机打开即可传输视频图像,当视频图像中未出现运动目标时,上位机显示此时的实时画面,当视频图像中出现运动目标时,FPGA将实时检测并用红色的矩形框标记运动目标,将带有标记信息的视频图像传输到上位机显示,通过上位机即可实现远程监视的目的。本次实验通过不断晃动两支笔来模拟多个运动物体,FPGA实现对两支笔的检测并用矩形框进行标记,上位机实时显示检测结果,如图5~6所示。

图5 测试结果图

图6 以太网传输速度

通过实验完成对系统设计的检验,实现了远程监视运动目标的目的,本系统可实现最多16个目标的检测,也可通过手动更改检测数量,设置的检测目标越多所消耗的逻辑资源越多,系统的功耗越大。实验结果显示UDP传输速度达到了133 Mbit/s,上位机视频图像输出帧率为26 fps,大于人眼的可视帧率24 fps,图像分辨率为640*480,满足视频传输实时性的要求,可进一步运用到智能安防系统中。

3.2 系统性能分析

1)系统功耗:

由Vivado软件检测系统功耗如图7~8所示,总功耗为0.918 W,其中动态功耗为0.843 W,静态功耗为0.075 W,满足系统设计低功耗的要求。

图7 系统总功耗

2)系统资源利用率:

系统总的资源利用率如图9所示,由图可知,资源消耗均未超过45%,可以根据实际需求合理添加运动目标检测数量,数量越多资源消耗越大,功耗越大,为后续系统升级预留出大量资源。

图9 系统资源利用率

3)数据包抓取:

为进一步验证系统传输数据的稳定性和可靠性,通过Wireshark软件抓取图像数据,由图10,11可知,图像数据源IP 地址为 192.168.1.10,与开发板设定IP地址相同,目的 IP 地址为 192.168.1.102,与以太网设定IP地址相同,源端口号为1 234,与目的端口号相同,实现了1 322字节数据在线发送与接收,除去前导码、校验码等实际传输为1 280字节数据,实验验证了数据传输的完整性。

图10 Wireshark抓取到的图像数据

图11 某一帧图像详细的数据

4 结束语

本文分别从图像的采集、预处理、存储、运动目标的检测、以太网视频传输等方面介绍了基于FPGA的运动目标远程监视系统的设计方法,并通过实验验证和分析了系统的功能与性能的可靠性。实现了对多个运动目标的远距离监视和预警,上位机视频图像帧率为26 fps,以太网UDP的传输速度达到了133 Mbit/s,能够满足视频传输实时性的要求,为运动目标的远程监视提供了一种有效的解决方案。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!