基于Linux嵌入式网络摄像机的设计
【摘要】本系统开发了一款基于Linux嵌入式网络摄像机的无线视频监控系统。采用C/S(客户端/服务器)架构方案,以S3C2440A微处理器为核心的硬件平台,构建Linux操作系统,利用USB二合一数字摄像头和嵌入式Linux下提供的V4L2 API接口进行视频数据采集,把采集的视频图像数据通过MJPEG软件算法压缩后,再把视频数据通过内部总线送到mjpg-streamer视频服务器里面,通过TCP/IP网络协议,在ARM服务器上构建wifi AP功能无线局域网来实现把视频数据通过无线wifi传输到客户端,最后通过linux和安卓的关系PC机上的QT客户端来实现把压缩后视频数据解码、显示、录制、回放视频,同时在手机安卓客户端那边实现实时远程监控、抓拍、保存图片。测试的结果表明,本视频监控界面非常的流畅、实时性高、没有卡顿的现象、图像的质量较好。
【关键词】ARM;V4L2;mjpg-streamer;TCP/IP;WIFI;QT
近年来,计算机网络、图像处理、视频图像压缩技术的不断进步,视频系统已经越来越广泛应用于政府、军队、学校、银行和家庭等场合,并呈现多样化的发展趋势,并且同时具有数字化、网络化、实时性强等特性[1]。在监控领域中,嵌入式网络视频监控以小巧、携带方便、低
成本和高性能等特点占据优势。本文利用的是Intenet网络技术、视频数据处理技术来设计基于Linux嵌入式网络摄像机无线监控系统,实现了一个独立嵌入式智能终端设备与后台PC机上的QT客户端(或手机安卓客户端)采用无线WiFi进行视频数据的传输;前台作为视频服务器,进行视频数据采集,把采集到的视频数据通过MJPEG软件算法压缩后,再把压缩后的视频数据通过内部总线送到mjpg-streamer视频服务器里面,并通过TCP/IP协议的Intenet网络无线wifi AP功能,把服务器压缩后的视频数据发送给pc机上的QT客户端进行数据解码、显示和录制视频。
1.Linux网络摄像机系统框图和原理
Linux网络摄像机系统结构图如图1所示:
图1 基于Linux网络摄像机系统结构图
Linux网络摄像机的原理:本系统硬件部分主要由S3C2440A微处理器、二合一USB数字摄像头、USB 无线WiFi网卡构成的。三星公司的S3C2440A芯片是16/32位的RISC 嵌入式微处理器,内核为ARM920T的主控芯片,常用时钟频率是400MHz,最大时钟频率为533MHz,对
Linux 操作系统有很强的支持性, 有很强大的计算处理能力, 能够更好地实现视频图像数据的编解码[2];摄像头采用的是USB二合一的数字摄像头,主要是由OV7740CMOS图像感光的芯片、DSP数字信号处理芯片、USB设备控制接口这三个模块组成的,通过它可以把采集到视频图像数据传输到DSP数字信号处理芯片中进行加工处理,把它们压缩成MJPEG格式视频流数据,最后通过usb接口送到已经构建好的Linux操作系统、嵌入式mjpg-streamer视频服务功能S3C2440A微处理器中进行处理;然后在ARM服务器上构建一个无线WIFI AP功能的网络,将USB无线wifi网卡插入到开发板的USB接口上,启动AP网络功能,建立无线局域网,运行服务器端的mjpg-streamer应用程序,把采集压缩后的视频数据通过wifi网络使用基于TCP/IP 协议的socket 发送视频数据传输到远程的PC机人机界面终端上Qt客户端和手机安卓客户端,实现对采集压缩后视频数据进行传输、保存、回放、抓拍图片、实时监控。
2.Linux网络摄像机系统设计与实现
2.1 嵌入式Linux 操作系统的构建
主要内容包括uboot的移植、Linux 3.4.2 内核的移植以及根文件系统的制作。
(1)uboot的移植
Bootloader目的是正确引导操作系统,通过里面的一段小程序,可以把板子硬件初始化和建立一个内存空间映射,从而把整个软硬件系统带到合适的环境中,为最后引导和加载内核做准备[3]。
uboot 的目的就是为了启动内核,目前新版本的uboot能够支持多种系统架构的CPU,支持的开发板也越来越多,为了能使uboot更好的支持ARM9硬件平台上,还要进行如下两方面的工作:
① 增加下载功能,通过网络端口、串行端口或USB端口下载文件到内存中。
② 新版本的u-boot对flash芯片的读写支持比较完善,移植时主要增加的内容是对nandflash芯片的读写功能。
(2)Linux内核的制作
① 进入Linux-3.4.2源码目录,修改里面中的Makefile、内核的机器码及分区信息等等。
② 使用make menuconfig命令来定制Linux内核常用的功能并且配置它们。
③ 使用make uImage来编译内核,并生成一个压缩的uImage内核映象文件。
④ 通过nfs把新的内核映象文件下载到ARM开发板里面。
(3)根文件系统的制作
利用busybox源码包来制作根文件系统,制作的步骤如下:
① 修改busybox目录里面的Makefile文件,使用make menuconfig配置所需要的功能。
② 使用make编译BusyBox里面的功能,然后使用命令make install安装到相应根文件系统目录下。
③ 在根文件系统下构建其他目录,把编译出来的库文件拷贝到相应的目录下,并创建Linux系统启动常用的脚本文件。
④ 用nfs网络来挂载构建的跟文件系统,让开发板通过网络nfs从这个最小的文件系统启动。
2.2 USB摄像头驱动的修改和配置本系统采用的是USB二合一数字摄像头,驱动是简单修改L
inux内核自带的uvc_video视频驱动源码,把修改过视频驱动编译进内核,配置内核让内核支持UVC摄像头驱动和USB总线驱动,然后就可以通过V4L2应用程序接口来采集视频图像数据,把摄像头给用起来。
2.3 USB无线网卡源码包修改、驱动加载及wifi AP功能启动
本次系统使用的USB无线wifi网卡是RT3070,先从网络上下载驱动源码包2010_0203_RT3070_SoftAP_v2.4.0.1_DPA.bz2,解压驱动源码包,修改里面所有的Makefile和config.mk文件往里面增加自己的配置、内核路径以及交叉编译工具,配置编译内核支持无线wifi网络功能,重新编译刚刚修改过的驱动源码包,把生成的驱动模块拷贝到根文件系统相应的目录下并且加载它,并编写wifi加密应用程序,最后启动无线wifi网络的AP功能。
2.4 视频数据的采集
在linux系统中采用V4L2来表示视频设备接口,可以通过它来实现操作摄像头,就能实现采集远程图片、视频、音频等数据。尤其是在远程监控、3G电话、网络视频监控系统和嵌入式网
络多媒体终端中都有广泛的应用[4]。主要使用内存映射方式来对视频数据进行采集,采集视频流程图如图2所示。
图 2 视频数据采集流程图
2.5 格式转换及压缩的实现
通过V4L2采集到的视频数据是YUV的格式,并不能直接通过网络发送给客户端显示,需要通过compress_yuyv_to_jpeg函数进行图像格式、文件格式等转换后才能通过网络传送给客户端显示,为了提高网络的传输效率、减少码流通常还需要采用MJPEG软件算法视频图像压缩,这样做的好处是让QT客户端和安卓客户端能够同时观看到更加流畅的视频画面。
2.6 网络视频服务器与视频传输的实现
要实现把压缩后的视频数据通过网络传输,先采用C/S(Client/Server)方案,在ARM开发板上构建Mjpeg-streamer视频服务器,在PC机终端上编写QT客户端和手机安卓客户端,mjpg-streamer视频服务器的主函数处理流程如图3所示。
图3 主函数处理流程
图4 服务器与客户端网络通信图
然后把压缩后的视频数据通过前面构建802.11b标准usb无线wifi信号,来进行视频数据的传输,使用网络协议是TCP/ IP 协议,为了能通过网络在不同的平台上实现不用进程之间的进行通信,本次使用Socket套接字编程接口来实现ARM服务器跟客户端网络进行相互通信的,网络通信的流程图如图4所示。
2.7 QT客户端和手机安卓客户端功能实现
从ARM视频服务器那边通过wifi信号接收的视频图像是压缩的MJPEG 格式,QT客户端要采用xvid_decore(dec_handle,XVID_DEC_DECODE,&xvid_dec_frame,vid_dec_stats)函数来实现把接收到的视频数据解码还原为YUV格式,然后通过cvWriteFrame(videowr,img)函数来实现把实时监控的画面录制成为AVI视频格式,以实现回放实时监控画面。而手机Android客户端可以实现远程实时监控、抓拍视频数据图像、保存视频图像,QT客户端[5]接收网络视频结构框图如图5所示:
图5 QT客户端接收网络视频框图
录制视频的整体程序流程图如图6所示。
3.结语
本设计主要介绍了如何采用C/S模式的方案,利用Linux + ARM+ WiFi + QT技术来实现嵌入式网络摄像机无线监控,实现对采集视频数据的进行网络传输、保存、回放、抓拍图片、实时监控。经测试,系统能够很稳定的运行,可以以15帧每秒(最快可达到25帧每秒)速度来采集图像,图像的分辨率为320 * 240,基本上很流畅的达到普通视频监控的效果,实现了一个小巧、方便携带、低成本、高性能的网络摄像机,来达到无线视频监控效果。
图6 总体程序流程图
参考文献:
[1] 西刹子.智能网络视频监控技术详解与实践[M].北京:清华大学出版社,2010.
[2] 杨天怡,刘宇.一种嵌入式Linux 环境下图像压缩及传输的实现[J].计算机科学,2006,33 (4): 228—229.
[3] 张小全.嵌入式Linux系统开发技术详解—基于ARM [M].北京:人民邮电出版社,2007.
[4] 刘富强,卢赤班.数字视频监控系统及其应用[J].工矿自动化,2003.
[5] 韩少云.嵌入式Linux的Qt图形程序实战开发[M].北京:北京航空航天大学出版社,2014.
注:
河池学院青年课题,编号2010A-N002。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论