基于V4L2和web的图像监控系统

  • 格式:docx
  • 大小:1.21 MB
  • 文档页数:8

基于V4L2和web的图像监控系统摘要:在本文中,我们基于V4L2架构和Web为远程监控设计了一个嵌入式图像获取系统。

为了完成YUV数据获取、图像压缩和发送,摄像头、V4L2接口技术、libjpeg和ftplib等一些开源的库程序都被相互协调的组织在一起工作。

并且我们在这个嵌入式系统中移植了boa嵌入式web服务器,这使得用户能够通过web浏览器访问和管理图像监控系统。

系统中的硬件开发平台采用三星公司的S3C2440芯片,Linux系统作为软件开发平台。

本系统具有低成本、易于使用和强大的扩展等优点。

关键字:V4L2;图像压缩;嵌入式系统;Web1、介绍物联网(IOT)技术是未来发展趋势,它融合了网络和嵌入式系统开发的优点。

最近这些年,商务计算机,平板电脑,大型主机正在发展。

同时M2M通信技术,热插拔技术,空间定位技术,IPv6等技术正在逐渐的被广泛使用。

此外,分布式控制,柔性制造,信息家电以及嵌入式系统的需求大大增强。

随着网络的高速发展,多媒体通信技术,嵌入式系统也被广泛地使用在各个领域。

高带宽网络和高速处理器使得确保生活和工作安全和监听实时情况查看的监控系统变得尽可能方便,实现也非常容易。

不过有时候它也不需要获取实时和连续的媒体。

在一些特殊的领域,研究员更愿意将一系列静止的图像变成移动的视频。

比如观察农作物的生长情况等。

所以这个嵌入式图像监控系统(IMES)能够用于在植物学领域监控植物的生长,或者地质学风景变化,气象学中气候的变化等。

这些由监控系统收集起来的图像可以定期地捐献给它们的研究者。

用户无论什么时候在哪里也能够通过WEB服务器监控他们关系的一切事情。

在当今生活中,Linux和ARM变得越来越有用,人们已经不能将它们和电子产品分开了。

Linux系统最突出的特点之一就是免费并且其所有源代码完全开放:最新的源码都可以被使用、修改和分享。

可以说Linux统治了整个嵌入式系统。

在诸多CPU架构中,ARM是最广泛的并且使用32位指令集架构。

相对简单ARM处理器使得他们更适合低功耗的应用。

更多地,ARM-linux也被广泛应用于消费电子产品,包括个人数字助理(PDA)、数字多媒体、音乐播放器和计算机外设。

此外,有许许多多的基于Linux的开源软件,这使得设计者在开发产品的时候可以有很大的选择空间并且节约许多资金。

程序员也可按照某特殊应用裁剪系统,或者向系统中添加一些实用的功能。

在IMES中采用了开源的库程序libjpeg和ftplib。

前者用于压缩图片,后者用于图片数据的发送。

当涉及到基于Linux的图像捕获时, V4L2(video for Linux 2)是最基本的标准的视频驱动框架。

所有的视频设备几乎都支持V4L2,比如摄像头数字或者模拟电视等。

所以V4L2是本系统的基础。

另外,web是运行在因特尔网上的服务,并且其很容易在各种不同的系统上操作,并且对访问者提供了方便同时没有任何限制。

Boa也属于开源软件,其小型的特点使得更适合应用于嵌入式应用。

本文将按照以下方式组织内容。

第二部分用于接上系统的结构,第三部分将详细介绍其原理和核心技术的实现,在第四部分测试并分析最终结果,最后将在第五部分进行总结。

2、系统结构本IMES系统可以分成3个部分,监控子系统,网络传输子系统和控制中心子系统,如下面图1所示。

图1 IMES系统架构在监控子系统中,主要工作是捕获和压缩图片。

如果系统设置为“主动模式”,S3c2440将定期地将静态图片发送到数据库。

另一方面,如果系统设置为“被动模式”,用户可以通过web浏览器获得当前图像。

在监控系统中由于磁盘容量的限制,图像应该及时地被传输到控制中心中以避免磁盘占满导致数据丢失。

根用户能够通过web浏览器远程管理所有设置,像设置图片大小,设置压缩比率和设置图片捕获间隔时间等。

特别的,监控系统硬件平台如下图2所示:图2 硬件平台3、核心技术通常许多嵌入式行业的开发者都支持Linux操作系统,因为它免费且开源。

此外,小内核,高效率和可定制使Linux在嵌入式行业更为流行,比如手机,小型电脑,网络路由,电视,视频游戏终端等。

通常摄像头之间性能是不同的,大多数摄像头支持YUV格式。

为了便于进行数字图像处理,不得不将其转化成RGB格式。

Libjpeg选择为图像压缩的工具。

在获取和压缩了图像后,IMES将通过ftplib 发送到目标通道。

图3是实现的软件流程图:图3 软件流程图3.1 V4L2V4L2是V4L(video for linux)的第二个版本,它是Linux视频捕获应用程序的编程接口,支持许多USB网络摄像头,TV调音和其他设备。

V4l2与linux内核精密结合。

V4l在V4W(video for Windows)后才被命名,但并不意味着它们在技术上雷同。

在内核开发过程中,早在2.1.x版本的内核中介绍了最初的v4l。

通过设计者的修改和调试最终出现是在2.5.x内核中。

对于一个标准的框架,v4l2包含了两层含义。

第一层含义是应用程序能够通过打开设备文件(/dev/video)来获取设备的相关信息、设置设备熟悉等等。

另一层含义就是驱动程序必须实现框架所提供的设置设备属性的回调函数。

绝大多数设置和查询函数通过使用v4l2编程接口提供的ioctl(int fd,int request, void *argp)函数调用。

再者,具有代表性的设备都有许多由用户控制的接口,比如亮度,饱和度设置等。

不过,对于不同的设备来说可能有不同的有效的控制,并且其可能的取值和默认值随设备的不同都有所差异。

其中“request”参数能够作为ioctl函数的控制命令以此来操作不同的设备。

V4L2已经定义了一些主要的命令,如下表1所示:表1 主要命令和其说明3.2 图像压缩颜色空间是一个三维坐标系统,并且每种颜色通过一个点的坐标来表述。

在RGB 颜色空间中,红、绿、蓝是最基本的元素。

RGB通常在监视器上使用。

YUV(YCrCb)格式通常用在PAL制式上,这是欧洲默认的电视传输标准和视频压缩标准。

YUV 是一种典型使用彩色图像管道的一部分的颜色空间。

它编码彩色图片和视频时,可以考虑到人类的感知,可以减少色度分量的位宽,因此这使得传输或压缩过程中的错误比直接使用RGB模式的数据更有效地掩盖了。

在YUV空间中,每种颜色有一个亮度值Y和两个色度值U和V。

亮度信号表明了颜色的强度,使其与色度信号分开,其中亮度的改变不会影响色度值。

数字图像处理专用于图片,因此YUV必须要转化成RGB格式。

标准白光源和不同坐标系下的荧光粉,ITU无线电通信部门(ITU-R)和电影与电视工程师协会(SMPTE)为YUV和RGB之间的转化提供了几种变换矩阵。

下面的公式符合SMPTE 170三色坐标和参考白色。

(1)(1)中,R、G、B在0-1的范围,Y在0-1的范围,U和V是0.5 ~ 0.5范围内。

在计算机技术中,JPEG是在数码摄像中常用的一种有损压缩方法。

压缩的程度可以调整,允许在图像大小和图像质量之间进行权衡抉择。

同时,它是用户在占用小存储空间时能够得到高质量图片的优秀图像压缩方法,故它非常适用于嵌入式系统。

JPEG通常能够达到10:1的压缩率,并且图像质量并没有明显的损失。

典型使用的JPEG属于有损压缩方法,多少降低了图像的保真度,它不应该用于需要精确复制数据的场景。

Libjpeg是一个非常广泛的使用C语言来读写jpeg图像文件的库。

它是由Tom 和一个非正式的并没有加入JPEG的国际化标准组织协会的独立JPEG小组在1990年开发的,目前由几个开发者在开源社区中通过各种服务进行维护总结。

由于嵌入式系统资源和通信带宽的限制,压缩图像是非常有必要的。

在本文的嵌入式系统中,libjpeg能够修改成满足在ARM平台上的需求的具有高压缩率的并且仍然能够保持高清晰和高质量图像。

第一个解决方案是修改在libjpeg中的函数jpeg_set_quality (cinfo, quality,force_baseline)中有关压缩质量的值。

这个函数主要用于调整图像质量的比率。

然后理想的图片在不同的域中按不同的定义可以被获得。

Libjpeg库中与压缩图像有关的程序流程如下图4:图4 libjpeg中图像压缩流程3.3 FTP传输在基于TCP的网络中,文件传输协议(FTP)是一个标准的用于在一个主机到另一个主机之间进行文件传输的网络协议,比如英特网。

Ftplib是一个FTP协议的常规实现集。

他们允许应用程序创建和访问远程文件通过函数调用来实现,而不是需要调用fork和执行一个交互式的ftp客户端程序。

在这个IMES中,Ftplib是作为一个从嵌入式系统到监控终端的数据传送工具。

其中一些主要的函数见以下列表:3.4 web服务器随着网络的发展,Web应用程序已成为嵌入式设备管理和交互的主要趋势。

这个流行的结构称为B/S(浏览器/服务器)结构。

在这个结构中,用户接口通过www浏览器的工作来实现,和非常简单的逻辑浏览器实现,但是主要逻辑在服务器。

这大大简化了客户端计算机的负荷,减少了系统维护和升级的费用和工作量,也减少了用户整体的费用。

它是一次性到位的开发,能实现不同的人员从不同的地点,不同的访问模式(如局域网、广域网、互联网/内联网等)访问和操作共同的数据库;它能有效地保护数据平台和访问管理,同时也保护了数据库服务器的安全。

在这篇文章中,主要涉及boa服务器和CGI。

3.4.1 BoaBoa是一个单任务的HTTP服务器。

这意味着它不像传统的服务器那样为每个链接的客户创建一个任务,也就是说它不会将自己的资源复制供连接进来的客户端使用。

它内部对所用连接进来的HTTP采用多路复用的方式进行,仅仅只为运行CGI程序、目录的自动生成和文件的自解压等创建一个进程。

所以它最大程度的保护了系统,所以说它对嵌入式系统来说非常重要。

Boa服务器跟其他web服务器一样,能够完成接收请求、分析请求、相应请求和返回请求的结果等等任务。

Boa服务器的功能的实现是通过建立连接,绑定端口,拦截,处理请求。

其过程包括:(1)、完成web服务器的初始化工作。

比如创建一个环境变量,创建TCP套接字,绑定端口,开始获取连接和等待客户端连接请求等。

(2)、接收客户端请求,和在客户端请求连接后,保持连接请求的相关信息。

(3)、分析客户端请求,决定请求方式,URL目标,和形成信息等。

然后按照请求进行相应。

3.4.2 CGICGI(公共网关接口)是一个标准的web服务器软件。

其功能是按照web内容生成可执行文件。

这些文件被称为CGI脚本;他们是程序,通常是独立的应用程序,通常用脚本语言编写的。

它使网页更加生动,它被广泛用在搜索引擎和留言板。