视频监控程序设计说明书
- 格式:pdf
- 大小:238.09 KB
- 文档页数:24
视频监控系统程序设计说明书
1.引言
1.1编写目的
本文主要说明视频监控系统的详细设计与实现。本文详细介绍了系统中各个模块的设计与实现细节以及关键技术的应用。其中,对每一个模块会有相应的文字说明以及相关设计流程图给出。
1.2项目背景
本项目是对本实验课程中所介绍的课程的综合应用。
本项目主要针对unix/linux系统编程和基于C++语言的GUI 程序设计--QT进行针对性训练。旨在加强学生对unix/linux系统编程的理解和应用,提高学生的实践能力、编程能力以及分析问题和解决问题的能力。并且通过对本系统中客户端的设计和实现,让学生体会和熟悉面向对象编程的思想和一般方法。
1.3定义
本系统=视频监控系统
本文=视频监控系统设计说明书
2总体设计
2.1需求概述
本系统是基于C/S架构的网络视频监控系统,主要由负责图形采集和传输的Server端和负责监控(显示图像)的Client端构成。
本系统Server端是基于Linux系统的网络服务类软件,主要由数据采集和网络服务两部分构成。数据采集部分利用v4l2(video for linux II)对网络摄像头进行控制和访问并且获取由摄像头捕获到的视频数据,然后再由网络服务部分将获取到的视频数据进行封装成http 帧并利用http协议发送到客户端。
由于本系统Server端的数据发送是基于http协议的,所以本系统客户端没有平台限制,只要支持http1.0以上的平台就可以访问本系统的服务。而且,本系统服务可以直接通过web浏览器访问(对firefox浏览器支持最佳)。为了提高传输效率我们还需要进行客户端软件的开发,由于对客户端没有平台要求,所在Windows、Linux、Android、等平台都可以实现。本文主将以linux为例用Qt实现一个简易的客户端软件。
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
取到的信息初步判断设备类型以及将要处理的数据类型。利用ioctl 函数以及v4l2提供的v4l2_capbility和v4l2_format两个结构体来保存获取到的设备驱动信息和帧信息。详细流程见图3.1.3。VIDIOC_G_FMT等属性的含义需查询v4l2提供的API。
图3.1.2 打开设备子图
图3.1.3 获取设备信息子图
3.设置采集方式
设置视频设备(这里指USB摄像头)的采集方式,例如采集图像的分辨率,帧的采集速率(既每秒采集帧的数量)等选项的设置。用到v4l2中的v4l2_format和v4l2_streamparm两个结构体以及
图3.1.7 数据处理子图
3.2 Server::数据处理
3.2.1功能
完成图像压缩,建立web服务供客户端访问。
对摄像头采集到的数据进行一次huffman编码把图片转换成jpeg或者jpg格式(这个步骤也可以在客户端完成,但是浏览器不支持此种实现)。
建立一个基于TCP/IP的web服务器,当有客户端连接本服务时利用HTTP协议发送转换好的数据。
3.2.2 技术概要
本模块主要涉及到对原始图像数据的压缩以及基于C语言的网络和多线程的编程。
关于图像压缩的部分在本项目中不做研究所以只是简单的调
用已有接口。对于网络服务功能以及多任务的处理功能的实现都是本项目要涉及到的重要内容,这里需要对基于C语言的TCP编程和多线程编程比较熟悉,可以参考《UNIX环境高级编程》。
3.2.2程序逻辑
本模块的作用实际是上一个模块中的“数据处理”部分。由于设备采集到到的每一帧数据经过huffman编码以后会变成一张完整的图片,所以我们在下面发送数据的部分要做一个简单的封装,下面分别给出程序流程图(图3.2.1)和数据封装格式(图3.2.2)。
图3.3.3 客户端数据分割流程
3.4 Client::显示
3.4.1功能
通过信号控制QT控件刷新图片。
我们看到连续的图像是由一张一张的单独的图片不断刷新形成的,所以本模块主要功能是接收上一模块的数据准备好信号后将新的图像数据加载到控件并刷新控件,从而形成连续的图像。
图3.4.1客户端显示模块流程
4.总结
本项目综合了实验教程中的大部分课程,其中包括Linux 系统高级编程、C/C++编程、C++图形界面编程(QT4)、以及多线程和TCP 网络编程。上述列举的内容都是本实验课程重点内容中,要求学生让重点掌握并熟练使用,这也是是本项目最终目标。