收藏 分销(赏)

视频监控程序设计项目说明指导书.docx

上传人:二*** 文档编号:4710010 上传时间:2024-10-10 格式:DOCX 页数:22 大小:33.21KB
下载 相关 举报
视频监控程序设计项目说明指导书.docx_第1页
第1页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、视频监控系统程序设计说明书1引言1.1编写目标本文关键说明视频监控系统具体设计和实现。本文具体介绍了系统中各个模块设计和实现细节和关键技术应用。其中,对每一个模块会有对应文字说明和相关设计步骤图给出。1.2项目背景本项目是对本试验课程中所介绍课程综合应用。本项目关键针对unix/linux系统编程和基于C+语言GUI程序设计-QT进行针对性训练。意在加强学生对unix/linux系统编程了解和应用,提升学生实践能力、编程能力和分析问题和处理问题能力。而且经过对本系统中用户端设计和实现,让学生体会和熟悉面向对象编程思想和通常方法。1.3定义本系统=视频监控系统本文=视频监控系统设计说明书2总体设

2、计2.1需求概述本系统是基于C/S架构网络视频监控系统,关键由负责图形采集和传输Server端和负责监控(显示图像)Client端组成。本系统Server端是基于Linux系统网络服务类软件,关键由数据采集和网络服务两部分组成。数据采集部分利用v4l2(video for linux II)对网络摄像头进行控制和访问而且获取由摄像头捕捉到视频数据,然后再由网络服务部分将获取到视频数据进行封装成http帧并利用http协议发送到用户端。因为本系统Server端数据发送是基于http协议,所以本系统用户端没有平台限制,只要支持http1.0以上平台就能够访问本系统服务。而且,本系统服务能够直接经过

3、web浏览器访问(对firefox浏览器支持最好)。为了提升传输效率我们还需要进行用户端软件开发,因为对用户端没有平台要求,所在Windows、Linux、Android、等平台全部能够实现。本文主将以linux为例用Qt实现一个简易用户端软件。2.2软件结构servervideo servicedata capturedevicd configget datamove datacreate serverwait connectdata transferclientdisplayget datacreate socketconnect serverget datainit GUIload vi

4、deo dataupdate widgetTCP/IP图2.2.1视频监控系统结构图3程序描述3.1 Server:数据采集3.1.1功效配置设备并从设备中获取图像数据。依据设备信息利用v4l2(video for linux II)经过ioctl对USB摄像头进行配置,打开设备抓取功效开始采集并转存数据,采集完成以后关闭设备功效,最终关闭设备。 3.1.2技术概要本模块包含到大量对于设备I/O操作,关键经过video for linux II(v4l2)框架对设备进行设置和控制。其中包含部分特殊结构体属性赋值和部分特殊控制标识实际意义需要具体查阅v4l2提供API。3.1.3程序逻辑本节关键

5、以步骤图方法介绍Server端数据采集模块关键程序逻辑设计。startopen(“devicePath”, O_RDONLY)ioctl(fd, VIDIOC_QUERYCAP,& v4l2_capability)ioctl(fd, VIDIOC_S_FMT, &v4l2_format).ioctl(fd, VIDIOC_REQBUFS, &v4l2_requestbuffers)ioctl(fd, VIDIOC_QUERYBUF, &v4l2_buffer)data processingexit?endYN开始数据处理设置缓存属性申请缓存设置采集方法获取设备信息打开设备文件退出?开始是否图3

6、.1.1 Server端数据采集步骤图图3.1.1关键描述了服务端数据采集部分关键步骤和编程步骤。下面将对每一个步骤进行具体介绍:1.打开设备:打开视频设备(这里指我们USB摄像头)。利用linux系统提供接口函数open来对设备进行打开操作。图3.1.2对这一过程进行了具体描述。2.查询设备信息(或叫获取设备信息):startfd = -1fd = open()fd0?NYerror1查询设备驱动相关信息和和视频采集相关参数,依据获取到信息初步判定设备类型和将要处理数据类型。利用ioctl函数和v4l2提供v4l2_capbility和v4l2_format两个结构体来保留获取到设备驱动信息

7、和帧信息。具体步骤见图3.1.3。VIDIOC_G_FMT等属性含义需查询v4l2提供API。图3.1.2 打开设备子图struct v4l2_capabilitycapstruct v4l2_formatfmtmemset(&cap, 0, sizeof(cap);memset(&fmt, 0, sizefo(fmt);ioctl(fd, VIDIOC_QUERYCAP, &cap)ioctl(fd, VIDIOC_G_FMT, &fmt)return err?NerrorY1get info:cap.drivercap.cardcap.bus_infocap.versionfmt.fmt.

8、pix.pixelformatfmt.fmt.widthfmt.fmt.height2fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTUREfmt.fmt.pix.field = V4L2_FIELD_ANY图3.1.3 获取设备信息子图3.设置采集方法设置视频设备(这里指USB摄像头)采集方法,比如采集图像分辨率,帧采集速率(既每秒采集帧数量)等选项设置。用到v4l2中v4l2_format和v4l2_streamparm两个结构体和VIDIOC_S_PARM和VIDIOC_SFMT两个标识,相关介绍请查阅v4l2框架API信息。实现步骤详见图3.1.4。2struct

9、 v4l2_formatfmtstruct v4l2_streamparmparmmemset(&parm, 0, sizeof(parm);memset(&fmt, 0, sizefo(fmt);ioctl(fd, VIDIOC_S_PARM, &parm)ioctl(fd, VIDIOC_S_FMT, &fmt)fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTUREfmt.fmt.pix.field = V4L2_FIELD_ANYfmt.fmt.pix.width = WIDTHfmt.fmt.pix.htight = HEIGHTparm.type = V4L2_

10、BUF_TYPE_VIDEO_CAPTUREparm.parm.capture.timeperframe.numerator = 1parm.parm.capture.timeperframe.denominator = FPS/本模块用到宏定义#defineWIDTH320#defineHEIGTH240#defineFPS5return err?errorreturn3YN图3.1.4 设置采集方法子图4.申请缓存向驱动申请几块缓冲区(此处缓冲区是由内核管理,所以需要申请),用来存放设备采集到数据。用到v4l2中v4l2_requestbuffer结构体和VIDIOC_REQBUFS标识来

11、向设备驱动申请缓冲区。实现步骤详见图3.1.4。3struct v4l2_requestbufferrbmemset(&rb, 0, sizeof(rb);ioctl(fd, VIDIOC_REQBUFS, &rb)rb.count = NB_BUFFERrb.type = V4L2_BUF_TYPE_VIDEO_CAPTURErb.memory = V4L2_MEMORY_MMAP/本模块用到宏定义/表示申请缓冲区数量#defineNB_BUFFER5return err?errorreturn4YN图3.1.5 申请缓存子图5.设置缓存属性对申请到缓存进行设置,包含设置缓存访问方法(使用内

12、存映射访问方法),对缓存进行映射,建立缓存队列。4struct v4l2_bufferbufunsigned char * mem_listmem_list = (uchar *)calloc(NB_BUFFER, sizeof(uchar);inti = 0;iNB_BUFFERbuf.index = ibuf.type = V4L2_BUF_TYPE_VIDEO_CAPTUREbuf.memory = V4L2_MEMORY_MMAPioctl(fd, VIDIOC_QUERYBUF, &buf)mem_listi = mmap(0, buf.length, PROT_READ, MAP_

13、SHARED, fd, buf.m.offset)ioctl(fd, VIDIOC_QBUF, &buf)No error?NYYNreturn5error图3.1.6 设置缓存子图5.处理数据经过对设备设置VIDIOC_STREAMON和VIDIOC_STREAMOFF来控制设备开始/停止采集数据,在设置开始和停止之间经过对缓存轮换读取取得设备采集到数据并对其进行处理(这里数据处理关键做对图像压缩和传输两部分工作会在后面做具体介绍)。经过利用VIDIOC_QBUF和VIDIOC_DQBUF两个控制位来对缓冲队列进行入/出队列控制,从而取得设备采集到数据。详见图3.1.7。5struct v4

14、l2_bufferbufmemset(&buf, 0, sizeof(buf);ioctl(fd, VIDIOC_STREAMON, &buf)buf.type = V4L2_BUF_TYPE_VIDEO_CAPTUREbuf.memory = V4L2_MEMORY_MMAPreturn err?errorreturnYN数据处理ioctl(fd, VIDIOC_STREAMON, &buf)end图3.1.7 数据处理子图3.2 Server:数据处理3.2.1功效完成图像压缩,建立web服务供用户端访问。对摄像头采集到数据进行一次huffman编码把图片转换成jpeg或jpg格式(这个步

15、骤也能够在用户端完成,不过浏览器不支持此种实现)。建立一个基于TCP/IPweb服务器,当有用户端连接本服务时利用HTTP协议发送转换好数据。3.2.2 技术概要本模块关键包含到对原始图像数据压缩和基于C语言网络和多线程编程。相关图像压缩部分在本项目中不做研究所以只是简单调用已经有接口。对于网络服务功效和多任务处理功效实现全部是本项目要包含到关键内容,这里需要对基于C语言TCP编程和多线程编程比较熟悉,能够参考UNIX环境高级编程。3.2.2程序逻辑本模块作用实际是上一个模块中“数据处理”部分。因为设备采集到到每一帧数据经过huffman编码以后会变成一张完整图片,所以我们在下面发送数据部分要

16、做一个简单封装,下面分别给出程序步骤图(图3.2.1)和数据封装格式(图3.2.2)。startend建立Server socket绑定监听端口监听端口有用户端链接?开启用户端处理线程读取请求信息发送响应信息处理请求信息发送数据链接断开?N退出线程退出信号?YYNY图3.2.1 数据处理http响应头boundary帧头部图片数据boundary帧头部图片数据boundary .Content-type: Content-length:typelength空行图3.2.2 服务端帧封装结构3.3 Client:获取数据3.3.1功效向服务器发送请求,依据服务器响应信息接收数据。和服务器建立基于

17、TCP连接,向服务器发送http请求,接收服务器返回响应信息,并依据响应信息根据一定格式接收数据。3.3.2 技术概要本模块关键包含到基于TCP用户端编程,相关各户端编程方法比较灵活,在语言框架选择方面也比较广泛,像Java GUI、MFC、QT等全部能够实现。在这里我们一QT为例来实现用户端程序。3.3.3程序逻辑startsocket()read()accept()bind()listen()close()write()endstartsocket()write()connect()close()read()end三次握手链接写入数据读取数据关闭过程SERVERCLIENT这里关键包含到T

18、CP用户端编程和对服务器数据分割,TCP用户端编程比较程式化有统一编程步骤和通常步骤,数据分割需要依据服务端数据发送情况来确定。下面给出TCP网络编程步骤(图3.3.1)和数据分割步骤(图3.3.2).图3.3.2 TCP网络编程步骤start从socket中读取一行读到标识行?N获取图片长度读取图片发送数据准备好信号endY图3.3.3 用户端 数据分割步骤3.4 Client:显示3.4.1功效经过信号控制QT控件刷新图片。我们看到连续图像是由一张一张单独图片不停刷新形成,所以本模块关键功效是接收上一模块数据准备好信号后将新图像数据加载到控件并刷新控件,从而形成连续图像。3.4.2 技术概

19、要本模块关键包含到QT编程和使用,包含对部分控件控制和线程控制。因为循环显示图像时候会阻塞图形界面,所以用一个单独线程来完成刷新图像工作。对于QT相关部分知识请具体参考QT官方提供API。3.4.3程序逻辑页面刷新步骤,这里关键到QT中信号和槽机制来实现图像刷新。start连接服务器连接成功?接收到信号?YY犯错处理N等候信号N加载数据并刷新控件数据信号?Y响应信号处理N图3.4.1用户端显示模块步骤4总结本项目综合了试验教程中大部分课程,其中包含Linux 系统高级编程、C/C+编程、C+图形界面编程(QT4)、和多线程和TCP网络编程。上述列举内容全部是本试验课程关键内容中,要求学生让关键掌握并熟练使用,这也是是本项目最终目标。

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 通信科技 > 监控/监视

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服