ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:1.47MB ,
资源ID:24507168      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24507168.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于ARM的远程监控系统设计.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于ARM的远程监控系统设计.docx

1、基于ARM的远程监控系统设计基于ARM的远程监控系统设计课题名称 基于ARM的远程监控系统设计 专 业 电子信息工程 摘 要 随着工业技术的不断发展,以及人对安全防范意识的逐渐加强,视频监控系统已经成为人们在生产、生活中必不可少的一个部分。特别是近年来,随着计算机技术的发展、宽带的普及、图像处理技术的提高,视频监控在越来越广泛地渗透到教育、娱乐、医疗、运动等各个领域。视频监测系统已经成为当今可视化领域的一个新的开发热点。许多应用领域对于视频监控系统提出了更高更新的要求,如何经济有效地实现特定环境所需的监控功能,给我们提出了新的课题。 本文设计和实现了基于ARM9和Linux操作系统的嵌入式视频

2、监控系统,实现视频图像的采集、压缩和传输。文章结合嵌入式技术、图像压缩技术和网络技术,设计了一种基于嵌入式的网络视频监控系统。 本文首先研究了视频监控系统的发展现状及今后发展趋势,详细分析了嵌入式监控系统的基本原理和性能要求,提出了系统的设计的总体方案。在硬件设计方面,系统采用三星公司的$3C2410A作为嵌入式处理器,配合外围硬件电路构成嵌入式核心板。系统采用模块化设计方案,将硬件划分为三大模块:主控器与储存器模块;电源时钟复位电路模块;外围接口电路模块。在论文中对各个部分进行了详细的介绍。完成了核心板的硬件设计后,接下来介绍如何构建嵌入式监控系统的软件平台,包括成功的移植Linux操作系统

3、;嵌入式Linux下USB接口摄像头驱动的接口和实现。最后在基于嵌入式Linux系统的平台上完成应用程序的设计,完成视频图像的采集、压缩、传输,这部分主要完成的工作有:如何使用Vide04Linux API库函数实现图像采集;如何实现视频的软件压缩;如何保证视频流数据的实时传输。 本文实现了一种体积小、成本低廉、数字化的监控解决方案。该系统可满足监控系统对数据传输可靠性和实时性的要求,具有广泛的应用价值。1.绪论当今社会是一个高速发展的社会,信息获取的方便快捷可以使我们领先一步并创造出巨大的利益,而我们或许信息的一个重要途径就是眼睛。在人的感官中有80%是来自是觉1。图像时客观事物的形象、生动

4、的描绘,是直观而具体的信息表达方式,是人类重要的信息载体。随着科学技术的快速发展和人民物质生活水平的提高,视频监控系统以其直观、方便和信息内容丰富的特点,日益受到人们的青睐,并在各行各业得到了广泛的应用。生活中有电梯监控,门禁,车库监控等等。电讯行业有基站监控,银行系统又柜员机监控,林业部门有火情监控,交通方面有违章监控和流量监控等。1.1嵌入式系统简介嵌入式系统(Embedded System)是计算机的一种应用形式,通常指嵌入在宿主设备中的微处理机系统。它所强调的是:隐藏计算机的常见形式,辅助寄宿主设备,使宿主设备的功能智能化。据此,通常把嵌入式系统定义为一种以应用为中心,以计算机为基础,

5、软硬件可以剪裁,适用于系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统011。嵌入式系统有如下共同点:(1)功能专一:专门为某一特定应用系统而设计;(2)结构紧凑:嵌入式系统结构必须特别的紧凑,从而达到小体积,高性能,低成本,低功耗;(3)智能灵活及实时性:要对不同的情况做出不同的反应,同时必须实时地 给出计算的结果并进行实时控制。 (1)硬件环境硬件环境是整个嵌入式操作系统和应用程序运行的硬件平台,不同的应用通常有不同的硬件环境。在做嵌入式设计的时候要根据不同的性能需求设计不同的底层硬件。(2)嵌入式操作系统嵌入式操作系统控制着应用程序编程与硬件的交互作用,保证系统的运行以及各

6、种操作的实现。它为应用程序提供了一个软件平台。嵌入式操作系统具有相对不变性。(3)嵌入式应用程序运用程序运行于操作系统之上,利用操作系统提供的机制完成特定功能的嵌入式应用。不同的系统需要设计不同的嵌入式应用程序。1.2 课题背景 课题来源于电梯网络视屏监控系统,电梯网络视频监控系统由位于控制柜中的服务器、客户端组成,实现一个具有视频采集压缩及传输功能的可以直接接入以太网的网络摄像机基本过程是:电梯发生故障时,维护人员在客户端上拨号接通服务器,由于服务器实时采集电梯内的视频图像,并通过以太网传送给客户端,维护人员可以通过监控客户端来实现电梯内的监控。1.3 论文主要内容和结构安排 针对监控系统中

7、的关键技术进行分析,本文将重要研究一下内容 (1)嵌入式操作系统的实现 在ARM微处理器上运行嵌入式操作系统,可以为上层软件的开发提供统一的接口,方便系统功能的进一步扩展升级。 (1)图像信号的采集与压缩 通过伸向头采集视频数据后,再进行视频图像压缩。选用合适的视频图像压缩方式对远程监控的效果有很大的影响。MJPEG视频压缩方式对视频数据信号采用帧内压缩,而不进行帧间压缩,容易实现,成本较低6。(1)视频数据的网络传输 嵌入式Linux系统具有完整的TCP/IP协议,因此,可以采用socket编程建立一个基于TCP/IP的嵌入式视频服务器。 全文结构安排如下: 第一章:综合论述了视频监控系统的

8、现状和发展情况。 第二章:提出了本系统的整体结构,介绍了S3C6410的体系结构。 第三章:研究嵌入式Linux在ARM上的裁减和移植。 第四章:简单介绍了基于V4L的视频采集程序以及图像压缩理论 第五章:视屏传输的实现。介绍了建立连接的相关内容并对本系统连接测试。 第六章:对本文的工作进行总结,并提出展望。2.系统整体结构2.1 视屏监控系统的结构设计 基于嵌入式技术的监控系统前端采用摄像头采集视频流,然后通过网络传输到接受者。整体结构如图2.1.1所示。该系统采用基于ARM11的S3C6410X微处理器,通过在处理器上运行Linux操作系统,构建嵌入式服务器,接受来自摄像头的视频流,再进行

9、压缩编码,再传送实现监控7。2.2 ARM处理器简介 ARM(AdvancedRISCMachines),既可以认为是一个公司的名字,也可以认为是对微处理器的通称,还可以认为是一种技术的名字。 ARM处理器是一个32位元精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。ARM处理器具有以下特点8:1、体积小、低功耗、低成本、高性能; 2、支持Thumb(16位)/ARM(32位)双指令集,兼容性好。3、大量使用寄存器,指令执行速度更快; 4、大多数数据操作都在寄存器中完成; 5、寻址方式灵活简单,执行效率高; 2.3 S3C6410体系结构 S3C64xx系列的应用处理器芯片

10、是三星主推的,三星目前推出了S3C6400和S3C6410,都是基于ARM11架构的,而且硬件管脚兼容,应该说大致的功能基本相同,比较明显的区别就是S3C6410带有2D/3D硬件加速9。 S3C6410是一个强大的应用处理器,该芯片架构如图2.3.1:3. 嵌入式系统软件平台3.1 Linux 操作系统简介 Linux是一种自由和开放源码的类Unix操作系统。目前存在着许多不同的Linux,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。Linux是一个领先的操作系统,世界上运算最快的10台超级

11、计算机运行的都是Linux操作系统。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。Linux得名于计算机业余爱好者Linus Torvalds。10Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的Linux 2.4版内核已经能够完全支持Intel 64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大

12、提高。ARM技术和Linux成功的结合充分满足了各类应用对嵌入式平台高性能、低功耗和低价格的要求,通过开发环境、开源社区和ARM的商业伙伴的有时为嵌入式开发停工了灵活的选择11。3.2 交叉编译环境的建立 通常嵌入式系统的软件编译和执行是两个不同平台上进行的。编译时在宿主机上进行的,执行是在目标机,及嵌入式系统的硬件平台。一般是在宿主机通过跨平台交叉编译器把源文件编译成目标平台可执行的文件在通过串口、并口或者网络下载至目标凭条的FLASH或者其他存储介质,然后由目标机来运行这些软件。本系统采用基于ARM11的S3C6410,可以使用常用的ARM交叉编译器,要成功构建完整的交叉编译环境,余姚在宿

13、主机上创建一系列的工具,包括C/C+编译器、汇编器、连接器、嵌入式系统的标准C库和GDB代码调试器,成功建立好后便可以用这些工具进行嵌入式系统开发了16。3.3 嵌入式Linux移植 BootLoader是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMI core的嵌入

14、式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。专用的嵌入式板子运行GNU/Linux系统已经变得越来越流行。一个嵌入式Linux系统从软件的角度看通常可以分为四个层次12: 1、 引导加载程序。包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分。 2、 Lniuxn内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3、 文件系统。包括根文件系统和建立于Flash内存设备之上文件系统。通常用ramdisk来作为rootfs。 4、 用户应用程序。特定于用户的应用程序。

15、有时在用户应用程序和内核层之间可能还会包括一个嵌入式应用程序。常用的嵌入式GUI有:MicroWindows和MiniGUI等。 引导加载程序是系统加电后运行的第一段软件代码。PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OS BootLoader(比如,LILO和GRUB等)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OS BootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。 通常,BootL

16、oader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。Boorloader的实现以来与CPU的体系结构,一般来说启动过程分为两个阶段13:第一阶段以来于CPU的体系结构大代码,比如设备初始化代码等。这个阶段完成的任务如下:(1)硬件设备初始化(2)为第二阶段准备RAM空间(3)复制Bootloader的第二阶段代码到RAM空间中(4)设置好堆栈并跳转到第二阶段的C程序入口点 第二阶段则通常用C语言来实现,这

17、样可以实现复杂的功能,而且代码会具有更好的可持续性和移植性。这个阶段的主要任务有:(1)初始化本阶段要使用的硬件设备(2)检测系统内存映射(3)将内核映像和根文件系统从FLASH读到RAM中(4)为内核设置启动参数3.4 Linux平台下mjpg-streamer移植 本系统选用嵌入式Linux作为目标机操作系统,一方面由于Linux是一款免费的操作系统,能很好的见底成本,同时Linux的开发应用现在应经成为热门,有大量的资源可供学习与使用,并且Linux系统具有良好的可移植性和可裁剪性,能自动支持多任务管理。本系统采用ARM开发平台,所以依赖ARM硬件平台的代码都在arch/arm下面。根目

18、录下面只需要修改Makefile文件,该文件主要任务是产生vmLinux文件盒内核模块,对该文件的修改主要是设置目标平台和制定交叉编译器14在 /opt/mini6410 目录下创建目录 webcamera 来作为我们本次移植工作的工作目录,输入以下命令创建: # mkdir p /opt/mini6410/webcamera 进入webcamera 目录下,通过 SVN 下载最新的mjpg-streamer - mini2440 项目源代码: # cd /opt/mini6410/webcamera/ # svn checkout http:/mjpg -streamer - mjpg-st

19、reamer - mini2440 -read -only 输入以下命令进行mjpg-streamer - mini2440 -read -only 目录: # cd mjpg-streamer - mini2440 -read -only 根据以下指示修改: 1) 用vi 编辑start_uvc_yuv.sh, 将内容: ./mjpg_streamer -o output_http.so -w ./www -i input_uvc.so -y 修改成 ./mjpg_streamer -o output_http.so -w ./www -i input_uvc.so -y -d /dev/v

20、ideo2 2) 用vi 编辑Makefile a) 在clean:处删除 make -C plugins/input_s3c2410 $ b) 再删除以下内容: input_s3c2410.so: mjpg_streamer.h utils.h make -C plugins/input_s3c2410 all CC=$(CC) cp plugins/input_s3c2410/input_s3c2410.so . c) 再到package: 处删除以下两行: input_s3c2410.so start_s3c2410.sh 3.5交叉编译mjpeg-stream 执行以下命令进行编译并打

21、包: # cd /opt/mini6410/ webcamera/ mjpg-streamer - mini2440 -read -only / # export CC=arm-linux-gcc # make # make package 在当前目录下会生成 mjpg-streamer - mini2440 -bin.tar.gz, 将它拷入 SD卡备用。 Mini6410 上的摄像头 Bin”目录下找到我们编译好的可执行文件,文件名为mjpg-streamer - mini6410 -bin.tar.gz 。 4. 基于V4L的视频采集程序以及图像压缩理论 4.1 V4L2 Video f

22、or Linux two(Video4Linux2)简称V4L2,是V4L的改进版。V4L2是linux操作系统下用于采集图片、视频和音频数据的API接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。在远程会议、可视电话、视频监控系统和嵌入式多媒体终端中都有广泛的应用。在Linux下,所有外设都被看成一种特殊的文件,成为“设备文件”,可以象访问普通文件一样对其进行读写。一般来说,采用V4L2驱动的摄像头设备文件是/dev/v4l/video0。为了通用,可以建立一个到/dev/video0的链接。V4L2支持两种方式来采集图像:内存映射方式(mmap)和直接读取方

23、式(read)。V4L2在include/linux/videodev.h文件中定义了一些重要的数据结构,在采集图像的过程中,就是通过对这些数据的操作来获得最终的图像数据。Linux系统V4L2的能力可在Linux内核编译阶段配置,默认情况下都有此开发接口。V4L2从Linux 2.5.x版本的内核中开始出现15.V4L2规范中不仅定义了通用API元素(Common API Elements),图像的格式(Image Formats),输入/输出方法(Input/Output),还定义了Linux内核驱动处理视频信息的一系列接口(Interfaces),这些接口主要有:视频采集接口Video

24、Capture Interface;视频输出接口 Video Output Interface;视频覆盖/预览接口Video Overlay Interface;视频输出覆盖接口Video Output Overlay Interface;编解码接口Codec Interface。4.2 应用程序通过V4L2进行视频采集的原理 V4L2支持内存映射方式(mmap)和直接读取方式(read)来采集数据,前者一般用于连续视频数据的采集,后者常用于静态图片数据的采集,本文重点讨论内存映射方式的视频采集。应用程序通过V4L2接口采集视频数据分为五个步骤:首先,打开视频设备文件,进行视频采集的参数初始化

25、,通过V4L2接口设置视频图像的采集窗口、采集的点阵大小和格式;其次,申请若干视频采集的帧缓冲区,并将这些帧缓冲区从内核空间映射到用户空间,便于应用程序读取/处理视频数据;第三,将申请到的帧缓冲区在视频采集输入队列排队,并启动视频采集;第四,驱动开始视频数据的采集,应用程序从视频采集输出队列取出帧缓冲区,处理完后,将帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据;第五,停止视频采集。4.2.1 视频采集的参数初始化在Linux下,摄像头硬件已经被映射为设备文件“/dev/video0”,用open函数打开这个设备文件,获得其文件描述符fd_v4l2,然后对这个文件描述符进行参数初

26、始化。(1) 设置视频的采集窗口参数设置采集窗口就是在摄像头设备的取景范围之内设定一个视频采集区域。主要是对结构体v4l2_crop赋值,v4l2_crop由一个v4l2_buffer_type枚举类型的type和v4l2_rect类型的结构体c构成,来描述视频采集窗口的类型和大小。type设置为视频采集类型V4L2_BUF_TYPE_VIDEO_CAPTURE。c是表示采集窗口的大小的结构体,它的成员Left和Top分别表示视频采集区域的起始横坐标和纵坐标,width和height分别表示采集图像的宽度和高度。赋值后,用ioctl函数通过这个结构体对fd_v4l2进行设置。struct v4

27、l2_crop enum v4l2_buf_type type;struct v4l2_rect c;(2)设置视频点阵格式和点阵大小主要是对结构体v4l2_format进行赋值,它由type和联合体fmt构成,来描述视频设备当前行为和数据的格式。把type赋值为视频采集类型V4L2_BUF_TYPE_VIDEO_CAPTURE,表示定义了一个视频采集流类型的buffer。fmt中,pix为表示图形格式的v4l2_pix_format型结构体。需要设定pix里的几个变量,pixelformat表示采集格式,设置为V4L2_PIX_FMT_YUV420;width、height表示图像的宽度、高

28、度,以字节为单位;sizeimage表示图像所占的存储空间大小,以字节为单位;bytesperline表示每一行的字节数。赋值后,用ioctl函数通过这个结构体对fd_ v4l2进行设置。struct v4l2_format enum v4l2_buf_type type;union struct v4l2_pix_format pix; / V4L2_BUF_TYPE_VIDEO_CAPTUREstruct v4l2_window win; / V4L2_BUF_TYPE_VIDEO_OVERLAY_u8 raw_data200; / user-defined fmt;(3)设置视频采集的帧

29、率结构体v4l2_streamparm来描述视频流的属性,它由type和联合体parm构成。type同上,由于选的是V4L2_BUF_TYPE_VIDEO_CAPTURE,所以仅需设定parm中的v412_capture型结构体capture即可。在其中, v4l2_fract型结构体timeperframe表示平均每一帧所占的时间,由其元素numerator和denominator共同决定,该时长为numerator/denominator;而capturemode则表示采集模式,采集高质量图片值为1,一般设为0。赋值之后,用ioctl函数通过这个结构体对fd_ v4l2进行设置。struc

30、t v4l2_streamparm enum v4l2_buf_type type;union struct v4l2_captureparm capture;struct v4l2_outputparm output;_u8 raw_data200; /* user-defined */ parm;4.2.2 申请并设置视频采集的帧缓冲区前期初始化完成后,只是解决了一帧视频数据的格式和大小问题,而连续视频帧数据的采集需要用帧缓冲区队列的方式来解决,即要通过驱动程序在内存中申请几个帧缓冲区来存放视频数据。应用程序通过API接口提供的方法(VIDIOC_REQBUFS)申请若干个视频数据的帧缓冲

31、区,申请帧缓冲区数量一般不低于3个,每个帧缓冲区存放一帧视频数据,这些帧缓冲区在内核空间。应用程序通过API接口提供的查询方法(VIDIOC_QUERYBUF)查询到帧缓冲区在内核空间的长度和偏移量地址。应用程序再通过内存映射方法(mmap),将申请到的内核空间帧缓冲区的地址映射到用户空间地址,这样就可以直接处理帧缓冲区的数据。(1)将帧缓冲区在视频输入队列排队,并启动视频采集在驱动程序处理视频的过程中,定义了两个队列:视频采集输入队列(incoming queues)和视频采集输出队列(outgoing queues),前者是等待驱动存放视频数据的队列,后者是驱动程序已经放入了视频数据的队列。如图2所示。应用程序需要将上述帧缓冲区在视频采集输入队列排队(VIDIOC_QBUF),然后可启动视频采集。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1