【安防知识网】硬件设计
由于本系统使用Blackfin 561 DSP进行开发,因而整个系统可采用一块BF561 EZ-KIT Lite评估板、一台CCD摄像机、一台PC机和一个Blackfin USB-LAN EZ-Extender卡。
BF561 EZ-KIT Lite评估板主要用来实现智能处理算法以及对视频流的压缩编码功能。因为在BF561 EZ-KIT Lite评估板上包括有:视频处理芯片ADSP BF561;外部总线接口单元(EBIU)、SPORT接口、SPI接口、PPI接口、UART接口、JTAG仿真接口等。视频A/D模块采用ADV7183视频解码芯片。BF561 EZ-KIT Lite评估板结构如图1所示。
图1 BF561 EZ-KIT Lite评估板结构
Blackfin USB-LAN EZ-Extender卡
Blackfin USB-LAN EZ-Extender卡可连接USB设备,并通过网络传输已压缩的视频数据到PC客户端。因为在Blackfin USB-LAN EZ-Extender卡上包含有一个USB 2.0接口;一个10/100自适应网口等。
CCD摄像机
这一台CCD摄像机,主要用来采集视频。
PC客户端
该PC客户端主要用来接收压缩视频,配置和控制终端控制系统工作方式,并且能够存储系统的输出。
软件设计
基于Blackfin 561 DSP的智能视频监控系统软件部分,由上层PC监控服务软件和底层DSP监控功能软件两部分组成。上层PC部分主要进行监控功能选择和监控结果的显示,底层DSP部分主要进行智能监控和压缩编码的算法实现。视频监控系统通过使用UART和USB接口作为联系PC和DSP的通道,以实现数据的交换。其中,使用异步串口(UART)作为监控系统与PC端监控软件的通信接口,完成底层监控程序和PC端监控服务软件之间的通信;使用USB控制器作为压缩码流的数据传输接口,完成压缩码流向PC端的输送任务。 [nextpage]
智能视频监控系统同时使用Blackfin 561 DSP的两个核进行处理,通过PC服务软件和DSP端监控功能软件协同工作,其主要工作流程如图2所示。
图2 智能视频监控系统的工作流程
DSP端接收到一帧图像后,利用Blackfin 561 DSP的两个核完成智能视频监控处理和视频编码压缩处理。智能视频监控处理部分,利用Blackfin 561 DSP的核A进行,它首先通过UART通信模块获得PC端监控功能选择模块的当前功能,以及这一功能的相应参数,然后根据相应的功能调用监控功能模块中对应的监控函数进行处理;最后再利用UART通信模块将处理的结果传送到PC端显示。视频编码压缩处理部分,使用Blackfin 561 DSP的核B进行,利用由ADI公司提供的H.264编码函数和USB驱动函数实现,这里就不赘述了。
PC端进行不同监控功能的切换或调整功能参数,在下一帧输入图像中将进行监控功能的切换和参数的调整。
客户端软件
客户端软件是用户实现DSP监控操作的平台,主要由监控软件界面、监控功能选择模块、驱动函数模块组成。
监控软件界面是监控系统和用户进行信息交互的平台,它整合了各个监控功能模块,用户通过它完成各个监控功能模块的调用、参数的选择、结果的显示等。
PC监控功能选择模块完成对底层DSP监控功能的调用,从而实现用户需要的相应的监控功能。
驱动函数模块包括UART驱动和USB驱动。UART驱动的作用是实现上层PC的监控服务软件和底层DSP的监控功能程序之间的UART接口通信;USB驱动的作用是通过USB接口接收底层DSP发送的压缩码流。
DSP端监控功能软件
DSP监控功能软件是整个监控功能实现的核心,由监控功能模块、H.264视频压缩模块和UART通信模块组成。
DSP监控功能模块经PC端监控功能选择模块进行调用,直接负责完成相应的监控功能,并将结果传输到PC端。
H.264视频压缩模块负责将输入视频图像进行H.264压缩,并使用USB接口将压缩后的视频图像传输到PC端。
UART通信模块负责利用协议实现和PC端的通信。 [nextpage]
1、DSP监控功能模块
本文所设计的智能视频监控系统需要实现8个不同的智能视频监控功能。根据监控功能的不同性质和处理手段,主要分为:物体检测与数量统计、自动跟踪、入侵和遗留物体检测、摄像机模糊、遮挡及非法移动等4类不同功能。本模块通过从PC端功能选择模块获取监控信息,选择单一视频监控功能进行处理。监控功能模块流程如图3所示。
图3 监控功能模块流程
监控功能模块中大部分功能首先都需要进行相同的前期处理过程-运动对象的提取。本系统运动对象的提取主要包括背景建模和连通域标记两个部分,其主要流程如图4所示。
图4 运动对象提取
· 物体检测:物体检测需要根据运动检测的结果判断当前运动物体所属的类别,如人体、四足动物、四轮机动车、非机动车等。其使用高斯背景模型进行运动检测,提取目标的形状特征,并对它们进行分类,最后输出运动物体的位置、类别;
· 数量统计:数量统计需要在物体检测的基础上,统计各类物体或一类物体的数目,在统计过程中,还需要区分个体和群体。其在分类的基础上,使用计数器统计当前帧中各种目标的数量。最后输出各类物体数目,如个体数目、群体数目;
· 入侵检测:入侵检测需要判断场景中运动物体是否进入某一固定区域。其在运动检测的基础上,判断目标的位置与标定的”禁入”位置的相对关系,以实现入侵检测,最后输出入侵物体位置和类别;
· 遗留物体检测:遗留物体检测主要是检测固定区域内箱包类物体的非法滞留问题。具体说,主要是检测行人将箱包等遗留到场景中的情况(重点是为了排除爆炸物和危禁品)。当然,也包括将场景中原有物体拿走的情况。通过判断物体在监控场景中出现的时间的长短,来判断是否为遗留物体,输出遗留物体的位置及大小;
· 自动跟踪:自动跟踪实现对于运动对象的连续检测,通过对运动物体的跟踪,获得其位置、速度、运动轨迹等运动信息。使用卡尔曼滤波的方法进行目标跟踪,输出运动物体的位置及中心坐标等;
· 摄像机模糊、遮挡及非法移动检测:摄像机模糊、遮挡及非法移动检测是需要发现影响监控摄像机正常工作或者威胁监控摄像机自身安全的活动。使用DCT变换,统计全局的图像变化信息,判断摄像机是否模糊;利用图像灰度直方图变化信息,判断摄像机是否被遮挡;使用模板匹配的方法,判断摄像机是否非法移动,输出模糊、遮挡及非法移动情况信息和程度。 [nextpage]
系统优化
1、三缓冲结构
设置三缓冲组成缓冲区队列。在实际处理过程中,使用其中两个缓冲区进行数据接收,另外一个缓冲区进行图像处理等(具体的三缓冲区结构如图5所示)。
图5 三缓冲结构
利用回调函数对缓冲区进行管理,每接收完一整幅图像后产生一次回调。使用三个变量维护当前缓冲区状态,Frame Buffer1和Frame Buffer2用于维护在循环中接收的两个缓冲区,Frame Counter为当前最新接收到的缓冲区。每次接收数据的存储位置根据Frame Buffer1和Frame Buffer2的值决定。
在主循环过程中,使用一个变量Active Index维护当前处理中的缓冲区。每当开始处理新的一帧时,交换Frame Counter和Active Index的值,并同时更新Frame Buffer1和Frame Buffer2。实现将上一帧处理结束的缓冲区加到输入缓冲中,而将最新一帧缓冲并进行处理的目的。
2、算法优化
系统对大部分的功能实现算法进行了优化。在物体检测、数量统计、自动跟踪、入侵检测、遗留物体检测等算法中都需要使用背景模型。因此,系统重点对背景建模算法进行了优化。
背景建模主要包括两个部分:一是用当前图像和背景模型的均值和方差矩阵进行比较,得到前景图像和更新后的背景模型;二是对前景图像进行膨胀、腐蚀的形态学运算。
· 背景模型更新:模型更新过程涉及的数据有:当前图像帧缓冲(8位)、当前前景帧图像(8位)、背景均值模型(32位)、背景方差模型(32位)、前景驻留时间矩阵(16位)。为了提高运算速度,需要首先将内存搬运到L1中再进行处理。其步骤如下:
第一步:在L1内存中分配行缓存区用于计算,采用PINGPONG结构设计双缓冲区。
第二步:使用两个DMA通道用于输入和输出。首先使用异步DMA方式输入一行输入图像、均值和方差矩阵及驻留时间矩阵,交替使用current和bck指针分别指向输入和处理缓冲区,并不断更新实现双缓冲结构。这里要求从第二行输入起使用同步DMA方式进行传输,因此使用了回调函数Line In Caqll Back和input_index变量,实现依次输入4个缓冲区。
由于这里要求将输入并计算后的新均值、方差和驻留时间行矩阵传回SDRAM中,因此输出DMA采用异步方式,等待完成后才会开始下一次的DMA输入。这样,在一定程度上,可避免同时向一个SDRAM区读/写内存。
· 膨胀、腐蚀算法:这里同样也使用行处理方式进行膨胀、腐蚀两步运算。根据膨胀、腐蚀算法的特点,需要输入3行缓冲,然后进行一行的处理。因此,需设计使用6行输入的前景缓冲和两行膨胀、腐蚀处理结果作为3行输入和1行输出双缓冲。由于输入和输出的缓冲区没有冲突问题,因而输入和输出均采用同步模式,并注意输入缓冲增量设为一行。