当前位置:首页 >> 信息与通信 >>

基于Qt的视频监控设计


嵌入式系统
081200B301a

基于 Qt 的视频监控设计

一、应用需求分析 近年来, 智能安防工作越来越受到重视,而视频监控作为安防的一种重要手 段,其实现技术也迅速发展起来,简单高效的视频监控系统的需求进一步扩大。 本系统设计实现一个基于 mini2440 的视频监控系统,包括摄像头视频采集、视 频编码储存、基于 Q

t 友好的操作界面等。其工作流程如图 1.1 所示: SDL 显示 USB 摄像头视 频采集 图 1.1 H264 编码储存 视频监控系统工作图 处理 SDL 屏幕事 件

本监控系统实现的功能有一下几个方面: [1] 摄像头视频的实时采集及显示、视频播放暂停与恢复 [2] 友好简单的操作界面 [3] 基于 H264 或 MPEG 的视频编码储存 基于现实安防的需要,本监控系统需要实现以下几个技术指标: [1] 实时视频的采集与显示,至少需要达到每秒 15 帧 [2] 快速的视频编码过程 [3] 快速的系统响应,友好的操作界面 [4] 很低的编码出错率,系统良好的鲁棒性

二、应用系统总体结构设计描述
2.1 硬件平台介绍 1) 核心板 Mini2440: Mini2440 是一款真正低价实用的 ARM9 开发板,是目 前国内性价比最高的一款学习板; 它采用 Samsung S3C2440 为微处理器, 并采用专业稳定的 CPU 内核电源芯片和复位芯片来保证系统运行时的稳 定性。

图 2.1 mini2440 实物图

2) 摄像头:采用罗技 USB 摄像头 2.2 软件开发环境 1) 跨平台 Qt 开源库: Qt 是一个跨平台的 C++图形用户界面应用程序框架, 支持 windows,Linux,MAC OS。利用 Qt 的开发环境 Qt Creator 可方便 进行 Linux 下的 UI 应用程序开发。 2) FFmpeg: ffmpeg 是一个开源免费跨平台的视频和音频流方案,属于自由 软件,采用 LGPL 或 GPL 许可证(依据你选择的组件) 。它提供了录制、 转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编 解码库 libavcodec,为了保证高可移植性和编解码质量,这里我们采用 H264 编码。 3) SDL:SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开 发包,适用于 游戏、游戏 SDK、演示软件、模拟器、MPEG 播放器和其 他应用软件。SDL 内置了调用 OpenGL 的函数。通过使用 SDL_image、 SDL_ttf、SDL_mixer、SDL_net 等外部扩展库,可以轻松实现 JPG、PNG、 TIFF 图像的加载使用,TrueType 字体的使用,MP3 文件的使用、网络相 关的使用等。 2.3 监控系统的框架图

USB Webcam ARM V4L2 接口采集 调用 SDL 接口显示 响应 SDL 事件 X264 开源 库边编码 C++ 标准库 储存编码数 据

图 2.2

监控系统框架图

三、系统实现
3.1 V4L2 接口采集摄像头数据 V4L2 较 V4L 有较大的改动,并已成为 2.6 的标准接口,函盖 video/dvb/FM... ,多数驱动都在向 V4l2 迁移。V4L2 采用流水线的方式,操作 更简单直观,基本遵循打开视频设备、设置格式、处理数据、关闭设备,更多的 具体操作通过 ioctl 函数来实现。本次设计采用 V4L2 接口获取摄像头数据,获 取的分辨力为 320*240。其主要实现步骤如下: (1)打开文件:调用 Open()函数打开设备文件,同时设置相应的设备属性,并 返回设备文件的句柄。 (2)获取设备属性:调用 ioctl()函数获取摄像头设备文件的相关参数,包括摄 像头的名称、分辨力等相关属性 (3) 设置格式及分辨力: 调用 ioctl()函数设置视频格式 (常见的有 RGB、 YUV422 及 MJPEG 等)及摄像头的拍摄分辨力(包括宽、高等) (4)申请缓存:设置申请缓存的类型及申请缓存的个数等 (5)缓存出对列:对申请成功的缓存进行队列操作,获取缓存的长度信息及并 使用 mmap()函数将内存地址映射到用户分配的地址空间中。 (6)缓存入队列:对每个申请的缓存进行入队操作,并使用 ioctl()函数开始进 行视频获取开始操作 (7)获取数据:循环等待摄像头数据,但摄像头数据可用时,进行出队列操作。 此时其 index 所对应的 mmap()映射的内存地址中就包含了摄像头数据,并调用 SDL 接口进行显示(SDL 内容见 2.3 章节) 。跳到 7,继续获取摄像头数据。 (8)关闭摄像头: 调用 close()函数关闭摄像头设备文件。 本次设计采用摄像头的采集分辨力为 320*240,数据格式为 YUV422 格式,摄像 头数据获取的流程图如 3-1 所示:

开始 使用 Open()函数打开 摄像头设备文件,返 回摄像头设备句柄 ioctl(Camera_fd, VIDIOC_QUERYCAP, &cap)函数获取摄像头的 相关属性信息 ioctl (Camera_fd, VIDIOC_S_FMT, &fmt)摄像 拍摄画面的格式 ioctl (Camera_fd, VIDIOC_REQBUFS, &req)进行缓存申请 ioctl (Camera_fd, VIDIOC_QUERYBUF, &buf)进 行缓存出队列操作,并将缓存 内存映射到用户的地址空间 ioctl (Camera_fd, VIDIOC_QBUF, &buf)进行缓存入队操作,并 ioctl (Camera_fd, VIDIOC_STREAMON, &type)开 ioctl(Camera_fd, VIDIOC_DQBUF, &buf) 始获取摄像头数据 进行缓存出队列,复制缓存的内存数据, 调用 SDL 进行显示 Y 最后一帧? 调用 close()函数关闭摄像头 图 3-1 程图 V4L2 采集摄像头视频流 N

3.2 SDL 接口显示视频数据 SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,适 用于 游 戏、游戏 SDK、演示软件、模拟器、MPEG 播放器和其他应用软件。 SDL 内置了调用 OpenGL 的函数。通过使用 SDL_image、SDL_ttf、SDL_mixer、 SDL_net 等外部扩展库, 可以轻松实现 JPG、 PNG、 TIFF 图像的加载使用, TrueType 字体的使用,MP3 文件的使用、网络相关的使用等。 开始 SDL 初始化: SDL_Init(SDL_INIT_VI DEO | SDL_INIT_AUDIO | 创建视频显示对象: SDL_INIT_TIMER) screen = SDL_SetVideoMode(WI DTH, HEIGHT, 0, 0); 创建位图对象: SDL_CreateYUVOverlay(WID TH, HEIGHT,SDL_YUY2_OVERL 将要显示的摄像头数据复制 AY, 到位图的内存空间, 同时通知 Y SDL 进行刷新 screen); 最后一帧? SDL_Quit() 图 3-2 SDL 显示摄像头视频流程图 在使用 V4L2 接口获取摄像头 YUV422 格式数据之后,在调用 SDL 将摄像头数 据实时显示在屏幕上。SDL 显示分为以下五步组成: 1) 初始化 SDL 链接库 2) 设置视频显示参数包括分辨率、像素深度及显示格式 3) 创建 SDL 显示窗口及与窗口连接的位图对象 4) 加锁位图对象, Socket 接受的摄像头数据复制到位图对象的内存空间, 将 最后解锁位图对象 N

5) 通知 SDL 刷新窗口 3.3 H26 视频编码 H.264 或称 AVC(Advanced Video Coding,高级视频编码) ,是一种视频压 缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。H.264 是一种 面向块的基于运动补偿的编解码器标准。H.264 因其是蓝光碟片的一种编解码标 准而著名,所有蓝光碟片播放器都必须能解码 H.264。它也被广泛用于网络流媒 體数据如 Vimeo、YouTube、以及 iTunes Store,网络软件如 Adobe Flash Player 和 Microsoft Silverlight, 以及各种高清晰度電視陆地广播 (ATSC, ISDB-T, DVB-T 或 DVB-T2) ,线缆(DVB-C)以及卫星(DVB-S 和 DVB-S2) 。这里我们采用 FFmpeg 中的 H264 编码函数库对 V4l2 采集数据 YUV422 数据进行编码, 其处理 流程有以下几个方面,其处理流程图如 3.3 所示 1) 图像数据预处理:从 YUV422 打包格式转换为 YUV420 平面格式 2) 初始化 FFmpeg 的相关库函数,包括 H264 编码器 3) 设置编码参数,包括压缩质量、图像分辨率等参数 4) 开始编码,对编码结果数据流写入磁盘保存 5) 释放编码器 H264 开始

图像数据预处理: YUV422 to YUV420

初始化编码器、设置编码参数 (压缩质量、图像方分辨率、数 据源等) H264 图像压缩

Last frame? Y 结束 图 3-3 H264 编码流程图

N

四、 系统调试分析及展望
4.1 系统性能分析 在 mini2440 上连接罗技 USB 摄像头,运行编写的监控软件,即可看到摄 像头拍到的画面,如下所示:

图 4-1 表 4-1 Index 1 2 3 总帧数

摄像头监控画面 系统实时性测试 时间(s) 平均每秒的帧数 (p/s)

我们对监控系统的实时性进行测试,共进行了一下三次测试,获得表 4-1 中数据

148 293 437

10 20 30

14.8 14.65 14.56

从上表数据可以看出监控系统采集帧数达到接近 15 帧每秒,基本满足监控 系统的实时性要求!同时我们对摄像头缓存数据采用 H264 进行压缩, 在不损失关 键图像数据的情况下,统计发现其压缩比达到 25 倍,达到监控系统的要求! 4.2 系统展望 对本监控系统的实时性、 编码效率及实用性进行测试,发现本系统存在以下 不足: 1) 实时性还存在不足, 在拍摄画面中存在运动场景时,存在短时间不流畅的 现象 2) H264 算法较为复杂,由于 mini2440 的处理能力有限,使系统压缩效率不 高 3) Mini2440 屏幕分辨率有限,无法显示高清监控画面 为此针对以上不足,在此提出以下改进意见:

1) 采用多线程编程技术,分离摄像头采集及 H264 编码过程,从而达到更高 的系统实时性 2) 对 H264 编码算法针对 ARM 平台进行优化,提高压缩效率 3) 添加无线传输模块, 将摄像头拍摄数据进行压缩后通过无线传输到远程服 务器上,实现数据备份,提高监控系统的稳定性!

五、设计感想和收获
通过本次课程设计实现了基于 mini2440 的视频监控系统,熟悉了 Linux 嵌入 式开发的流程,进一步熟悉了 Linux 下的视频采集 V4L2 接口、显示接口 SDL、 SDL 事件处理、H264 编码方法等。同时移植了 Qt4.7.2 到 mini2440 上,编写 Qt GUI 程序实现监控系统的人机交互画面, Qt 的信号与槽机制理解进一步加深, 对 提高了嵌入式开发流程的能力,提高了实践能力!


相关文章:
毕业设计视频监控系统的客户端设计
基于Qt的四路视频监控系... 22页 2下载券 基于B%2FS的视频监控系统... 暂无...视频监控系统的客户端设计 视频监控系统的客户端设计 摘要 随着人们对安全的需求...
基于Linux、QT的视频监控系统的设计与实现--毕业论文
基于Linux、QT的视频监控系统的设计与实现--毕业论文_工学_高等教育_教育专区。本科学生毕业论文(设计) 题目(中文): 基于 Linux、QT 的视频监控系统的设计与实现...
基于Qt的视频监控设计
基于Qt的视频监控设计_信息与通信_工程科技_专业资料。本监控系统实现的功能有一下几个方面: [1] 摄像头视频的实时采集及显示、视频播放暂停与恢复 [2] 友好简单...
基于QT的无线视频监控系统监控中心设计
基于QT的无线视频监控系统监控中心设计_互联网_IT/计算机_专业资料。基于Qt的无线视频监控系统,根据国嵌项目修改,源码请问1289957510@qq.com寻齐...
基于Qt的四路视频监控系统中客户端的设计与实现
基于Qt的四路视频监控系统中客户端的设计与实现_信息与通信_工程科技_专业资料。基于Qt的四路视频监控系统中客户端的设计与实现 论文 ...
视频监控程序设计那点事儿
视频监控程序设计那点事儿_IT/计算机_专业资料。视频监控程序设计那点事儿 这个...("/yanjl/qt/qt_jpg/han.jpg"); //设定要显示的图片 ui->label->set...
机场围界视频监控系统设计方案
机场围界视频监控系统设计方案_信息与通信_工程科技_专业资料 暂无评价|0人阅读|0次下载机场围界视频监控系统设计方案_信息与通信_工程科技_专业资料。机场围界视频...
基于Mjpeg-streamer的远程视频监控系统
2012届毕业设计说明书 基于Mjpg-streamer的远程视频监控系统 学 院: 电气与信息...在Linux平台上也需要QT设计GUI,使用SDL实现播放。二者客户端程序都 需要专门开发...
基于Qt4和OpenCV的嵌入式视频监控系统
龙源期刊网 http://www.qikan.com.cn 基于 Qt4 和 OpenCV 的嵌入式视频监控系 统 作者:刘冬 来源:《现代电子技术》2013 年第 08 期 摘要:当前有不少视频...
更多相关标签:
qt视频监控界面设计 | qt 视频监控 | qt 实现多路视频监控 | qt linux视频监控系统 | qt 网络视频监控 源码 | qt视频监控系统课设 | qt界面设计视频教程 | 界面设计qt5视频教程 |