毕业设计(论文)-基于ARM9平台的智能家居系统设计.docx_第1页
毕业设计(论文)-基于ARM9平台的智能家居系统设计.docx_第2页
毕业设计(论文)-基于ARM9平台的智能家居系统设计.docx_第3页
毕业设计(论文)-基于ARM9平台的智能家居系统设计.docx_第4页
毕业设计(论文)-基于ARM9平台的智能家居系统设计.docx_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于arm9平台的智能家居系统设计摘要可视化的实时视频监控和无线智能控制是远程监控中的重要技术应用,可用于军事、工业、智能家居和许多重要领域。随着internet技术和嵌入式技术的不断发展,基于网络和嵌入式技术的远程监控和智能控制在社会生活的各方面发挥重大作用。本文设计了一种基于嵌入式arm9平台的智能家居系统,它能实现以下功能。首先,搭建一个web服务器为用户提供登录和视频监控功能。第二,通过搭建流媒体服务器向浏览器(采用java applet 设计)传输从usb摄像头采集过来并经过编码的视频信号。第三,通过搭建嵌入式控制服务器接收从客户端(采用qt设计)发送过来的控制命令,并且通过zigbee模块控制家电。本文围绕以s3c2410为核心的硬件平台进行嵌入式系统开发的关键技术进行了研究与实现。首先,介绍了智能家居目前的发展趋势、研究现状、采用的相关技术等。然后,介绍了关于视频监控的嵌入式平台搭建的大致过程以及注意事项;最后,详细的论述了如何利用摄像头进行一路动态图像的采集、如何利用zigbee技术控制家用电器,以及如何利用tcp/ip协议建立服务器接受控制命令和传送视频监控信号。关键字:嵌入式linux ,arm,智能家居,zigbee,网络视频监控,v4l2smart home system design based on arm9 platformabstractvisible real-time monitoring and wireless intelligent control is an important application of remote measurement and control technology,which can be used in many fields,such as military affairs,industry and intelligent household systems and so on. along with the development of internet and embedded technology,intelligent monitoring which is based on internet and embedded technology is playing important role in life aspects.in this dissertation,a solution to intelligent household systems is designed,which is based on embedded linux and arm9 platform,to achieve the following functions. first,by establishing web server for users to provide login and video monitoring function. second, by establishing streaming server transport the video signal to browser(designed with java applet),which is captured from usb digital camera and encoded by encoder. third,by establishing embedded control server receive the command through internet which is sent by client(designed with qt) and control the lights and curtain through zigbee device.specially,some vital problem of how to realize video monitoring system based on s3c2410 and embedded linux are put forward and discussed. firstly,the paper introduces the intelligent household current development trend, research status, using the correlation technique and the feasibility. secondly, the paper introduces the process of embedded platform and notes about the video monitoring. at last the paper introduces how to capture the video by using usb digital camera and how to control the lights and curtain by zigbee device,and how to build the servers according to tcp/ip protocol to receive the command and transport the video signal.keyword: embedded linux,arm,zigbee,network,v4l2目 录1 前言32 智能家居系统实现方案32.1 智能家居系统设计方案介绍32.2 智能家居系统设计框图33 搭建嵌入式开发平台33.1 嵌入式系统介绍33.2 嵌入式硬件平台33.2.1 arm处理器33.2.2 s3c2410体系结构33.3 嵌入式系统软件33.3.1 linux系统介绍33.3.2 arm与linux33.3.3 选用linux平台原因33.4 嵌入式系统移植33.4.1 bootloader启动33.4.2 linux内核移植33.4.3 jffs2文件系统移植33.5 搭建交叉编译环境33.6 搭建nfs网络文件系统34 视频监控程序的实现34.1 图像采集设备usb摄像头34.2 基于v4l2的编程34.2.1 v4l2中重要的数据结构34.2.2 v4l2图像采集过程34.2.3 图像采集程序的设计35 家用电器控制的实现35.1 zigbee模块的介绍35.2 zigbee使用方法35.3 基于串口的zigbee控制协议35.4 zigbee控制程序的实现36 嵌入式web服务器的实现36.1 boa服务器36.1.1 boa服务器介绍36.1.2 boa服务器的移植36.2 html实现登录界面36.3 监控界面的设计37 流媒体服务器的搭建37.1 流媒体服务器简介37.2 流媒体服务器设计框架37.3 流媒体服务器主要接口38 功能测试39 总结3参考文献3致 谢3411 前言智能家居是利用先进的计算机技术、网络通讯技术、综合布线技术、依照人体工程学原理,融合个性需求,将与家居生活有关的各个子系统如安防、灯光控制、窗帘控制、煤气阀控制、信息家电、场景联动、地板采暖等有机地结合在一起,通过网络化综合智能控制和管理,实现“以人为本”的全新家居生活体验。随着人们对生活品质的不断追求以及住宅智能化技术的不断发展,今天的智能家居系统拥有了更加丰富的内容,在当今科技的推动下人们的家居生活变得越来越智能化、越来越方便。智能家居的基本功能包括智能管家系统、背景音乐系统、电动窗帘系统、灯光控制系统、智能弱电系统、智能安防系统、智能监控系统、数字客厅系统、智能娱乐系统、指纹门禁系统等系统, 越来越多的新鲜名词逐渐成为了智能家居中的重要组成部分。常见的家居系统具有如下特点:(1)数字客厅系统(实现客厅智能电视上网的功能):轻轻松松的在客厅上网,看网络电影、玩游戏,不再拘谨于书房电脑前那个小小的空间,独享网络的乐趣,让我们的家人在偌大的空间里,享受数字客厅所带来的家的零距离。(2)安防系统:安全是每一个人最关心的问题。我们在外出的时候会担心家里的一切是否安好等,这些都可能给您带来不必要的困扰,智能安防为您的家打造一个安全的栅栏,让你无忧无虑的享受生活,随时随地掌控家里的安全情况。除此之外还可以实现智能报警、智能开解锁等功能。(3)监控系统:通过发布摄像头采集的视频数据,在世界的任何一个角落,随时都可以查看室内各个角落的安防情况以及家人起居。(4)智能灯光系统:有了智能调控开关,家随光舞动,生活情调完美显现。液晶触摸式或无线遥控开关:可以轻松的控制家里的每一盏灯,设置场景,让您的家在不知不觉中变得时尚和尊贵1。从全世界范围来看,智能家居系统处于一个初步发展的阶段,全世界各国都还没有形成一个统一、规范的行业标准。从技术角度上来讲,由于某些技术较为先进难实现、成本过高、开发难度大,导致各个区域、各个经济层面难以实现。从实现角度上讲,人们普遍关心的安防报警、对讲、灯光控制等感兴趣,对一些超前的安防功能觉得华而不实,比如人脸识别、指纹识别等。总体来说,出于个方面因素,智能家居系统推广率还不是很高,特别是在发展中国家和经济落后的国家。本文通过模拟实现家电智能控制和家居环境的实时监控,进一步了解了基于zigbee无线控制技术、实时视频监控技术在智能家居安防中扮演的重要角色。在物联网概念日益盛行的时代,通过研究智能家居系统能够更加深切的感受和领略现代科技给人们带来的高素质生活质量和精神内涵的别墅新生活2。2 智能家居系统实现方案2.1 智能家居系统设计方案介绍系统的主要设计思想是:一方面,将视频前端和嵌入式web服务器结合在一起,web服务器提供用户身份验证和视频监控的页面访问,而摄像头采集的数据经过压缩编码后通过网络传递到该监控页面上,从而达到监控目的。另一方面,客户端使用通过qt技术编写客户端,使用tcp/ip协议通过网络传递控制命令到控制服务器,服务器再通过基于串口的zigbee模块向灯和窗帘发送控制命令,从而实现了家电的控制。在服务器方面,设计了两个服务器:流媒体服务器,该服务器采用的是基于b/s结构的服务器推送技术,即只要有链接请求过来,服务器主动向客户端传送视频数据。服务器端使用的是基于tcp网络传输协议,客户端使用java applet 小程序接收数据,然后再浏览器上绘图,实现视频监控。 流媒体服务器还有一个功能就是接收客户端发来的控制指令,然后启用控制线程向串口写控制命令。boa服务器,该服务器主要是建立web服务器,为用户提供登录验证和视频监控页面。其中登录验证使用java script实现,视频监控使用java applet实现。2.2 智能家居系统设计框图在本次的智能家居设计中,主要模拟设计的是智能监控、家电智能控制方面,其中智能控制是基于zigbee技术实现的。其中家庭网关采用arm9结构的32位微处理器。通过家庭网关和各种家电设备中嵌入基于zigbee芯片的无线网络收发模块,实现网关和各个网络子节点的数据传送,从而实现家庭内各种设备的无线连接和家庭自动化。 另一方面,用过使用usb摄像头采集家庭内部环境图像,通过网络向客户端发送监控画面,实现远程视频监控。其框图如图2.1所示。流媒体服务器家电智能控制模块 w e b服务器网络usb摄像头灯、窗帘客户端zigbee模块mpeg4编码图2.1 智能家居系统设计软件总体框图从上图可以看出,流媒体服务器采集的视频数据经过web服务器直接送到网络客户端同时,也接受网络客户端传过来的控制命令,实现了双向的数据传输。客户端除了可以实现监控功能外还可以通过网络向服务器发送控制命令,从而实现了智能监控和智能控制的功能。3 搭建嵌入式开发平台3.1 嵌入式系统介绍嵌入式系统的定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。嵌入式系统分为硬件和软件两部分组成,硬件部分包括处理器、存储器以及外设器件和i/o等;软件部分包括嵌入式操作系统部分和应用程序两部分。嵌入式系统控制着软硬件资源,控制软硬件的交互,保证了系统以及各种操作的实现。嵌入式在如今的日常生活中应用相当的广泛,生活中随处可见嵌入式设备,例如,手机、平板电脑、pda等。随着计算机技术的发展,嵌入式系统日趋完善,在航天、航空、交通、网络、电子、通讯等日常领域得到的了广泛的应用。当今嵌入式系统的主要应用领域有:家庭信息网络、移动通信计算设备、网络设备、自动化与测控仪器仪表以及交通电子等3。3.2 嵌入式硬件平台3.2.1 arm处理器嵌入式系统的核心是处理器,传统嵌入式处理器根据应用可分为两类:一是以单片机为主的微处理器,这一类芯片的产品有8/16位的单片机,如intel的80c51等,单片机具有体积小,指令系统简单,抗干扰能力强,成本低廉,控制力强等特点。二类是注重数字化后的各种快速算法的数字信号处理器dsp,dsp作为高速的数字信号处理器主要应用在声音、图像处理等需要大量的数据计算的领域,有着功耗小、运算速度快、吞吐量大等特点。今年来,随着微电子技术、计算机技术、通信以及网络技术的发展,嵌入式技术渗透到各个领域。由于被嵌入对象的复杂程度变化大,对嵌入式本身性能、系统结构、等各方面要求较高,传统的51单片机、dsp不能单独完成,使得在嵌入式应用面临挑战。而arm嵌入式处理器,以其完整的体系结构发展系列,极小的体积、极低的功耗、极低的成本、极高的性能,及时根据嵌入式的对象的不通进行功能上的扩展的优势,在众多种类的嵌入式处理器中脱颖而出,arm的设计实现了非常小的但性能高的结构。arm体系结构具有如下特性:(1)统一的和固定的指令集,简化了指令译码。(2)地址自动增加和自动减少的寻址模式实现了程序循环的优化。(3)每一条数据指令都对算术逻辑单元(alu)和移位器进行了控制,以实现对alu和移位器的最大利用。(4)所有指令的条件执行实现了最快速的代码执行。(5)从arm7开始增加3级流水线,到arm11增加到了9级流水线,从而曾加了代码的执行速度4。3.2.2 s3c2410体系结构s3c2410处理器是samsung公司基于arm公司的arm920t处理器核,采用0.18um制造工艺的32位微控制器。该处理器拥有:独立的16kb指令cache和16kb数据cache,mmu,支持tft的lcd控制器,nand闪存控制器,3路uart,4路dma,4路带pwm的timer ,i/o口,rtc,8路10位adc,touch screen接口,iic-bus 接口,iis-bus 接口,2个usb主机,1个usb设备,sd主机和mmc接口,2路spi。s3c2410处理器最高可运行在203mhz。s3c2410提供了一整套比较完善的通用系统外围设备,并且使得整个系统功耗最小。正是因为它具有很多常用的功能模块,所以也免去了配置附加附件的麻烦。其片上系统主要包括以下几个方面:(1)s3c2410芯片集成了大量的功能单元内部1.8v,存储器3.3v,外部i/o3.3v,16kb数据cache,16kb指令cache,mmu。 内置外部存储器控制器(sdram控制和芯片选择逻辑)。 3个通用异步串行端口(irda1.0,16-byte tx fifo and 16-byte rx fifo),2通道spi。一个多主i2c总线,一个i2s总线控制器。 56个中断源,24个外部中断。设计用于手持设备和通用嵌入式系统。 16/32位risc体系结构,使用arm920t cpu核的强大指令集。 带mmu的先进的体系结构支持wince、epoc32、linux。 指令缓存(cache)、数据缓存、写缓存和物理地址tag ram,减小了对主存储器带宽和性能的影响。内部先进的位控制器总线(amba)(amba2.0,ahb/apb)。 (2)系统管理地址空间:每个bank128mb(全部为1gb)。 每个bank可编程为8/16/32位数据总线。 bank7可编程bank起始地址和大小。 前6个存储器bank用于rom、sram和其它。 两个存储器bank用于rom、sram、和sdram(同步随机存储器)。支持不同类型的rom用于启动(nor/nand flash、eeprom和其它)。系统平台如图3.1所示,其集成了三星公司的s3c2410处理器,并扩展了16m的16位flash,64m的32位sdram,一个usb host接口,平台通过dm9000扩展了一个10m/100m的自适应以太网接口,复位电路,lcd等模块5。s3c2410处理器lcd(240x320)10mb/100mb dm900电 源复位电路usb接口uda1380 按 键jtagsdram(16x32m)flash(8x16m)flash(8x16m)图3.1 s3c2410硬件结构图3.3 嵌入式系统软件3.3.1 linux系统介绍linux是一个类unix操作系统。它起源于芬兰一个名叫linus torvalds 的大学生,它是一款开源的操作系统。linux从1991问世以来已经发展成为一个功能强大、设计完善的操作系统6。与其他嵌入式系统相比,嵌入式linux具有以下优势:(1)能满足绝大部分实时行要求。实时行只是个相对的概念,绝对的实时性其响应时间一般要求在微秒数量级,这种实时性功能只是针对特殊设备、特殊应用场合,绝大部分嵌入式不需要这么高的精度。而linux内核本身作为优先级最低的任务,实时任务作为最高优先级的最高任务,这样在实时性方面,linux满足绝大部分的嵌入式应用要求。(2)linux系统是模块化层次结构且内核完全开放,具有强大的网络功能。linux由于体积小、性能能高、开源等特点,不通层次的用户可根据自己的应用需要对内核进行裁剪和修改,开发出适合某种特定场合的嵌入式系统。这使得linux得到的普遍的欢迎。(3)嵌入式linux跨处理器平台,应用软件容易移植。和其他通用操作系统相比,linux是比较可靠、最稳定的操作系统。嵌入式linux继承了这一特点,使得linux移植到新的微处理器上基本不用修改就能使用。不管是risc、cisc、32位还是64位各种系统,linux都能良好运行。(4)嵌入式linux具有一整套的工具链,并且是开源的,使得开发者容易自行建立嵌入式系统的开发环境和交叉运行环境。3.3.2 arm与linux由于linux的源码开放,内核精简且强悍,使用于多种硬件平台,因此目前嵌入式市场中基于linux的嵌入式产品应用相当的广泛,特别是arm微处理器和linux的结合,使得linux得到的更广泛的应用。另一个方面,由于linux的开源,任何人都可以轻易的得到其源代码且自由使用,使得linux的传播更加的广泛。服务器、桌面、嵌入式是linux集中应用的三大领域。linux从服务器发展而来,奇异值保持了蓬勃旺盛的发展势头,而嵌入式linux则在后来的发展中后来居上,在市场上占领了大半片江山。嵌入式linux与arm的结合为人们的生活带来了更多的便利,如之智能手机、dv、平板电脑等。根据linuxd 进行的调查,有查过40%的开发人员愿意使用linux,数据显示在未来的几年里,嵌入式将保持持续增长,有望达到50%左右。在嵌入式linux系统的应用中 ,芯片的支持是最重要的因素之一,在这些被使用的芯片中无论是intel还是motorola,都会不可避免的和这个名字挂钩arm。 arm的微处理器结构在全球约75%的risc处理器中被采用,我们有理由相信基于arm结构的芯片和linux系统将会处于优势地位,windows8支持arm结构就是一个很好的证明7。3.3.3 选用linux平台原因(1)从成本上来看。由于linux是开源的操作系统,对于开发者很容易得到其资源,而不用花费任何代价。另一个方面,有遍布全球的linux开发团队和爱好者,对技术提供开发和支持,使得在linux下开发软件变得十分容易,从而缩短了开发周期、提高的效率。(2)基于arm核心的嵌入式系统以其自身丰富的资源,低功耗、低价格,支持从多厂商的缘故在嵌入式开发中得到了越来越多的应用。现在的智能家居系统设计绝大部分也是基于arm核心的,而linux嵌入式操作系统由于源码开放,使用多平台等特点,arm与linux的结合成了最佳的选择。(3)linux操作系统的应用主要分为嵌入式linux和uclinux两种类型。其共同之处在于源码开放、内核可裁剪、网络功能强大、支持多平台、资源丰富,唯一不同的是,后者去掉了mmu单元,适合各种没有mmu的微控制器,嵌入式linux则保留了这功能,使得系统更加的稳定,因此选择性能更为优越。3.4 嵌入式系统移植有了硬件电路后,我们需要将我的系统移植到硬件电路上,这样系统才能正常工作,它主要包括bootloader、内核、文件系统等。3.4.1 bootloader启动bootloader是系统内核启动前得一小段引导程序,作用是初始化系统硬件,建立内存空间的映射图,为系统建立合适的启动环境。其主要任务就是将内核映像从存储器上读到ram中,然后跳转到内核的入口点运行。一般来说,bootloader包含两种不通的操作模式:启动加载模式:在启动加载模式下,bootloader从存储介质中将操作系统加载到ram中运行,这是bootloader的正常运行模式,这个过程中没有用户的介入。下载模式:在下载模式下,嵌入式系统中的bootloader将通过串口连接或网络连接等通信手段从主机上下载内核印象和根文件系统印象等。从主机下载的文件通常 首先被bootloader保存到嵌入式平台的ram中,然后再被写入flash等固态存储设备中。下载模式通常在第一次安装内核与文件系统时使用,系统更新也会使用该工作模式。移植:做好适合自己平台的bootloader后,我们需要将其移植到开发板上,一般bootloader移植使用dnw工具下载到flash或者其他存储介质中,然后再通过该介质启动bootloader。3.4.2 linux内核移植linux操作系统一般主要由进程调度、内存管理、虚拟文件系统、网络接口、进程间通信等几个部分组成。在嵌入式linux中,由于不是所有的功能都能使用,因此我们在linux环境下使用make menuconfig命令对其功能进行裁剪和修改,并加入相应的flash分区信息,其主要针对以下几个方面进行修改:(1)去除本硬件平台不需要的外设驱动及其管理部分,简化控制台的代码。注意:2.6.28之前的linux内核没有对usb的摄像头驱动支持,需要加其内核补丁一块编译才能使用。(2)尽量减少对文件系统的支持,如果不需要文件系统则可以去掉内核中的文件系统部分,包括内核线程,但需要保留顶部的虚拟文件系统层,因为底层驱动需要vfs的支持。(3)根据需要修改进程调度策略,可以通过“优先级继承”、“优先级封顶”等算法来解决优先级倒转的问题。当配置生效后,将会编译生成zimage镜像文件,最后可利用dnw工具,将该镜像文件烧写进flash即可8。3.4.3 jffs2文件系统移植在系统启动之后,操作系统要完成的最后一步是挂在根文件系统。嵌入式文件系统的任务是对逻辑文件进行管理,包括提供对逻辑文件的操作接口,方便用户操作文件和目录。嵌入式系统一般使用flash作为自己的存储介质,相比硬盘有以下特点:不具有挥发性、可随机读写、可擦写、集成度高等。在本次的研究中需要文件系统的支持,需要将文件系统烧写进flash里以便使用。此次使用的文件系统的格式是jffs2格式的文件系统。jffs2文件系统是为嵌入式设备而专门设计的移植日志文件系统,它属于logstructured日志文件系统,它把整个flash设备当做可循环的日志文件来组织,每次修改都在这个文件的逻辑上的尾部进行。jffs2文件系统 支持新的存储方式,支持损耗平衡,具有断电保护功能,因而相对exet2文件系统而言,更适合于把flash作为存储设备的嵌入式文件系统。在设计jffs2文件系统时要注意和硬件平台的设计有逻辑相关性,即要根据硬件设计来确定和分配分区等信息。设计好后利用dnw工具将其烧写到flash里面即可,至此,一个完整的嵌入式linux系统搭建完成。3.5 搭建交叉编译环境交叉编译是指: 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。由于应用程序运行的硬件的环境不同,在宿主机(即pc)环境下编译的程序移植到目标板上不能运行。所以我们需要搭建交叉编译环境,然后使用该编译环境编译我们编写的应用程序,然后移植到目标板上。简单的说交叉编译器的作用就是让我们在宿主机上编译的程序能在目标板上运行。首先,从上下载交叉编译器arm-linux-gcc-4.x.x.tar,选择比较稳定和适合自己平台的版本。然后解压到宿主机(linux操作系统)某安装目录。如tar - jxvf arm-linux-gcc-3.4.1.tar.bz2 ./最后,vi /etc/bash.bashrc。在用户环境.bashrc中添加该编译器所在的路径,在该文件的末尾添加如下语句即可,path后面是交叉编译器的绝对路径。export path=$path:/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin:。在使用的时候使用该编译器编译,然后就能往目标板上移植编译好的程序了。3.6 搭建nfs网络文件系统在做嵌入式开发的时候往往需要在搭建好的系统上做测试,所以往嵌入式系统里移植开发好的应用程序需要一个晚上的平台才能完成,而一般的dnw工具则不好控制其存储的位置等。而由于文件系统已经搭建好,我们可以使用nfs(网络文件系统)来向嵌入式系统里拷贝需要调试的应用程序。nfs全称是network file system,是通过tcp/ip协议而设计宿主机与目标系统的通讯工具。我们需要在宿主机上安装nfs服务器,这样才能在目标板上通过挂在命令,将设计的应用程序移植到目标板上运行,其大致过程如下:(1)通过linux命令在宿主机上安装服务器。sudo apt-get install portmap nfs-kernel-server.(2)修改系统配置。修改/etc/default/portmap 如下修改:#options=-i (3)编辑/etc/exports,在其中增加要共享的目录.实例如下:/home/bruce/board *( rw,sync,no_root_squash,no_subtree_check)其中*表示任何网段都可以访问,也可以设置某个网段的访问权限,如01(4)重启服务器, sudo /etc/init.d/portmap restart sudo /etc/init.d/nfs-kernel-server restart(5)用showmount e 命令测试是否已经搭建成功。若能显示共享目录则设置成功,这时将目标板和宿主机用网线连在一起用mount命令挂在指定访问的目录,就能访问宿主机,从而能实现应用程序的测试和移植。(6)nfs的使用:将宿主机与目标板用网线连接好,设置好ip,然后通过mount命令挂在宿主机允许目录,这样目标板就可访问主机上编译好的程序。如,mount o nolock 01:/home/bruce/board /nfs其中-o和nolock参数设置为非等待挂载,立刻返回结果。第4个参数是宿主机的ip和需要挂载的目录, 最后一个参数是挂载到目标板上的目录。通过搭建nfs网络文件系统,我们可以很轻易的将编译好的可执行文件下载到开发板上运行。在实际的嵌入式开发中,大多都是通过nfs网络文件系统来移植应用程序的,这样会减少很多工作量。4 视频监控程序的实现实时的视频监控是智能家居系统的一个重要组成部分,在智能家居的安防中扮演了重要角色,通过实时的视频监控就可以即时的了解家居环境的安防情况。如果在系统结构中加入监控对比处理,还可以实现智能报警、智能上锁、家居一体化等功能。下面就关于视频监控的设计做如下介绍。软件设计流程图如4.1所示:开 始打开视频设备读取设备信息并初始化选择采集方式采集视频数据mpeg4编码结束采集关闭视频设备结束发送数据图4.1 视频采集流程图4.1 图像采集设备usb摄像头系统要实现网络视频监控的功能,首先要对现场进行图像采集。本系统采用中芯微公司生产的基于zc301芯片的usb摄像头作为视频前端,用以获得家居环境中的画面信息, 由于linux的2.2.28版本内核已经对该摄像头有驱动支持,我们只需要在编译内核的时候将该驱动加入内核中编译即可。由于该视频前端采集视频数据的同时,也采用了硬件压缩的方式对采集的视频信息进行了压缩,输出的视频格式即为压缩后的jpeg格式视频,因此我们可以不对其压缩处理而直接发送到客户端进行图像显示。视频前端如图4.2所示。图4.2 基于zc301芯片的摄像头摄像头通过开发板上的usb接口与系统相连接,系统通过驱动程序实现对视频前端的访问。系统获得采集的现场图片信息后,经过以dm9000为芯片的网口向客户端传送视频图像。4.2 基于v4l2的编程video4linux2(简v4l2)是linux中关于视频设备的内核驱动,它为针对视频设备的应用程序编 程提供一系列接口函数,这些视频设备包括现今市场上流行的tv卡、视频捕捉卡、fm广播、文字电视广播解码和usb摄像头等。对于usb口摄像头,它为应用程序提供了一系列的接口函数,通过这些函数,可以执行打开、读写、设置、关闭等基本的操作,其驱动程序中需要提供基本的i/o操作接口函数open、read、write、close的实现9。usb摄像头驱动成功后,需要编译视频采集程序,这就需要了解linux内核中关于视频设备的部分代码,特别是一些常用的结构体。一般我们在使用这些接口的时候都会自己做一些封装和出错处理。4.2.1 v4l2中重要的数据结构video for linux 支持各种音视频的捕捉设备,因此下面介绍一下本文中将会使用的主要集中数据结构。(1)struct v4l2_capability包含设备的基本信息,如设备名称、支持的最大最小分辨率、信号源信息、信道数等信息。我们可以通过使用接口ioctl发送vidioc_querycap命令来获得该设备的基本信息。name32 /包含设备名称maxwidth /设备所支持的最宽度maxheightminwith /支持的最小宽度minheightchannels /支持信号源的个数type /是否能捕捉,彩色还是黑白,是否能裁剪等(2)struct v4l2_format 设置视频的制式和帧格式,制式包括pal、ntsc,帧格式包括宽度和高度等信。可以通过使用接口ioctl发送v4l2_buf_type_video_capture命令来设置。fmt.type /设置命令格式为视频采集设置fmt.fmt.pix.width /设置宽度fmt.fmt.pix.heightfmt.fmt.pix.pixelformat /设置采集数据格式(3)struct v4l2_requestbuffers 包含向系统申请的缓冲区的信息,包括缓冲区的长度、地址等信息。可以通过使用接口ioctl发送v4l2_buf_type_video_capture命令来设置。count /申请的缓冲区数量type /控制命令的类型memory /申请的内存的使用方式,有mmap和userptr两种类型。(4)struct v4l2_buffer 包含采集到得视频数据的存放地址、地址偏移量等信息。可以通过使用接口ioctl发送vidioc_qbuf命令来获得。index /缓冲区的序号type /缓冲区类型memory /io方式,由程序是设置4.2.2 v4l2图像采集过程在使用设备之前需要对设备进行初始化,若驱动中有对iocl的支持,则用户可以使用ioctl。ioctl(int fd, int cmd ), ioctl是input outputcontrol的缩写,其作用是用户应用程序用来控制i/o的通道,其中fd表示设备文件描述符,cmd表示用户程序对设备的控制命令,省略号表示一个类型长度的参数,可以省略。打开设备: usb设备在linux中的设备文件名为/dev/video0,视频图像程序编程便可以针对此设备进行。打开设备,调用grab_fd = open(“/dev/video0”, ordwr)函数,调用成功返回设备的文件描述符grab_fd(出错返回-1),以后就可以对设备进行操作。属性读取和设置:调用ioctl(grab_fd, vidioc_querycap, &pic_cap)函数和ioctl(grab_fd, vidioc_s_fmt, &fmt)来读取和设置图片的信息,包括图像的亮度、色度、对比度等。获取视频:在完成相关设置后就可以截取捕获的视频信息了。有两种方式可以截取视频信息,一种是在用户空间直接read()和write(),但这种方式需要从内核空间到用户控件的转换,效率很低,一般都是用第二种方式内存映射。是用mmap内存映射方式获取视频最大的好处就是,使得应用程序可以像访问普通文件一样访问内存数据,不必再调用read和write函数,没有用户空间到内核空间的转换的过程,效率提高了很多。视频编码:在提取到视频数据之后,若要做成视频流则需要进行视频的压缩编码,然后用网络传输到客户端进行解码播放即可。内存映射获取视频信息:首先,使用ioctl(grab_fd, vidiocgmbuf, &grab_vm)函数获得摄像头存储的缓冲区的帧信息,之后初始化vido_mbuf修改video_mmap中的设置。然后使用函数mmap(0,grab_size, port_read|port_write, map_shared)函数,使设备内同映射到内存区域中,其中mmap返回内存映射区域的指针。使用vidiocamcapture来真正截取视频,具体应用函数为ioctl(grab_fd, vidiosync, &grab_buf)。若调用成功,开始下一帧的读取,是非阻塞的,是否截取完成义操作名为videosync的函数ioctl来判断,若其返回大于0的值则表示截取完成,开始下一帧的截取。在这里,我们使用双缓冲技术采集视频,即使用内粗映射的同时,申请两帧缓冲区,在一帧处理时,另外一帧可以继续采集。在采集的时候需要定义当前帧号以及状态,并实时的保持当前帧的序号,其实地址信息等,以防混淆。4.2.3 图像采集程序的设计在使用v4l2编程之前,需要对所用到的主要函数进行定义:(1)打开视频设备。int v4l_open_device(char *dev, v4l_device *vd),第一个参数是设备的名称(在根目录下的/dev目录下能找见),第二个参数是先前定义的数据结构。在这个函数中除了打开设备之外还做了一些出错处理,打开设备成功返回0,失败返回-1;int v4l_open_device(v4l_device *vd) /*check the device*/ if ( stat(dev_name, &vd-st) st.st_mode) ) fprintf(stderr, no devvice: %sn, dev_name); return -1; /*open the device*/ if ( (vd-fd = open(dev_name, o_rdwr) fd, vidioc_querycap, &(vd-cap) if (einval = errno) fprintf(stderr, %s is no v4l2 devicen, dev_name); return -1; else return -1; (3)设置采集参数。 int v4l_set_device(v4l_device *vd), 由于在此次的设计中使用特定采集设备,所以不需要通过函数传入参数,只需在函数内部设置特定的参数即可。int v4l_set_device(v4l_device *vd) /*set the format of the picture*/ clear(vd-fmt); vd-fmt.type = v4l2_buf_type_video_capture; vd-fmt.fmt.pix.width = 640; vd-fmt.fmt.pix.height = 480; vd-fmt.fmt.pix.pixe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论