您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 会议纪要 > 视频处理接口概要设计方案
视频处理接口概要设计基于嵌入式系统的智能安防系统V1.0编写:甘淼日期:2015-08-15检查:胡德昆日期:审核:日期:批准:日期:成都大学计算机学院1、系统概述本系统是基于嵌入式的智能安防分析系统,系统拓扑图如图1所示,接口利用高清监控摄像头获取视频数据,通过视频分析接口分析视频,并将异常发送至终端。视频采集层:本系统对摄像头图像的采集,主要是利用linux内核提供的usb设备的编程框架v4l2。通过v4l2可以简单方便的打开usb和板载摄像头,以及对摄像头属性、格式的设定。视频分析层:本接口自动将传入的各种视频原始数据(YUV420、YUV422)转换成视频分析所需要的视频格式(RGB24),再通过分析RGB24视频流来发现异常(摄像头干扰、物体闯入、陌生人员等)。报警应用层:若系统检测出异常,则使用报警应用层将异常信息推送至报警设备,报警设备可以是电脑端、手机端、平板端以及其它报警设备,报警应用层负责对报警设备的管理或者对报警信息的推送等等。Main管理层:对视频采集模块、视频分析模块以及报警模块做统一管理。通过调用视频采集模块获取视频流,并将视频流传入视频分析接口,若接口返回异常,则调用报警模块。图1系统拓扑图2、系统结构本系统主要分为三层结构,视频采集层、视频分析接口层以及报警层。实现的功能模块有视频采集、视频格式转换、摄像头干扰检测、人脸检测与识别以及物品出入检测。功能结构图如图2所示:采集设备1采集设备2采集设备3视频采集层采集模块V4L接口、SDK等...分析接口层YUV视频格式转换转换公式人脸检测检测算法人脸识别识别算法干扰检测干扰算法物件识别识别算法RGB视频报警模块(待定)报警设备1报警设备2报警设备3...应用层异常信息图2系统功能结构图系统通过高清摄像头来获取实时监控视频,由于获取的视频帧格式YUV420和YUV422格式,所以系统会先将视频格式转换至视频分析算法需要的RGB24格式,分析接口层负责分析视频信息,如若分析接口分析出异常,则调用报警模块来管理报警设备或者发送报警信息,接收报警信息的设备为远程终端或者本地报警设备。①采集设备:系统暂定为ARM自带的板载摄像头或者外接的USB摄像头,系统可以采集这两种设备视频信息,若要使用其它类别的摄像头,比如网络摄像头等等,则需要重新设计编码采集模块。②采集模块:系统通过调用Linux内核提供的IO通道管理接口V4L2来获取实时视频,因为V4L2管理USB摄像头和板载摄像头采用的是相同的管理方式,所以本系统同时对者两种设备兼容。③格式转换模块:系统获取到的视频为YUV420和YUV422格式,本模块负责将YUV格式的视频转换成RGB格式的视频。④干扰检测模块:通过设计的干扰检测算法来分析实时视频,如若分析出摄像头受到遮挡或者干扰,返回干扰异常。⑤人脸检测模块:通过训练好的人脸模型,来对实时视频帧做遍历检测,若找到人脸,则返回人脸轮廓。⑥人脸识别模块:若人脸检测模块找到人脸轮廓,则本模块负责分割人脸图像,然后与训练好的人脸作比对,返回相应的人名。若人脸检测模块未找到人脸,则本模块不做处理。⑦物品检测模块(待定):通过相应的物品检测算法来分析实时视频帧,若检测到物品出入,则返回异常,若未检测到物品出入,则返回正常。⑧报警模块:报警模块负责接收相应的报警状态,然后做出相应的报警操作,报警操作主要包括对本地报警设备的管理,和发送报警信息至远程终端。⑨报警设备:报警设备可以是本地设备(蜂鸣器、显示器等),也可以是远程终端(PC机、手机、平板电脑等)。3、模块分析3.1视频采集模块3.1.1模块功能视频采集模块主要通过linux提供的V4L接口来管理摄像头,模块主要功能有摄像头的打开、初始化、帧提取以及关闭摄像头,模块流程如图3所示:摄像头初始化1)格式查询2)格式设置3)缓存申请4)缓存映射打开摄像头1)打开设备文件2)获取deviceId获取视频帧1)select机制2)获取视频帧关闭摄像头1)关闭帧流2)关闭文件Vfd缓存Vfd图3采集流程V4L利用open函数打开设备文件并获取设备文件标识符,然后通过接口函数ioctl和文件标识符来管理IO通道,达到初始化摄像头的目的。由于申请到的缓存属于内核存储区,所以需要用mmap函数将内核存储区映射到用户存储区。V4L关闭摄像头,就是利用ioctl来关闭视频流,用close函数关闭设备文件,从而达到对关闭摄像头所做的善后处理。3.1.2模块接口函数⑴打开摄像头接口函数:boolopenCam(char*device);函数功能:打开摄像头的设备文件,获取到摄像头的设备ID,成功返回true,失败返回false。函数介绍:1)device:为摄像头设备文件的路径,由接口外部传入接口。2)vfd:获取到的设备文件标识符。3)O_RDWR:以读写方式打开文件。⑵摄像头初始化接口函数:voidcamInit();函数功能:查询摄像头支持的所有格式、设置帧格式、申请帧缓存、将缓存映射到用户存储区、打开视频流。函数介绍:1)intioctl(intfd,intcmd,…);fd:文件标识符cmd:VIDIOC_RECBUFS分配内存VIDIOC_QUERYBUF把VIDIOC_RECBUFS中分配的内存转换成物理地址VIDIOC_ENUM_FMT查询当前驱动支持的视频格式VIDIOC_S_FMT设置当前驱动的频捕获格式VIDIOC_G_FMT读取当前驱动的频捕获格式VIDIOC_TRY_FMT验证当前驱动的显示格式VIDIOC_QBUF把数据从缓存中读出来VIDIOC_DQBUF把数据放入缓存队列VIDIOC_STREAMOM打开数据流VIDIOC_STREAMOFF关闭数据流2)V4L2_FIELD_NONE以逐行采用获取视频3)V4L2_MEMORY_MMAP以映射方式读取缓存4)mmap函数将内核缓存区映射到用户内存区⑶取帧接口函数:unsignedchar*getFrame();函数功能:读取帧序列中的一帧,返回帧缓存首地址函数介绍:1)intselect(vfd+1,&rfds,NULL,NULL,&ts)select机制2)VIDEO结构体用户缓存一帧⑷关闭摄像头接口函数:voidcloseCam();函数功能:关闭数据流,关闭设备文件函数介绍:1)vfd设备文件标识符2)close()关闭文件3.1.3模块私有函数⑴视频格式查询私有函数:voidqueryFormat();函数功能:查询设备驱动支持的视频格式,存储结构为structv4l2_fmtdescfmtd,提供给格式设置时调用函数介绍:利用ioctl接口的VIDIOC_ENUM_FMT宏控制查询视频格式,存储在v4l2_fmtdesc结构中3.1.4结构介绍⑴structv4l2_format{enumv4l3_buf_typetype;union{/*V4L2_BUF_TYPE_VIDEO_CAPTURE*/structv4l2_pix_formatpix;//本系统中的格式/*V4L2_BUF_TYPE_VIDEO_OVERLAY*/structv4l2_windowwin;/*V4L2_BUF_TYPE_VBI_CAPTURE*/structv4l2_vbi_formatvbi;/*V4L2_BUF_TYPE_SLICED_VBI_CAPTURE*/structv4l2_sliced_vbi_formatsliced;/*userdefined*/__u8raw_data[200];}}⑵structv4l2_pix_format{__u32width;//帧宽__u32height;//帧高__u32pixelforamt;//帧格式enumv4l2_filedfiled;//采样区域__u32bytesperline;//备用__u32sizeimage;//图像大小enumv4l2_colorspace;//颜色空间__u32priv;//私有数据}⑶structv4l2_requestbuffers{__u32count;//缓存区大小,帧数量enumv4l2_buf_typetype;//缓存区类型enumv4l2_memorymemory;//内存区的使用方式__u32reserved[2];//}3.2格式转换模块3.2.1模块功能格式转换模块的功能就是负责将采集模块采集到的视频转换成视频分析所需要的格式。其中分为YUV420转IplImage、YUV422转IplImage以及RGB转IplImage,转换流程如图4所示:遍历像素转换公式最后像素?IplImage帧YUV帧否是图4格式转换流程本系统使用的摄像头暂定为arm板载摄像头和USB摄像头,获取的视频格式分别为YUV420打包格式和YUV422平面格式,所以本模块暂时只支持这两种格式转换,YUV转RGB的通用公式如公式(1)。系统采用的是计算机视觉开源库opencv,所以还需要将RGB数据转换成IplImage结构,这里要注意IplImage结构通道排列为BGR。101.4021-0.3441-0.7141(-128)11.7720(-128)RYGUBV(1)3.2.2模块接口函数⑴原始数据转IplImage接口函数:IplImage*DATA_2_IplImage(unsignedchar*input,intwidth,intheight,enumframeformatformat);接口功能:YUV422平面格式转IplImage、YUV420打包格式转IplImage以及RGB格式转IplImage的统一封装接口,提供给各个分析模块调用接口介绍:1)input输入的原始数据帧2)width帧宽度3)height帧高度4)format原始帧格式,这里支持YUV422(平面)、YUV420(打包)、RGB24⑵YUV420转IplImage接口函数:IplImage*YUV420_2_IplImage(unsignedchar*input,intwidth,intheight);接口功能:将yuv420数据帧转换成IplImage帧(备用)接口介绍:1)input传入的yuv420数据2)width帧宽3)height帧高⑶YUV422转IplImage接口函数:IplImage*YUV422_2_IplImage(unsignedchar*input,intwidth,intheight);接口功能:将yuv422数据帧转换成IplImage帧(备用)接口介绍:1)input传入的yuv422数据2)width帧宽3)height帧高⑷RGB转IplImage接口函数:IplImage*BGR_2_IplImage(unsignedchar*input,intwidth,intheight);接口功能:将RGB数据帧转换成IplImage帧(备用)接口介绍:1)input传入的BGR数据2)width帧宽3)height帧高3.2.3模块私有函数⑴YUV420转BGR私有函数:boolYUV420_2_BGR(unsignedchar*puc_y,unsignedchar*puc_u,unsignedchar*puc_v,unsignedchar*puc_rgb,intwidth,intheight);函数功能:将YUV420原始数据转换成IplImage需要的BGR24格式,提供给YUV420_2_IplImage接口使用函数介绍:1)puc_yY通道分量2)puc_uU通道分量3)puc_vV通道分量4)puc_rgb输出的BGR数组5)width、height帧的宽高⑵YUV422转BGR私有函数:boolYUV422_2_BGR(unsignedchar*yuv_buf,unsignedchar*rgb_buf,intwidth,intheight);函数功能:将YUV422数据转换成I
本文标题:视频处理接口概要设计方案
链接地址:https://www.777doc.com/doc-2096137 .html