基于ARM和Linux的嵌入式视频监控系统

时间:2022-07-24 08:30:05

基于ARM和Linux的嵌入式视频监控系统

摘要:介绍了一种网络视频监控系统的硬件和软件实现方法。嵌入式视频服务器的核心是S3C2410处理器。嵌入式视频采集软件是基于video for Linux开发的。实时JPEG视频流通过套接字连接从服务端传输到远程客户端。在实际应用中该系统具有可靠性高、实用性强的优点。

关键词:ARM,嵌入式系统,Linux,视频监控

中图分类号:TN919 文献标识码:A 文章编号:1009-3044(2016)01-0233-02

Embedded Video Monitoring System on ARM and Linux

BAI Wei-wei

(Henan University of Technology, Zhengzhou 450001, China)

Abstract: The hardware and software realization of a network video monitoring system was presented. The core of this embedded video server is a S3C2410 processor. And the embedded video capturing software was developed according to video for Linux specification. The real time JPEG video stream was then transmitted from the server to the remote PC client through a socket connection. Advantages of the system include high reliability and good real time performance.

Key words:ARM; embedded system; Linux; video monitoring

视频监控系统已经被广泛应用于各种领域,例如安全控制,环境保护,交通控制。传统的PC视频监控系统需要视频卡作为视频采集硬件。实时JPEG视频流通过套接字连接从服务器传输到远程PC客户端。由于视频卡的尺寸、价格和可靠性,利用其实现网络视频监控是困难的。为了解决此问题,本文将介绍网络视频监控系统的硬件和软件实现方法。嵌入式硬件平台的核心是S3C2410处理器。视频采集软件是基于video for Linux开发的。实时JPEG视频流通过以太网传输到远程控制点。与基于PC的系统或者其他嵌入式系统相比,该系统具有硬件和软件成本低、实时性能好的优点,可以网络化视频监控系统。

1硬件

图1 系统配置

如图1所示,USB摄像头采用了中星微ZC301P,通过视频压缩模块,可以将采集到的视频数据压缩。基于嵌入式视频服务器的ARM通过USB接口从usb摄像头中收集被压缩的JPEG代码流。该摄像机的帧速率可以在320*240分辨率下达到35fps。

图2 硬件电路示意图

硬件电路示意图如图2所示,嵌入式视频服务器的核心是S3C2410处理器,它是一个由Advanced RISC Machines设计的16/32位ARM920T RISC处理器。ARM920T实现了MMU,AMBA BUS和Harvard高速缓冲体系结构。这一结构具有独立的16KB指令和16KB数据高速缓存,每个都是由8字长的行构成。以太网接口(DM9000)具有内在的TCP/IP协议栈,用于完成数据传输。RS232接口(UART)被定义为标准输出,还可用于把视频数据直接传送到上位机上。S3C2410的内置USB主机控制器用于扩展USB接口。摄像机的JPEG码流通过USB接口进入MCU的缓冲区。

2软件

2.1摄像头驱动

USB摄像头运用了ZC301P COMS成像,它的成本低、性能高、USB接口协议灵活、能进行同步或异步传输、兼容性更好、有图像处理的应用函数和外置口[]。然而,Linux没有支持ZC301P的驱动程序。驱动程序补丁可以从http://mxhaard.free.fr/spca50x下载,根据下列步骤添加到内核:

①把驱动程序补丁拷贝到系统文件的目录下:/HHARM92410-R3/kernel/driver/usb.

②解压:tar zxvfusb-2.4.31LE06.patch.tai.gz

③打补丁:patchCp1< usb-2.4.31LE06.patch

④修改Makefile文件和Config.in文件

⑤重新编译(“make dep; make zImage; make modules”)获取驱动模块,包括(“spca5xx.o,spcadecoder.o,spca_core.o”)

⑥静态加载或动态加载驱动模块(“insmod spca5xx.o”)驱动摄像机

2.2嵌入式视频服务器

视频服务器软件是基于video for Linux和servfox( http://mxhaard.free.fr) 等开放源码设计的。建立一个应用程序和底层视频等驱动程序,调用接口就可以使用video for Linux的API。如图3:

图3 视频采集和传输流程图

①打开视频设备:

vd->fd = open ("/dev/video0",O_RDWR); /* vd->fd is the video file handle defined by struct v4l_device *vd */

②读取视频设备文件:

len = read(vd->fd, vd->pFramebuffer,

vd->mmapsize);/* reading the frame from the video device file and store it into buffer*/

③配置和转换视频图像:

jpegsize=convertframe(vd->ptFrame,vd->pFramebuffer,vd->hdrwidth,vd->hdrwidth,vd->hdrheight,vd->formatIn,vd->framesizeIn);

/* Set the the “brightness,contrast,size,format”of raw video data in vd->pFramebuffer and then convert it into vd->ptFrame buffer before transmit ;

vd->formatIn was set to be VIDEO_PALETTE_JPEG for zc301p camera */

④把帧缓存(视频显示图形)储存为JPEG图像文件:

fp=fopen(filename,"w");

if(!fp) return-1;

fwrite(vd->ptframe,jpegsize,1,fp);

fclose(fp);

⑤关闭设备文件

int v4l_close(v4l_device *vd);

3 结果

客户应用程序是基于spcaview的开放源程序, 在Linux Redhat9.0上运行。视频采集的分辨率为320*240。建立服务器和客户端之间的套接字连接,在实验室的视频采集结果如图4:

图4 在pc客户端进行视频采集

4结论

设计了一种网络视频监控系统,基于S3C2410处理器的嵌入式视频服务通过USB摄像头采集视频流。视频服务器和远程pc客户端的连接是通过LAN建立的。在320*240分辨率的视频播放中,服务器和pc客户端之间的播放延时少于2s,但是在640*480分辨率中,时延约为5.3s。通过在PC客户端应用计算机视觉算法,例如OpenCV,可以更进一步发展网络计算机视觉监控系统。

参考文献:

[1] 任克强,刘苏,谢斌.基于ARM11和Linux的网络视频监控系统[J].电视技术,2014,38(5).

[2] 高熊. 基于ARM11的嵌入式视频监控系统设计[D]武汉:华中科技大学,2012.

[3] 袁安富,夏生凤.基于ARM和Linux的DM9000网络接口设计及驱动实现[J].计算机工程与科学,2011,33(2):27-28.

[4] 张磊.智能视频监控系统中的关键技术研究与实现[D].长春:吉林大学,2012:44-46.

[5] 马资道,张正炳.基于ARM-Linux的网络视频监控终端的软件实现[J].计算机测量与控制,2011,19(2):456-458.

[6] 陈宗成,邓华秋.基于ARM11的嵌入式视频传输系统的实现[J].电视技术,2013,37(9):210-213.

[7] 王莉,周伟.基于ARM 的嵌入式Web 服务器设计[J].计算机工程与应用,2012,48(14):90-93.

[8] 杨水清,张剑.精通ARM嵌入式Linux系统开发[M].北京:电子工业出版社,2012.

[9] 任明伟.基于ARM的嵌入式视频采集与远程传输系统的设计与实现[D].2011.

[10] 李丽红.嵌入式 Linux 的 USB 驱动设计[J].太原理工大学,2011(19):201-205.

上一篇:奇哥谈PC Hi―Fi 下一篇:基于VC++_Access的平板平面度计量检定系统