您的位置首页>企业动态>

基于嵌入式Linux平台构建视频监控系统的设计过程详解

导读大家好,我是极客范的本期栏目编辑小友,现在为大家讲解基于嵌入式Linux平台构建视频监控系统的设计过程详解问题。目前,嵌入式系统广泛应

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解基于嵌入式Linux平台构建视频监控系统的设计过程详解问题。

目前,嵌入式系统广泛应用于视频监控。随着网络功能的强大,视频监控更加注重网络监控方案,要求体积小、距离远、成本低、功耗低、操作界面人性化等。该系统基于嵌入式Linux平台,利用USB摄像头采集视频图像,通过视频图像压缩和网络传输视频图像,使得远程监控成为可能。

1系统概述

视频监控系统由视频图像采集、视频图像处理、视频图像传输和视频图像显示四部分组成。视频采集部分由数码相机、USB通道和嵌入式处理器组成。视频图像处理主要是视频图像压缩,通过算法实现。视频图像传输主要由视频服务器实现。视频图像显示主要通过在远程主机上浏览、保存和处理视频图像来实现。它是由Linux主机上的应用程序和Windows主机上的浏览器上的JAVA程序实现的。系统原理框图如图1所示。

2系统硬件

CPU采用三星S3C2440A,主频400 MHz,最大频率533 MHz。64 M SDRAM,32位数据总线,SDRAM时钟频率100 MHz256 M/1 GB Nand Flash,掉电非易失性,2 M NorFlash,掉电非易失性;宝3.5真彩LCD,屏幕集成4线电阻式触摸屏,屏幕分辨率可达1024768像素;100 M以太网RJ-45接口(采用DM9000网络芯片)、串口、USB Host、USB从类型B接口、SD卡存储接口、立体声音频输出接口、麦克风接口、JTAG接口、4个USER Leds、6个USER buttONs(带插座)、I2C总线AT24C08芯片和20针摄像头接口;相机采用田亮,兼容SN9C20X系列芯片的驱动,驱动集成在本系统的内核中。

3系统软件

3.1 Linux内核移植

移植新内核的主要目的是给LCD和摄像头增加相应的驱动支持。在Fedora 9中打开内核目录,使用默认配置文件进行配置:给内核添加V4L支持,添加通用USB摄像头驱动GSPCA。

3.2基于V4L2的图像采集程序

系统中使用的交叉编译工具是arm-linux-gcc-4.3.2。设计中使用的所有应用程序都必须由该编译器编译并下载到开发板才能运行。交叉编译编译后的应用程序V4L2.c,下载到板卡上。

V4L(Video for Linux)是Linux提供的一个音视频接口规范,所有的音视频驱动都应该使用这些接口。

V4L开始出现在2.4.1.x的内核版本中为Linux2设计的Video(简称V4L2)是V4L的改进版本,在第一代中修复了一些bug。

设计的图像采集处理程序主要基于V4L2架构,通过调用一些ioctl函数,可以实现视频设备的开放、图像采集处理、图像显示等。几个主要ioctl功能简介:

1)ioctl(fd,VIDIOC_S_FMT,FMT):用于设置图像格式。

2)ioctl(fd,VIDIOC_REQBUFS,req):向内存申请缓冲区,申请的缓冲区数量在计数中。

3)ioctl(fd,VIDIOC_QUERYBUF,BUF):查询已经分配的V4L2的视频缓冲区,包括视频缓冲区的使用状态、内核空间中的偏移地址、缓冲区长度等。

4)ioctl(fd,VIDIOC_QBUF,BUF):将一个空的视频缓冲区放入视频缓冲区输入队列。成功执行该功能后,指示的视频缓冲区进入视频输入队列。当视频设备开始拍摄图像时,相应的视频数据被保存到视频输入队列的相应视频缓冲区中。

5)ioctl(fd,VIDIOC_STREAMON,type):启动视频捕获命令。应用程序调用VIDIOC_STREAMON启动视频采集命令后,视频设备驱动程序开始采集视频数据,并将采集到的视频数据保存为视频驱动的视频。

缓冲区中。

图像采集处理流程图如图2 所示。

3.3 网络服务器

系统采用Boa 服务器。Boa 是一种非常小巧的Web 服务器, 其可执行代码只有大约60 kB 左右。作为一种单任务Web 服务器,Boa 只能依次完成用户的请求,Boa 支持CGI,能够为CGI 程序fork 出一个进程来执行。板上移植该服务器,Boa 服务器默认开机自动运行,配置conf 文件。

服务器端应用程序使用servfox, servfox-R1_1_3 解压修改Makefile 文件:CC=arm-linux-gcc,编译后得到可执行文件servfox,下载到板上,输入命令chmod +x servfox 为它添加可执行属性。

客户端程序使用spcawiew, 该程序用于在Linux 主机上对服务器进行监控,无需移植。在Linux 上编译spcaview.由于此软件包依赖与libsdl,所以在安装spcaview 之前,需要安装SDL-1.2.13. 安装spcaview 软件后,在源文件目录上有3 个可执行文件,spcacat :简单图片的抓取工具,不能用于网络监视客户端,Spcaserv:流媒体服务器,Spcaview: 用来纪录数据流,也能用来播放数据,也能作为网络监视客户端用。

4 监控过程

4.1 在Linux 操作系统上的监控

正常启动运行开发板,运行服务器端程序servfox: servfox-d /dev/video0-s 320x240-w 7070。

在Linux 上运行: 。/spcaview-g-s 320x240-w 10.1.91.230:7070

其中10.1.91.230 是服务器的IP 地址,这样就可以在PC机上看见USB 摄像头采集进来的数据了。

系统是装在虚拟机中的fedora 9 linux 系统,可以流畅地观察到摄像头监控区域的情况。

4.2 Windows 操作系统上的监控

对于网络监控的客户端,能够跨平台的工具目前只有浏览器,通过浏览器来监控,无论是Linux、Windows、MacOS 或者其他的UNIX 系统,只要有图形界面的浏览器,在桌面环境下都可以对远程的摄像头所“控制”的范围进行监控。

Mini2440 上已经有Boa 服务器可供使用,Spcaview 中的http-java-applet 文件夹中已经包含了一个可以监控使用的web 页面,将该文件夹复制到Boa 服务器的主文件夹/www 下。

由于http-java-applet 文件夹内含的WEB 主页面(Index.html)包含了JAVA 控件,所以先在主机上安装JAVA 环境,让浏览器支持JAVA 插件。

安装好JRE 后, 在浏览器的地址栏上输入服务器地址,即可实现远程监控。

4.3 远程抓拍

通过web 表单提交CGI 来运行应用程序。

通用网关接口(CGI)规范允许Web 服务器执行其他的程序并将它们的输出储存在发送给Web 浏览器的文本、图形和音频中。服务器与CGI 程序的结合能够扩充World WideWeb 的能力。

CGI 程序可以由C、Perl 或者UNIX Shell 脚本等流行编程语言编写。

在本设计中,网页上的按钮shoot the picture 提交了一个名为V4L 的CGI 文件v4l.cgi,该文件是用shell 脚本编写的,用于在板上运行已编译好的图像采集程序并对抓拍的图片返回到新打开的网页中进行查看。

Shell 脚本(v4l.cgi)内容如下:

#! /bin/sh

/www/http-java-applet/v4l2

echo “Content-type: text/html; charset=gb2312”

echo

echo “……”

echo “

”《 》《 src=“”1.jpg“”》

exit 0

5 结束语

系统采用开源的Linux 系统,降低了开发成本,可以任意裁剪和制定内核,方便移植。与传统PC 机的监控系统相比,本系统具有体积小、成本低、可靠性强等优势。本系统还具有一定的扩展性,可以增加适当的功能扩展来满足用户更高的要求, 如在图像采集端加入设置入侵检测或者报警等控制功能。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。