-嵌入式监控系统的设计与实现学士学位论文_第1页
-嵌入式监控系统的设计与实现学士学位论文_第2页
-嵌入式监控系统的设计与实现学士学位论文_第3页
-嵌入式监控系统的设计与实现学士学位论文_第4页
-嵌入式监控系统的设计与实现学士学位论文_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计(论文)题目目录TOC\o"1-3"\h\u17866摘要 i3283Abstract ii203141.绪论 1260001.1研究背景及现状 1234181.1.1研究背景 167261.1.2视频监控的现状 1239901.2研究目的和意义 2121881.3本论文的主要工作 3210471.4论文总体结构 368312.硬件平台概述 412402.1硬件平台介绍 4159632.1.1摄像头介绍 486522.1.2运行硬件平台介绍 581262.2软件平台介绍 5257322.2.1Linux操作系统 5297152.2.2QT 678612.2.3Vi编辑器 9312452.2.4ARM交叉编译环境 10247583.V4L2详细介绍 12254333.1V4L2概述 1255083.1.1什么是V4L2 12304563.1.2V4L2的主要功能 12143823.2V4L2使用方法 1370463.2.1V4L2驱动的主要ioctl 13137003.2.2V4L2的主要结构 13124633.2.3V4L2操作流程 14256444.软件详细设计 1665014.1软件运行环境方案 1637394.2服务器设计方案 1695934.2.1视频采集初始化 16123344.2.2申请并设置视频采集的帧缓冲区 1798454.2.3视频传输 199244.3客户端设计方案 20252544.3.1客户端界面 20324404.3.2录像功能 23268464.3.3拍照功能 23290664.4软件使用流程说明 24152564.4.1打开服务端 2417642结论 2930576致谢 309629参考文献 3130277外文原文 3211635中文翻译 46 北京邮电大学毕业设计 PAGE1PAGE11.绪论1.1研究背景及现状随着多媒体技术、信息电子技术和网络通信技术的发展,视屏监控系统正在朝着平台化、智能化和网络化的方向发展,嵌入式监控系统以其独有的微小性、稳定性、功能针对性而被广泛应用在各个领域。1.1.1研究背景随着人类社会不断的向数字化、网络化、全球一体化发展,人们接收的信息量越来越大。有人说:一切竞争都是对信息的竞争。信息的重要性正在逐步的被人们所意识到,人们在接受更多信息的同时,对能获取更多信息的意愿也变得更加强烈。从古至今,信息传输方式已经进行了好几次重大的变革:从最原始书信传递,到之后的声音传递,再到更加生动的图像传递,最后到现在高端的视频传递,都可以看做是人们获取更多信息量的意愿所推动的产物。俗话说:“百闻不如一见”。在这几项传输方式中,视频传递无疑是其中的佼佼者:首先视频可以真实地还原当时的情景,使传输的信息更直观、更有表现力,其次,视频信息具有非常高的真实性和说服力:文字可以造假,声音可以模仿,图片可以修改,而视频信息是非常难以伪造的,而修改后的视频也很难不留下痕迹,可谓是最有说服力的信息之一。而视频还有传输信息量大的特点。因此,信息在信息的传输中具有举足轻重的地位。如今电子信息技术、计算机技术和网络通信技术正在飞速的发展,这也给视频信息的制作和传输提供了技术保证。在视频信息刚刚开始发展的时候,生动形象的视频虽然给人们带来了很多便利,但是也产生了一些问题:未经压缩的视频文件的数据量是非常之大的,动辄可达数十GB,而一张vcd光盘只有650MB,如果想要将一部视频完整的保存视频下来,则需要几十张vcd,这样大的数据量,即使放在现在的硬件设施和网络环境下,都是难以承受的,何况是当时还不算宽裕的条件.因此,必须对捕获到的海量的视频数据进行高效的压缩,这有将数据压缩到一个合理的大小,才能解决视频的存储和传输等关键问题。1.1.2视频监控的现状随着社会发展和科技的日新月异,视频监控技术在不断的发展并被应用到社会的各行各业,并因其所扮演的重要角色而受到人们的关注,目前视频监控系统的类别按信号的不同可以分为模拟监控和数字监控,按传输介质的不同可以分为有线监控和无线监控。模拟监控主要是由模拟摄像头构成的闭路监控系统。由于是早期视频监控系统的主要模式,所以在国内仍然被许多地方使用。由于采用闭路线缆进行数据传输,可以提供清晰可靠的视频信息,但是存在着许多较为明显的局限性:第一、传输的距离短,由于使用线缆,所以只能架设在离视频采集点较近的地方,数据传输率较低,而且视频质量会受到传输距离的影响,如果距离过长会导致视频质量明显下降;第二、系统的可扩展性较差,由于电脑或电视上的接口有限,所以固定的设备只能接受有限的视频,没法充分利用计算机的处理能力,形成复杂的视频网络。第三、后期处理能力不强,无法利用视频处理技术处理捕获的数据,也就无法对视频进行筛选,只能存储所有的视频,降低了磁盘空间的利用率。第四、必须架设专线,无法利用现有网络,极大地浪费了资金,增加了系统的花销。但随着图像处理技术,计算机技术和网络通信技术的发展,出现了基于嵌入式技术的有线网络数字视频监控系统。相比于传统的模拟监控,它有很多优点:它拥有权限控制,可以轻易的定制用户组,授权特定用户进行特定的工作。用户可以在浏览器上输入特定网址来进行系统的访问,实现视频监控、查看设备运行信息等功能,不需要携带庞大的专用设备,只需要在有因特网的地方就可以随时监控。给人们带来了极大的方便。因此基于嵌入式技术的网络视频监控系统有着良好的应用前景和发展前景,完美的替代了陈旧落后的模拟监控。随着无线技术的快速发展,数字监控系统在原有的网络监控系统的基础上,扔掉了网络电缆,改用无线的方式进行传输,使人们对视频操作的系统不再局限于有网络电缆的地方,WIFI的崛起和普及的速度人尽皆知,短短的时间内,WIFI热点遍布全球各个角落。只要在有WIFI的地方,你就可以用手机、平板、笔记本等便携式设备连接因特网来访问视频监控系统,使视频监控系统变得更加灵活、可用性更高。即使你走到了一个没有WIFI热点的地方,你也可以使用成熟的3G/4G网络等无线数据通信方式、之前的2G/2.5G网络由于传输速率较低,无法完美地访问数据传输量大的视频监控系统,但3G网络的峰值速率可以达到153.6Kbps,4G网络的峰值数据更是可以达到惊人的100Mbps的恐怖速率,这样网络的速率就已不再是问题。如今国内大部分的无线视频监控系统所处理成的视频还是JPEG格式压缩,但是随着社会的发展,人们对视频监控系统的性能指标比如视频画面的大小、输出流的大小、传输的方式和实时性等方面也提出了更高的要求,传统的JPEG压缩已经达不到人们对系统性能的要求,所以现在的视频监控系统大多已经投入了MPEG4或者H.264压缩技术的阵营。使用这些技术的视频监控系统大多都使用了第三方生产的专用芯片或者显示卡,还有第三方的视频解码库来实现对视频编码的压缩。这样做的好处在于可以使用第三方成熟的技术,快速的开发出实用的视频监控系统,并且无需在技术的研发上投入高昂的资金,从而缩短产品的研发周期,降低产品的研发费用。但是也带来了一些缺点:比如过分依赖第三方成熟的技术,从而使自己的技术核心竞争力变低、而且第三方产品的好坏直接影响到了自己商品的质量、长期来看成本依然偏高等问题。所以视频压缩技术在未来的应用前景和发展前景必将一片光明。1.2研究目的和意义在视频监控系统不断的发展、在人们日常生活中所占的比重越来越大的情况下,对视频监系统进行不断地研究,将这门课题研究的更加成熟,从而给人们带了更大的便利性已经成为了比较热门的方向,本文旨在了解并熟悉视频监控系统的发展背景和工作流程,并利用现有技术和平台制作出一套工作稳定、可用程度高、具有相关需要功能的视频监控系统。为以后更加深入的研究打下坚实的基础,同时抛砖引玉,在制作这套系统的同时,也对自己大学所学的知识和技术进行复习和总结,为以后即将到来的工作有一个非常好的准备。并且拓展思维,将自己不在局限于大学的学习生活和模式下,学会以一个软件开发者的角度来看待、了解并解决问题。1.3本论文的主要工作本文根据视频监控系统的工作流程,结合已经拥有的技术,打算开发一套基于Linux操作系统下的视频监控系统,监控系统通过视频摄像头来采集视频数据,在接收到视频数据后,服务器使用Linux下的V4L2格式对数据进捕获,并对信息进行必要的处理。之后通过TCP/IP的传输方式,将数据传输到客户端,客户端对传输的信息进行处理后,将其完整的显示在其屏幕上,并将视频压缩成通用的AVI格式保存,同时实现几个常用到的功能,比如说将视频的某个瞬间进行拍照并保存成图片等。本文笔者的任务如下:熟悉Linux操作系统,掌握Linux下的常用的操作命令。探索基于Linux平台下的软件开发流程。熟练的掌握Linux下的各种开发工具,掌握Linux下对特定的视频摄像头的驱动程序的编写和读取。深入理解基于Linux下的VideoforLinux2的接口函数,用于捕获视频信息,仔细研究可以将图片压缩成视频的开源库,实现视频的压缩和存储。1.4论文总体结构全文共分为五章,各章内容安排如下:第一章绪论。介绍研究背景,并对视频监控系统的现状和发展情况做一个简要的说明,提出研究目的和意义,进一步明确研究目标以及所要完成的工作。视频监控系统的开发平台。对平台做一个简单的介绍,并介绍搭建的过程。V4L2的介绍与使用方式。对Linux下的VideoForLinux2进行详细的介绍,并详细讲述使用方法和重要函数。视频监控系统的软件设计和编码。软件部分采用模块化设计,通过对服务端和客户端的分别编码,实现整个视频监控系统的设计和实现。结束语。对所完成的任务进行总结,指出该系统的不足指出,以此来展望之后的研究。2.硬件平台概述2.1硬件平台介绍2.1.1摄像头介绍摄像头(CREMA)作为一种视频输入设备,在电子技术成熟的今天被广泛的应用与视频聊天、视频会议、视频监控、远程医疗和视频摄录等方面,由于图像传感和解析技术的成熟,使得摄像头所摄录的图片和视频的质量有了明显的提高,同时由于硬件技术的成熟,摄像头的价格也在大幅度的下降。相比于传统的、专业的摄像机等视频输入工具,摄像头具有体积小、使用性高、方便、即插即用等特性,如今人们在进行非专业的视频图像录制时,再也不需要扛着“长枪短炮”了,只需小小的摄像头并可达到录制的要求。摄像头正在取代着一部分的录制设备,在人们的日常生活中扮演着越来越重要的角色。摄像头一般被分为数字摄像头和模拟摄像头两大类。模拟摄像头可以采集的模拟视频信号转化成数字信号,之后将其存储到计算机里。模拟摄像头捕捉到的信号必须经过特定的设备将模拟信号转化成数字信号,并加以压缩后才可被计算机所运用,数字摄像头可以直接捕捉影像,然后通过USB或者串并口传到计算机里。目前市场上的摄像头主要是以数字摄像头为主,并且目前计算机上的接口多为USB接口,所以数字摄像头又以USB接口数字摄像头为主,以下介绍USB数字摄像头。USB数字摄像头的工作原理为:景物通过镜头生成的光学图像投射到了光传感器的上面,由光传感器将其转化为电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片DSP中进行加工处理,将其转化为特定的图像格式,如JPEG格式,再通过USB结构传输到处理器中进行处理,实现图像显示存储或编码传输。USB数字摄像头结构图如图所示:图2-1数字摄像头结构图图2-1数字摄像头结构图在组成摄像头的所有部件中,最重要、最为核心的两个部件是图像传感器芯片和DSP芯片。图像传感器是一种半导体芯片,其中表面包含有几十万到几百万的光电二极管。光电二极管受到光照射时,就会产生电荷。它可以分为CCD和CMOS两类,光电二极管的芯能将直接决定摄像头的最大分辨率和图像质量。CCD的优点是灵敏度高,噪音小,信噪比大,但是生产工艺复杂、成本高、功耗高。CMOS的优点是集成度高、功耗低(不到CCD的1/3)、成本低,但是噪音比较大、灵敏度较低、对光源要求高。从成本考虑,市场上大多还是采用CMOS的图像传感器,各厂商通过采用影像光源自动增益补偿技术,自动亮度、白平衡控制技术,色饱和度、对比度、边缘增强以及伽马校正等先进的影像控制技术,完全可以达到与CCD摄像头相媲美的效果。数字信号处理芯片DSP一般包括这三个模块:镜像信号处理器ISP,JPEG图像解码器,USB设备控制器,主要功能是通过一系列的复杂数据算法运算,对数字图像信号进行优化处理(如压缩编码),并把处理后的信号通过USB等接口传到PC等设备。DSP芯片类型的不同将直接影响图片格式的差异。USB摄像头的图像格式主要有以下几种:JPEG格式,YUV格式和第三格式。其中第三格式是指厂家用自己的图像压缩算法对RGB格式的数据压缩后得到的图片格式。同一种图像格式的摄像头由于采集芯片型号的不同,捕获的图像数据流可能也会存在微小的差异,有些芯片会在JPEG图像数据前加一定的头部,有些则没有;有些YUV格式的芯片采用YYUV的数据流格式,有些则采用YUVY数据流格式。2.1.2运行硬件平台介绍本系统的的运行硬件为一台装有Linux虚拟机的Window操作系统的笔记本电脑,配置为:处理器i5,内存12G。2.2软件平台介绍2.2.1Linux操作系统Linux操作系统是一套可以免费使用和自由传播的操作系统,是一个是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux操作系统诞生于1991年的10月5日。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。Linux的文件结构:/:根目录所有的目录、文件、设备都显示在/之下,/是Linux文件系统的组织者,也是最上层的管理者。/bin:bin是二进制binary的英文缩写。在一般的系统当中,都可以再这个目录下找到Linux的最常用的命令。系统需要的那些命令经常位于此处。/boot:Linux的内核以及引导系统程序所需要的文件目录,一般情况下,GRUB或者LILO系统引导管理器也位于这个目录。/cdrom:这个目录在刚刚完成系统安装的时候是空的,可以将光驱文件系统挂载到此目录上。/dev:dev是设备device英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是用来放外部设备的驱动的,而是一个访问这些外部设备的端口。可以非常方便的去访问这些外部设备,和访问其他的文件和目录没有任何区别。/etc:etc这个目录是Linux系统中最重要的目录之一。在这个目录下存放了系统管理时要用到的各种配置文件和子目录。要用到的网络配置文件,文件系统,系统配置文件,设备配置信息,设置用户信息等都在这个目录下。/home:如果建立了一个用户,用户名是XX,那么在/home下就会有一个对应的路径名为/home/xx路径,用来存放用户的主目录。/lib:lib是库library英文缩写。这个目录是被用来存放系统动态连接共享库的。几乎所有的应用程序都会用到这个目录下的共享库。因此,不要轻易的对这个目录进行操作。/root:Linux超级权限用户root的家目录。/sbin:这个目录是用来存放系统管理员的系统管理程序。大多是设计系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通的用户无权执行这个目录下的命令。/usr:这是Linux系统中占用应哦按控件最大的目录,用户的很多应用程序和文件都存放在这个目录下。/tmp:临时文件目录,用来存放不同程序执行时所产生的临时文件。2.2.2QTQT是一个由奇趣科技在1991年开发的跨平台C++图形用户界面应用程序开发框架。它可以开发GUI程序,也可以用于开发非GUI程序,比如控制台工具和服务器。QT是面向对象的框架,使用特殊的代码生成扩展以及一些宏,易于扩展,允许组建编程。2008年,奇趣公司被诺基亚公司收购,QT因此成为诺基亚旗下的编程语言工具。2012年,QT被Digla收购。Qt的优势:Qt具有优良的跨平台特性:QT支持包括Windows、Linux、UNIX等数十个系统。面向对象:QT良好的封装机制使得QT的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。QT提供了一种称为signal/slots的安全类型来替代callback,这使得各个模块之间的协同工作变得十分简单。丰富的API:QT包括多达250个以上的C++类,还提供基于模板的collections,serialization,file,I/Odevice,directorymanagement,date/time类。甚至还包括正则表达式的处理功能。支持2D/3D图形渲染,支持OpenGL。大量的开发文档。XML支持。常用类:QDialog:代表对话框,用来实现那些只是暂时存在的用户界面,是独立的窗口,但通常也有父窗口。对话框有模态和非模态两种,,非模态对话框的行为和使用方法都类似于普通的窗口,模态对话框则有所不同,当模态对话框显示时,其他窗口将全部进入非激活状态,不能接受键盘和鼠标事件。模态的方式又可分为两种,一种是对整个应用程序模态,这时它的出现将导致程序中的所有窗口失去响应;另一种是对窗口模态,这时仅仅会导致它所在的整个窗口树失去响应。构造:QDialog(QWidget*parent=0,Qt::WindowFlagsf=0);模态性:voidsetModal(boolmodal);//设置对话框的模态性,当modal为true时为模态,默认对整个应用程序模态voidsetWindowModality(Qt::WindowModalitywindowModality);//设为对窗口模态.Qt::WindowModality有以下取值:Qt::NonModal:非模态Qt::WindowModal:窗口模态Qt::ApplicationModal:应用程序模态Qt::WindowModalitywindowModality()const;//得到窗口的模态性boolisModal()const;//判断窗口是否为模态的QLabel:代表标签,是一个用于显示文本或图像的窗口部件构造:QLabel(QWidget*parent=0,Qt::WindowFlagsf=0);QLabel(constQString&text,QWidget*parent=0,Qt::WindowFlagsf=0);//能够同时通过参数text给出要显示的文本,因此是最常用的构造方式属性:QStringtext()const;//获取显示的文本voidsetText(constQString&text);//设置显示的文本,这是一个槽constQPixmap*pixmap()const;//获取显示的图像voidsetPixmap(constQPixmap&pixmap);//设置显示的图像,这是一个槽voidsetNum(intnum);//设置显示的文本为代表整数num的字符串,这是一个槽voidsetNum(doublenum);//设置显示的文本为代表浮点数num的字符串voidclear;//清空显示内容alignment代表显示内容的对齐方式:Qt::Alignmentalignment()const;//获取对齐方式voidsetAlignment(Qt::Alignmentalign);//设置对齐方式Qt::Alignment有以下取值:Qt::AlignLeft:水平方向靠左Qt::AlignRight:水平方向靠右Qt::AlignHCenter:水平方向居中Qt::AlignJustify:水平方向调整间距两端对齐Qt::AlignTop:垂直方向靠上Qt::AlignBottom:垂直方向靠下Qt::AlignVCenter:垂直方向居中Qt::AlignCenter:等价于Qt::AlignHcenter|Qt::AlignVCenter,即水平和垂直方向都居中indent代表文本的缩进值:intindent()const://获取文本缩进值voidsetIndent(intindent);//设置文本缩进值margin代表显示内容的边距:intmargin()const;//获取边距voidsetMargin(intmargin);//设置边距wordWrap代表显示的文本是否允许换行:boolwordWrap()const;//判断是否允许换行voidsetWordWrap(boolon);//设置是否允许行换行scaledContents表示显示图像时是否允许缩放:boolhasScaledContents()const;//判断是否允许图像缩放voidsetScaledContents(boolon);//设置是否允许图像缩放,如果允许缩放,则显示图像时会进行缩放以填满整个显示区域QPushButton:代表按钮,它继承了QAbstractButton,因此也有其全部的属性,信号和槽构造:QPushButton(QWidget*parent=0);QPushButton(constQString&text,QWidget*parent=0);QPushButton(constQIcon&icon,constQString&text,QWidget*parent=0);//text是按钮上显示的文本,icon是按钮的图标,生成的对象默认是没有开关状态的属性:boolisFlat()const;//判断外观是否为扁平状voidsetFlat(boolflat);//设置外观是否为扁平状如果为true,则按钮是扁平的,否则就是立体的如果一个按钮在对话框中,那么它就有默认和自动默认的概念,分别由default属性以及autoDefault属性控制:boolisDefault(0const;//判断按钮是否为默认按钮voidsetDefault(boolon);//设置按钮是否为默认按钮boolautoDefault()const;//判断按钮是否为自动默认按钮voidsetAutoDefault(bool)//设置按钮是否为自动默认按钮对话框中同一时刻只能有一个默认按钮,当用户按回车键时,等价于在对话框中单击这个按钮.实际上,对话框中还有一个主默认按钮的概念。一个自动默认按钮得到焦点时,就会变成默认按钮;失去焦点时,主默认按钮就成为默认按钮。而设置一个按钮的默认属性为true将同时使它成为对话框的主默认按钮。2.2.3Vi编辑器Vi编辑器是Visualinterface的简称,通常称之为VI。它可以执行诸如输出、删除、查找、替换、块操作等众多文本操作,而用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。Vi搬机器并不是一个排版程序,它不像Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。没有菜单,只有命令,且命令繁多。Vi有三种编辑模式:命令模式、插入模式和末行模式。其中命令模式可以控制屏幕光标的移动,字符、字或行的删除,移动复制某区段进入插入模式下,或者到末行模式;插入模式用于做文字输入等相关操作;末行模式用于将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号等。vi模式切换的方式如图所示。图2-2Vi模式切换方式图2-2Vi模式切换方式Vi的基本操作:进入vi:$vimyfile切换至插入模式:在命令行模式下按一下字母i就可以进入插入模式。切换至命令模式:按下Esc键就可以进入命令模式。2.2.4ARM交叉编译环境交叉编译是嵌入式开发过程中的一项重要技术,其主要特征是某机器中执行的程序代码不是在本机编译生成,而是由另一台机器编译生成,一般把前者称为目标机,后者称为主机。采用交叉编译的主要原因在于,多数嵌入式目标系统不能提供足够的资源供编译过程使用,因而只好将编译工程转移到高性能的主机中进行,这就需要在强大的pc机上建立一个用于目标机的交叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。linux下的交叉编译环境重要包括以下几个部分:1.针对目标系统的编译器gcc;2.针对目标系统的二进制工具binutils;3.目标系统的标准c库glibc,有时出于减小libc库大小的考虑,你也可以用别的c库来代替glibc,例如uClibc、newlib等;4.目标系统的linux内核头文件。交叉编译环境的搭建方法:交叉编译环境搭建所需要的文件:binutils-2.15.tar.bz2:这个压缩包包含有ld,ar,as等一些产生或者处理二进制文件的工具。其主要目的是为GNU系统提供汇编和连接工具等。gcc-3.4.5.tar.bz2:这个压缩包主要是为GNU系统提供C编译器。现在支持多种语言,这其中包括C/C++、Fortran、Java、Objective-C、Ada等。glibc-2.2.5.tar.gz:Libc是很多用户层应用都要用到的库,用于定义系统调用和其它一些基本的函数调用。glibc-linuxthreads-2.2.5.tar.gz:这是Libc用于支持Posix线程而单独发布的一个压缩包。linux-2.6.8.tar.bz2:这个压缩包就是Linux的内核,在编译glibc时,要用到Linux内核中的include目录的内核头文件。3.V4L2详细介绍3.1V4L2概述3.1.1什么是V4L2VideoforLinuxtwo(Video4Linux2)简称V4L2,是V4L的改进版。V4L2是linux操作系统下用于采集图片、视频和音频数据的API接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。在远程会议、可视电话、视频监控系统和嵌入式多媒体终端中都有广泛的应用。在Linux下,所有外设都被看成一种特殊的文件,成为“设备文件”,可以象访问普通文件一样对其进行读写。一般来说,采用V4L2驱动的摄像头设备文件是/dev/v4l/video0。为了通用,可以建立一个到/dev/video0的链接。V4L2支持两种方式来采集图像:内存映射方式(mmap)和直接读取方式(read)。V4L2在include/linux/videodev.h文件中定义了一些重要的数据结构,在采集图像的过程中,就是通过对这些数据的操作来获得最终的图像数据。Linux系统V4L2的能力可在Linux内核编译阶段配置,默认情况下都有此开发接口。V4L2从Linux2.5.x版本的内核中开始出现。V4L2规范中不仅定义了通用API元素(CommonAPIElements),图像的格式(ImageFormats),输入/输出方法(Input/Output),还定义了Linux内核驱动处理视频信息的一系列接口(Interfaces),这些接口主要有:视频采集接口——VideoCaptureInterface;视频输出接口——VideoOutputInterface;视频覆盖/预览接口——VideoOverlayInterface;视频输出覆盖接口——VideoOutputOverlayInterface;编解码接口——CodecInterface。3.1.2V4L2的主要功能V4L2的主要功能是使程序有发现设备和操作设备的能力.它主要是用一系列的回调函数来实现这些功能。像设置摄像头的频率、帧频、视频压缩格式和图像参数等等。当然也可以用于其他多媒体的开发,如音频等。V4L2是为Linux操作系统开发的,所以此框架只能运行在Linux操作系统之上。3.2V4L2使用方法3.2.1V4L2驱动的主要ioctl/*查询能力*/#defineVIDIOC_QUERYCAP_IOR('V',0,structv4l2_capability)/*获得格式*/#defineVIDIO_G_FMT_IOWR('V',4,structv4l2_format)/*设置格式*/#defineVIDIOC_S_FMT_IOWR('V',5,structv4l2_format)/*申请内存*/#defineVIDIOC_REQBUFS_IOWR('V',8,strutv4l2_requestbuffers)/*获得Framebuffer*/#defineVIDIOC_G_FBUF_IOW('V',10,structv4l2_framebuffer)/*设置Framebuffer*/#defineVIDIOC_S_BUF_IOW('V',11,structv4l2_framebuffer)/*设置Overlay*/#defineVIDIOC_OVERLAY_IOW('V',14,int)/*将内存加入队列*/#defineVIDIOC_QBUF_IOWR('V',15,structv4l2_buffer)/*从队列取出内存*/#defineVIDIOC_DQBUF_IOWR('V',17,strutv4l2_buffer)/*开始流*/#defineVIDIOC_STREAMON_IOW('V',18,int)/*停止流*/#defineVIDIOC_STREAMOFF_IOW('V',19,int)/*得到控制*/#defineVIDIOC_G_CTRL_IOWR('V',27,structv4l2_control)/*设置控制*/#defineVIDIOC_S_CTRL_IOWR('V',28,structv4l2_control)3.2.2V4L2的主要结构1)设备能力结构structv4l2_capability{__u8driver[16];//驱动名__u8card[32];//例如HauppaugewinTV__u8bus_info[32];//PCI总线信息__u32version;//内核版本__u32capabilities;//设备能力__u32reserved[4];};2)数据格式结构structv4l2_format{enumv4l2_buf_typetype;//本结构的数据类型};3)像素格式结构structv4l2_pix_format{__u32width;//宽度__u32height;//高度}4)请求缓冲structv4l2_requestbuffers{__u32count;//缓存数量enumv4l2_buf_typetype;//数据流类型}5)数据流类型包括V4L2_MEMORY_MMAP和V4L2_MEMORY_USERPTRenumv4l2_memory{};3)像素格式结构structv4l2_pix_format{__u32width;//宽度__u32height;//高度}4)请求缓冲structv4l2_requestbuffers{__u32count;//缓存数量enumv4l2_buf_typetype;//数据流类型}3.2.3V4L2操作流程打开设备文件。关键操作:intfd=open(”/dev/video0″,O_RDWR);取得设备的capability关键操作:ioctl(fd,VIDIOC_QUERYSTD,&std);设置视频的制式和帧格式,制式包括PAL,NTSC,帧的格式个包括宽度和高度等。关键操作:ret=ioctl(fd,VIDIOC_S_FMT,&fmt);向驱动申请帧缓冲,一般不超过5个。关键操作:ioctl(fd,VIDIOC_REQBUFS,&req);将申请到的帧缓冲映射到用户空间,以便操作缓存到的帧。将申请到的帧缓冲全部入队列,以便存放采集到的数据。关键操作:memset(&buf,0,sizeof(buf));ioctl(fd,VIDIOC_QUERYBUF,&buf);buffers[numBufs].start=mmap(NULL,buf.length,PROT_READ|PROT_WRITE,MAP_SHARED,fd,buf.m.offset);开始视频的采集。关键操作:ioctl(fd,VIDIOC_STREAMON,&type);出队列以取得已采集数据的帧缓冲,取得原始采集数据。VIDIOC_DQBUF,将缓冲重新入队列尾,这样可以循环采集。关键操作:ioctl(fd,VIDIOC_DQBUF,&buf);停止视频的采集。关键操作:ioctl(fd,VIDIOC_STREAMOFF,&type);关闭视频设备。关键操作:close(fd);4.软件详细设计4.1软件运行环境方案软件平台采用的嵌入式操作系统为Linux2.4.21。Linux具有内核小、效率高、源码开放、内核直接提供网络支持等优点,但嵌入式系统的硬件资源有限,因此需根据实际需求对内核进行裁剪,配置所需的功能模块,然后再移植到硬件平台上。嵌入式系统的软件开发采用交叉编译调试的方式在宿主机上安装Linux系统,建立交叉编译环境,在宿主机编写程序代码,再利用交叉编译工具生成目标机上可用的可执行文件,用该文件向目标机平台移植。4.2服务器设计方案服务器模块通过嵌入式Linux操作系统调用Video4Linux2和底层设备驱动程序来完成视频捕获。V4L2是Linux中关于视频设备的内核驱动,它为Linux下的各种视频设备提供了统一的编程接口,应用程序通过这些接口函数就可以操纵各种不同的设备。视频采集流程如图4-1所示。图4-1视频采集流程图4.2.1视频采集初始化在Linux下,摄像头硬件已经被映射为设备文件“/dev/video0”,用open函数打开这个设备文件,获得其文件描述符fd,然后对这个文件描述符进行参数初始化。1.设置视频点阵格式和点阵大小主要是对结构体v4l2_format进行赋值,它由type和联合体fmt构成,来描述视频设备当前行为和数据的格式。把type赋值为视频采集类型V4L2_BUF_TYPE_VIDEO_CAPTURE,表示定义了一个视频采集流类型的buffer。fmt中,pix为表示图形格式的v4l2_pix_format型结构体。需要设定pix里的几个变量,pixelformat表示采集格式,设置为V4L2_PIX_FMT_YUV420;width、height表示图像的宽度、高度,以字节为单位;sizeimage表示图像所占的存储空间大小,以字节为单位;bytesperline表示每一行的字节数。赋值后,用ioctl函数通过这个结构体对fd进行设置。structv4l2_streamparm{enumv4l2_buf_typetype;union{structv4l2_captureparmcapture;structv4l2_outputparmoutput;__u8raw_data[200];/*user-defined*/}parm;};4.2.2申请并设置视频采集的帧缓冲区前期初始化完成后,只是解决了一帧视频数据的格式和大小问题,而连续视频帧数据的采集需要用帧缓冲区队列的方式来解决,即要通过驱动程序在内存中申请几个帧缓冲区来存放视频数据。应用程序通过API接口提供的方法(VIDIOC_REQBUFS)申请若干个视频数据的帧缓冲区,申请帧缓冲区数量一般不低于3个,每个帧缓冲区存放一帧视频数据,这些帧缓冲区在内核空间。/*setdevicerequestbuffer*/staticintset_req(intnum_buffer,intfd){ structv4l2_requestbuffersreqbuf; memset(&reqbuf,0,sizeof(structv4l2_requestbuffers)); reqbuf.count =num_buffer; reqbuf.type =V4L2_BUF_TYPE_VIDEO_CAPTURE; reqbuf.memory =V4L2_MEMORY_MMAP; if(ioctl(fd,VIDIOC_REQBUFS,&reqbuf)<0){ fprintf(stderr,"VIDIOC_REQBUFSERROR:%s\n",strerror(errno)); return-1; } return0;}应用程序通过API接口提供的查询方法(VIDIOC_QUERYBUF)查询到帧缓冲区在内核空间的长度和偏移量地址。应用程序再通过内存映射方法(mmap),将申请到的内核空间帧缓冲区的地址映射到用户空间地址,这样就可以直接处理帧缓冲区的数据。/*mapthedevicebuffers*/staticintmap_devf(intnum_buffer,intfd,unsignedchar**mem_list){ structv4l2_bufferbuf; inti=0; for(i=0;i<num_buffer;i++){ memset(&buf,0,sizeof(structv4l2_buffer)); buf.index =i; buf.type =V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory =V4L2_MEMORY_MMAP; if(ioctl(fd,VIDIOC_QUERYBUF,&buf)<0){ fprintf(stderr,"VIDIOC_QUERYBUFERROR:%s\n",strerror(errno)); return-1; } if((mem_list[i]=(unsignedchar*)mmap(0,buf.length,PROT_READ,MAP_SHARED,\ fd,buf.m.offset))==MAP_FAILED){ fprintf(stderr,"mmaperror:%s\n",strerror(errno)); return-1; } } return0;}(1)将帧缓冲区在视频输入队列排队,并启动视频采集在驱动程序处理视频的过程中,定义了两个队列:视频采集输入队列(incomingqueues)和视频采集输出队列(outgoingqueues),前者是等待驱动存放视频数据的队列,后者是驱动程序已经放入了视频数据的队列。如图2所示。应用程序需要将上述帧缓冲区在视频采集输入队列排队(VIDIOC_QBUF),然后可启动视频采集。/*Queuethebuffers*/staticintset_mem_type(intnum_buffer,intfd){ inti=0; structv4l2_bufferbuf; for(i=0;i<num_buffer;i++){ memset(&buf,0,sizeof(structv4l2_buffer)); buf.index =i; buf.type =V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory =V4L2_MEMORY_MMAP; if(ioctl(fd,VIDIOC_QBUF,&buf)<0){ fprintf(stderr,"VIDIOC_QBUF1ERROR:%s\n",strerror(errno)); return-1; } } return0;}(2)循环往复,采集连续的视频数据启动视频采集后,驱动程序开始采集一帧数据,把采集的数据放入视频采集输入队列的第一个帧缓冲区,一帧数据采集完成,也就是第一个帧缓冲区存满一帧数据后,驱动程序将该帧缓冲区移至视频采集输出队列,等待应用程序从输出队列取出。驱动程序接下来采集下一帧数据,放入第二个帧缓冲区,同样帧缓冲区存满下一帧数据后,被放入视频采集输出队列。应用程序从视频采集输出队列中取出含有视频数据的帧缓冲区,处理帧缓冲区中的视频数据,如存储或压缩。最后,应用程序将处理完数据的帧缓冲区重新放入视频采集输入队列,这样可以循环采集,如图4-2所示图4-2视频采集输入和输出示意图最终停止采集,释放内存帧缓冲区4.2.3视频传输TCP/IP:TransmissionControlProtocol/InternetProtocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通信协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址。设置流程://创建socketsockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd<0){ syslog(LOG_DEBUG,"socket:%s\n",strerror(errno)); //exit(1); } //创建ip和port structsockaddr_inaddr; memset(&addr,0,sizeof(addr)); addr.sin_family=AF_INET; addr.sin_port=htons(atoi(argv[1])); addr.sin_addr.s_addr=INADDR_ANY; //bindip,port和socket if(bind(sockfd,(structsockaddr*)&addr,sizeof(addr))<0){ syslog(LOG_DEBUG,"bind:%s\n",strerror(errno)); //exit(1); } //开始listen if(listen(sockfd,10)<0){ syslog(LOG_DEBUG,"listen:%s\n",strerror(errno)); //exit(1); }4.3客户端设计方案4.3.1客户端界面客户端需要具备的功能主要有拍照、暂停、停止和录像功能,界面如图4-3所示:图4-3客户端界面客户端界面是用QT来实现的,其中菜单栏使用QT的QMenu控件制作。//FileMenufileMenu=menuBar()->addMenu("&File");exitAct=fileMenu->addAction("E&xit");newAct=fileMenu->addAction("N&ew");//EditMenueditMenu=menuBar()->addMenu("&Edit");optionAct=editMenu->addAction("&Options");//HelpMenuhelpMenu=menuBar()->addMenu("&Help");aboutAct=helpMenu->addAction("&AboutMe");aboutQtAct=helpMenu->addAction("About&Qt");new和close的控制按钮是由QToolBar和QButton制作。mainToolBar=addToolBar("Main");mainToolBar->setMovable(true);mainToolBar->setIconSize(QSize(32,32));//设置图片和文字同时显示mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);new_w=mainToolBar->addAction("New");new_w->setEnabled(true);new_w->setIcon(QIcon(":/new.jpeg"));shutdown=mainToolBar->addAction("Close");shutdown->setEnabled(true);shutdown->setIcon(QIcon(":/stop1.png"));myfra=newQFrame(this);myfra->setAutoFillBackground(true);myfra->setEnabled(false);myfra->setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored);img.load(":/head.jpg");mainToolBar->addWidget(myfra);connect(new_w,SIGNAL(triggered()),this,SLOT(createclient()));connect(shutdown,SIGNAL(triggered()),this,SLOT(close()));视频的播放界面使用QImage来制作。img.load(":/uncon.png");addrlbl=newQLabel(QString("%1").arg(addr),this);addrlbl->setStyleSheet("color:red");addrlbl->setAlignment(Qt::AlignLeft);addrlbl->setFont(QFont("Monospace",18,QFont::Bold));shoot=newQPushButton(this);shoot->setIcon(QIcon(":/shoot.png"));shoot->setIconSize(QSize(32,32));shoot->setToolTip("takephotos");shoot->setFlat(true);shoot->setFixedSize(32,32);shoot->setEnabled(true);sta=newQPushButton(this);sta->setIcon(QIcon(":/pause.png"));sta->setIconSize(QSize(32,32));sta->setToolTip("startandpause");sta->setFlat(true);sta->setFixedSize(32,32);sta->setEnabled(true);clo=newQPushButton(this);clo->setIcon(QIcon(":/stop.png"));clo->setIconSize(QSize(32,32));clo->setToolTip("exit");clo->setFlat(true);clo->setFixedSize(32,32);clo->setEnabled(true);conbar=newQHBoxLayout;conbar->addWidget(shoot);conbar->addWidget(sta);conbar->addWidget(clo);QGridLayout*mainwindow=newQGridLayout;mainwindow->setContentsMargins(0,0,0,0);mainwindow->setVerticalSpacing(0);mainwindow->addWidget(fra,0,0);mainwindow->addWidget(addrlbl,1,0,Qt::AlignLeft|Qt::AlignBottom);//mainwindow->addLayout(conbar,1,1,1,0,Qt::AlignCenter);//mainwindow->addLayout(conbar,1,1,1,0,Qt::AlignHCenter);mainwindow->addLayout(conbar,1,1,1,1,Qt::AlignRight|Qt::AlignBottom);this->setLayout(mainwindow);this->resize(800,648);4.3.2录像功能录像功能主要是使用一个开源库avilib实现,avilib可以将连续的视频流转化为视频文件,具体使用方法为:avi=AVI_open_output_file(filename.toAscii());//打开视频流文件avi=AVI_open_output_file("./1234.avi");//设置文件名AVI_set_video(avi,320,240,8,"MJPG");//设置视频流格式AVI_close(avi);//停止视频录制当执行停止视频录制的函数时,avilib会自动将已经捕获的视频流压缩成视频文件。4.3.3拍照功能拍照功能主要使用QT下QImage控件下的save方法。由于客户端的视频显示窗口是使用QImage实现的,而QImage的save方法可以将当前显示在QImage上的图片保存为jpeg图片文件,save方法的使用方法为:img.save("image.jpg","JPEG");执行此函数后,QImage会自动保存文件名为image.jpg的JPEG的图片。4.4软件使用流程说明4.4.1打开服务端首先,打开命令终端,找到执行文件所在的目录,在执行语句后加两个参数,第一个参数为摄像头所对应的/dev下的文件的名称,第二个参数为设定的端口号。如图4-1所示:图4-4服务端运行命令在输入命令后,点击回车键输入命令,如果运行成功,会显示出视频拍摄设备的信息以及拍摄的视频格式信息,如果未成功,则会打印出错误原因,运行成功后如图4-2所示:图4-5服务端运行成功服务端运行成功后,点击客户端图标打开客户端,打开后界面如图4-3所示:图4-6客户端运行界面点击工具栏上的New图标或点击显示区的new,会自动创建一个显示窗口,之后点击第一个图标,会跳出一个窗口,提示输入IP地址,端口号,以及设备名称,如图4-4所示:图4-7输入信息界面在输入正确信息后点击ok键,屏幕会显示出系统捕获的视频,同时进入录像模式,系统会自动将视频保存为视频文件。如图4-5所示:图4-8视频开始显示在播放时,点击暂停按钮会让画面暂停,点击拍照功能会将当前显示的图像保存成图片文件,方便显示,点击停止按钮会停止视频的播放。

结论通过历时数月的研究和总结,我终于完成了该系统的全部内容,在这个过程中,我深刻的了解监控系统的历史和发展现状,以及使用范围,并利用所了解的知识成功的编写出了一套界面简单、功能全面,并具有实用价值的可运行在嵌入式设备上的视频监控系统。不仅深刻了我对各项相关知识的理解,让我学以致用,而且让我从学习并实践的过程中,深深的感受到了编程所带给我快乐和成就感,让我对编程更加热爱。在编程的过程中,我也深刻的体会到了“书到用时方恨少”的深刻含义,发现问题、研究问题、分析问题、解决问题这一套流程看似容易,实践起来却是十分困难。努力寻找解决方法的艰难困苦,和完成系统时忍不住的欣喜若狂一样,令人刻骨铭心。我深深的感觉到要寻找问题的答案绝非易事,也正因为如此,苦心努力所得到的结果才显得弥足珍贵。问题是没有穷尽的,但是人挑战问题的脚步却永不停歇,只有保持着对解决问题的渴望和决心,才能更多更好的解决问题!本系统共实现了服务器端和客户端两个大模块,其中服务器端的主要功能是从硬件设施上得到捕获的视频流,并传输到客户端上,由客户端实现对视频的现实、保存、拍照等一系列功能,但是由于时间紧迫,本系统软硬件设计还存在很多方面的不足之处,需要进一步完善,因此本人希望在未来的工作中对一下方面加以改进:使用专门的视频解码芯片对图像数据进行压缩,采用更适合网络传输的视频压缩格式MPEG-4图像压缩算法已达到更好的效果。将客户端移植到Windows或者以Web方式来访问服务器以满足更多用户的需求。增加视频识别功能,自动将无用的视频删除,只保留记录关键信息的视频。参考文献StephenPrata.CPrimerPlus.人民邮电,2005W.RichardStevens.AdvancedProgrammingintheUNIXEnvironment.人民邮电,2008JasminBlanchette,C.GUI.Qt.4编程(第二版).电子工业,2008韩少云.基于嵌入式Linux的Qt图形程序实战开发.北京航空航天大学出版社艾朱斯特.C++Qt设计模式(第二版).电子工业出版社,2012霍亚飞.Qt及QtQuick开发实战精解.北京航空航天大学出版社,2012赵国安,郁斌,薛琳强.基于Linux嵌入式原理与应用开发.清华大学,2008梁笃国,网络视频监控技术与智能应用,人民邮电,2012NeilMatthewRichardStones.Linux程序设计(第四版).人民邮电出版社汪光华.智能安防:视频监控全面解析与实例分析.机械工业出版社,2012

致谢首先,非常感谢王羽老师和孟亮老师,在他们的悉心指导下,我的论文得以顺利完成,在我完成毕业设计这段时间,王老师给我了我莫大的帮助与鼓舞,他知识渊博,思维缜密,工作踏实严谨,潜移默化地熏陶着我们,鞭策着我们。而在论文完成期间,孟老师也给了我无数的指导和建议,让我及时了解到自己的错误并改正。在此,向王老师和孟老师表示由衷的感谢和崇高的敬意,今后都会将老师的谆谆教诲牢记于心!同时,感谢所有热情帮助过我,支持过我的所有老师同学,他们在学习和生活上给了我莫大的帮助,让我感受到了集体的温暖与力量!

外文原文TheImplementationofEmbeddedImageAcquisitionBasedonV4L2LUYinli,YUHongli,ZHANGPengpengPhysicalElectronics,DepartmentofElectricalEngineeringofUniversityofSouthChinaHengyang,People’sRepublicofChinaluyinli198755@163.com,tianqing924@163.comAbstractInviewofthecurrentsituationofthelessembeddedLinuximageacquisitionapplicationbasedonV4L2(VideoforLinuxTwo),embeddedimageacquisitionsystembasedonV4L2isdesigned.S3C6410isadoptedashardwaredevelopmentplatformandLinuxassoftwareplatform.AfterloadingthedriverofCMOScameraOV9650andotherrelativedrivers,imageacquisitionapplicationsonthebasisofV4L2iscompiled,adoptingdoubleframebuffertoreduceCPUutilizationratetoaccomplishacquisitionandpreviewimage.Withthesizeof400×480andtheframerateof15framespersecond,thepicturecollectedshowsclearlyandithasgoodquality.Theexperimentresultindicatesthatthesystemhasgoodscalability,anditoffersanewideaforembeddedhand-helddevices.Keywords-V4L2;OV9650;imageacquisition;S3C6410;doubleframebuffer

I.INTRODUCTIONThevideoimageprocessingtechnologyiswidelyusedinelectronictechnologyandcomputertechnology.Theimagefromacameraorotherimageacquisitionequipmentsistransformedmathematicallytogettheinformationofdigitalimage;then,itisencoded,filtered,enhanced,recovered,compressed,storedandotherprocessesconductedbythecomputer;visualimagesandotherresultsfinallywillbereceived.Withthedevelopmentofembeddedtechnology,thecurrentimageacquisitiontechnologyistransformedfromtheanaloguetothedigital.Amongthem,embeddedimageacquisitionattractsmoreandmorepeople'sattentionforitssuperiorperformance.Embeddedmicroprocessoristhebestchoicefortheimageprocessingsystembecauseofitshighperformance,cost-effective,andlowpower.SamsungS3C6410hasARM11coreandadopts64/32bitinternalbusarchitecture.Italsoincludesmanypowerfulhardwareacceleratorssuchasmotionvideoprocessing,audioprocessandsoon.AnintegratedMFC(MultiFormatcodec)supportsencodinganddecodingofMPEG4/H.263/H.264anddecodingofVC1,soitisveryconvenientforimageprocessing.S3C6410isutilizedasthecoreoftheembeddedhardwareplatform,thepaperdesignsaimagecollectionapplicationsonbaseofV4L2.AfteraddingsupportforOV9650andV4L2tothekernelandtransplantingLinuxoperatingsystemtothehardwareplatform,imageacquisitionapplications,usingdoubleframebuffertoreducepowerconsumption,isdevisedonthebasisofV4L2,ultimately,picturewillbegatheredandshowedontheLCD.II.HARDWARESYSTEMSTRUCTUREThewholeimageacquisitionsystemmainlyincludesCMOScameraOV9650,corecontrollerS3C6410,LCDandothersperipherals.Thesystemhardwarestructureisshowedasfig

温馨提示

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

评论

0/150

提交评论