由监控中心网络服务器和多台视频主机组成的监控终端与摄像头视频服务器进行网络互联所组成的基于Internet技术的Client/Server体系结构的传统数字监控系统软、硬件要求较高,且使用专业化,局限了视频监控在孤立、分散以及对成本要求较苛刻的场合的应用。随着现场可编程逻辑门阵列(FPGA)的应用越来越广泛,基于FPGA的各种控制器也越来越丰富,特别是SOPC、Nios II技术越来越成熟,合理有效地将各种模块无缝地连接到一起进行应用已成为一种趋势。本文就是在这样的背景下集成智能运动目标识别系统为一个片上系统,使得运动检测灵活应用成为可能。
1 系统设计原理
SOPC(System On Programmable Chip,可编程的片上系统)是Altem公司提出来的一种灵活、高效的SOC解决方案。本运动检测系统的硬件框图如图1所示。
图1 运动检测系统的硬件框图
系统选用的FPGA芯片是美国Altera公司最新推出的Cyclone II系列的EP2C35。该芯片具有35000个逻辑单元、672个引脚、475个用户自定义I/O接口、35个嵌入式乘法器和4个锁相环,是一个集成度极高和功能强大的FPGA芯片。在FPGA中设计有Nios II软核CPU和挂接在该Nios II系统的Avalon总线上的图像预处理模块、运动检测模块、Avalon三态桥、UART、LCD和通用并行接口等模块。SDRAM则采用了MICRON公司的MT46V16M16TG芯片,FLASH 则采用了AMD公司的AM29LV128M芯片,并使用了NEC 公司的NL2432DR22-22B液晶显示屏,图像传感器是HV7131R图像传感器,系统工作过程:当开发板开始/复位键按下,系统上电后,由Nios II通过Avalon总线对I2C配置的HV7131R图像传感器进行初始化,将HV7131R捕捉到的实时视频流传递给图像预处理模块;图像预处理模块将视频数据分两路进行处理:一路通过Avalon Tri-State Bridge传递给SDRAM用于暂存供LCD实时显示;另一路通过RGB/YUV格式变换提取Y分量,送入运动检测模块进行运动检测。运动检测模块根据运动检测算法判断所截取图像中是否有运动物体出现,若有则触发蜂鸣器报警,同时Nios II通过控制总线将SDRAM中的信息写入片外FLASH,以保存现场图像;或通过UART将数据传输给GPRS终端,便于网络接收和自动报警。
2 系统的硬件设计
Nios II软核、图像预处理、运动检测模块是系统的核心模块。
为了满足系统实时性的要求,对于图像预处理模块中RGB/YUV转换和运动检测算法采用Verilog硬件描述语言设计,由硬件完成相应的功能,在Quartus II平台上完成了系统的仿真、综合、映射、布局布线。在仿真结果正确后,通过器件编程(即通过编程器将设计下载到实际芯片中)进行系统调试,极大提高了系统的运行速度,充分利用了Cyclone II EP2C35的逻辑资源。
2.1 图像预处理模块
本设计的图像预处理模块主要完成Nios II对HV7131R图像传感器的配置、图像高速采集、视频流中图像帧的截取、RGB/YUV色彩空间转换的功能。
HV7131R是韩国现代公司采用0.3 um工艺生产的CMOS传感器,其有效像素大于30万个,功率损耗低于90mW。HV7131R配置方便,可通过标准的I2C接口设置芯片内部的控制寄存器,控制图像的曝光时间、分辨率、帧率、RGB增益、水平/垂直镜像等。HV7131R输出的是10位的RGB原始数据,我们只使用其高8位。
为了完成实时图像的高速采集,在采集端加入一个自行设计的输入FIFO控制接口IP核,并且在Nios II系统中加入Avalon DMA控制器,形成以DMA方式直接控制的FIFO和SDRAM之间的高速数据传输模式。该接口实现的功能是:当开始键按下时,根据I2C控制FIFO开始、并连续保存TD_DASTA端口的8位图像数据。当FIFO存储的数据达到设定的容量阈值(本设计采用每秒钟所采集的视频容量作为阈值)时,FIFO控制接口的dataavaible有效信号经由Avalon总线向DMA控制器提出传送请求。DMA控制器接受请求后,就直接控制数据从FIFO控制接口的Readdata端口写入SDRAM。FIFO控制接口设计完成后通过Quartus II连接在Nios II系统Avalon总线上。
本设计采用每秒1帧的频率截取视频图像,每间隔一秒钟,DMA控制器在将数据从FIFO控制接口的Readdata端口写入SDRAM的同时将FIFO中的第一帧图像送入RGB/YUV色彩空间变换模块,并保存入片内SRAM以完成后续工作。
在运动检测算法中,由于视频数据中Y分量是运动检测时最为敏感的分量,而做比较的两场抽样数据必须取自相同的场次,因此最多只需要存储一场有效行中的Y分量数据,这样需要的实际存储容量为:720×288=207360 Byte,需要的SRAM容量为256 kByte。所以图像帧在进入运动检测模块之前还需要进行RGB/YUV色彩空间变换,提取其中的Y分量。根据如下RGB/YUV色彩空间变换公式:Y=0.299R+0.587G+0.114B,利用Verilog硬件描述语言设计变换模块,采用硬件实现提升系统速度。
2.2 运动检测模块
近年来出现了许多新的运动检测算法,但可以归结为以下四大类:光流场分析算法、主动轮廓算法、统计模型算法以及帧差法。前三种方法与第四种方法相比,具有精度高定位准的优点。但算法的复杂性较高,目前难以在硬件平台上实现实时处理,因此,本系统采用了帧差法。帧差法是基于视频帧图像的变化分析,在连续的视频流中,图像若没有运动,连续帧之间变化很小,反之则会引起帧差。
本系统实现运动检测算法的具体流程如图2所示。系统一方面接收新的一帧FIFO控制器中的图像送入RGB/YUV变换模块进行Y分量的提取,另一方面读取SRAM中上一帧Y分量数据,并将两者作绝对差值运算,当绝对差值大于某个阈值时,表明此时视频流帧间发生了变化,系统触发报警使能信号,打开蜂鸣器发出警报;同时Nios II通过Avalon总线控制SDRAM将SDRAM中的现场视频流数据保存入片外FLASH中,记录现场。
图2 算法的具体实现流程
本模块采用Verilog硬件描述语言编写Nios II的定制指令,可以将一个复杂的标准指令序列简化为一个用硬件实现的单一指令,从而简化系统软件设计并加快系统运行速度。在运动目标检测跟踪算法中,对运动图像的处理数据运算量大,循环数目多,使用定制指令完成许多循环内的数据处理,从而加速数据处理的速度。定制指令逻辑和Nios II的连接在SOPC Builder中完成。Nios II CPU配置向导提供了一个可添加256条定制指令的图形用户界面,在该界面中导入设计文件,设置定制指令名,并分配定制指令所需的CPU时钟周期数目。系统生成时,Nios II IDE为每条用户指令产生一个在系统头文件中定义的宏,在c应用程序代码中直接调用这个宏。
2.3 Nios II软核
Nios II处理器系列是一个用户可配置的通用32位RISC嵌入式软核处理器系列,根据系统实时性的要求选择快速型(Nios II/f)Nios II处理器。这是一种高性能软核,它的处理能力超过200 MIPS,需要占用1800个逻辑单元,完全与二进制代码兼容。在SOPC Builder中对Nios II进行定制同时在系统中集成FLASH、SDRAM、自定义指令等,并生成本设计定制的Nios II系统。
3 系统软件设计
本设计的大部分模块都是由Verilog硬件描述语言来设计,由硬件来完成实际功能的。整个系统软件所要作的工作就是协调各个模块统一工作,并且处理系统各模块所产生的中断,使系统统一高效的工作。系统的软件设计是以c语言形式利用Altera公司的软件集成开发工具Nios II IDE所提供的硬件抽象层(HAL)的函数的支持来完成编写的。系统启动后,进行初始化工作,初始化程序主要完成HV7131R图像传感器的寄存器配置、初始化DMA通道、清FIFO控制接口的FIFO缓冲器、检查系统外围组建等。随后系统进入实时图像采集和显示状态,DMA控制器检测FIFO状态,当检测到FIFO可用时启动一次DMA传输,通过LCD控制模块进行LCD实时显示。当开发板上检测键按下,系统启动运动检测模块的自定义指令进行运动检测。根据检测结果作出相应响应,启动蜂鸣器报警并保存现场视频图像,或者进行新一轮的运动检测直到取消检测。
4 结束语
本文的运动目标检测跟踪系统利用32位Nios II软核处理器在CycloneII系列的EP2C35芯片为核心的实验板上进行了软、硬件调试,大大减小了系统的体积,而且在PC机上开发的程序可移植到Nios II处理器上来实现片上系统。从而方便地把用户需要的接口和自定义逻辑加入到系统中去。而且利用Altera公司提供的HardCopy技术实现了FPGA到ASIC的无缝转化,有效缩短了开发周期,同时能够延长产品的生命周期,还可以不断地在原有产品的基础上进行升级设计。实验结果表明,该运动检测系统具有较强的稳健性和实时性,能够快速有效地检测出运动目标。此外本系统可以通过GPRS接口连接个人手机/PDA作为智能家居安保系统,或者作为一个大型网络监控系统的终端使用,对于不同的需求只需在SOPC Builder中进行定制即可。