基于开源软件MJPG_Streamer的智能视频监控系统设计
|
针对目前开发数字化的视频监控设备普遍成本较高、周期较长的特点,在ARM Linux嵌入式平台,应用开源免费软件MJPG_Streamer实现视频图像的采集以及通过TCP/IP网络协议传输到上位机进行远程显示。同时提出了一种结合三帧差分算法和背景减法的目标检测算法,实现智能控制。实验结果表明,该系统能够进行实时的、远程的监控,同时能够快速对入侵目标进行语音报警。 1 引言 近年来,随着计算机技术、光电技术、数字图像处理技术、嵌入式技术和网络通信技术的不断发展,高度集成的数字化、网络化、智能化的数字视频技术已经了取代传统的模拟视频监控技术。目前,世界各国对视频监控的需求与应用不断扩大,推动着全球视频监控市场迅速的发展。根据市场调查公司IMSResearch的预测,全球视频监控市场将从2008年的115亿美元增加至2015年的377亿美元,年复合增长率达到20.4%.在这一市场中,监控摄像头、服务器、编码器以及软件是视频监控系统的主角。 本文提出一种基于ARM Linux嵌入式平台的的智能视频监控系统,充分利用开源操作系统和开源免费软件MJPG_Streamer的特点,实现了在线实时监控。同时提出了一种目标检测算法,该算法在后台运行,实现了智能控制,能够对入侵目标进行语音报警。该监控适合针对一些特定场合的监控。 2 系统硬件平台 视频监控系统以S3C2440处理器为核心,外围器件有Flash、SDRAM、以太网卡DM9000、声卡UDA1341以及CMOS接口摄像头OV9650,在Linux环境下对摄像头采集到的原始图像帧进行处理以及压缩,通过网络协议传输到PC上位机进行显示。系统硬件平台结构如图1所示。
3 构建ARM Liunx嵌入式平台 在系统硬件平台上构建嵌入式Liunx系统,需要引导程序BootLoader和Linux源码,本系统需要移植bootloader源码,然后用Jtag接口将其烧写到Flash中,从Flash中启动,引导在PC机上交叉编译后的Linux镜像及根文件系统,之后启动Linux系统。 3.1 网卡和声卡驱动移植 由于在Linux内核中提供了以太网卡DM9000设备驱动功能层主要的数据结构和函数,所以在实际移植网络设备驱动程序时,要完成的工作就是根据实际以太网卡DM9000参数修改相应的内核代码。同样,在Linux内核源码中的标准音频编程模型已经包含一套完整的内核驱动程序模块,为各种各样的声卡提供了统一并且简单易用的编程接口,如open()、read()、ioctl(()等函数,所以在声卡UDA1341移植过程中对内核源码做简单修改即可。 3.2 语音播放功能的实现 完成了声卡驱动移植后,为了方便对音频文件的播放,停止等操作进行控制,还需要移植专业的高精度解码器Madplay.Madplay是一个根据MAD算法写的MP3播放器,解码效果相当出色,而且支持命令行,特别适合于在嵌入式系统使用。移植过程中分别编译zlib库、libid3tag库和libmad库,最后编译madplay源码并且把编译出来的madplay下载到系统中即可,之后就可以对录制好的音频文件进行播放。 嵌入式平台构建完成后,先后用命令ifcongfig和madplay进行网卡和语音模块测试,从图2可以看出Linux系统启动成功,网卡和声卡驱动配置成功了,并且可以使用Madplay播放器播放录制的音频文件。
4 MJPG_Streamer功能的实现 MJPG_Streamer是一款免费的视频流服务器软件,采用的是V4L2视频设备开发框架,它能够将从摄像头采集到的图像以JPEG格式通过TCP/IP网络协议传输到上位机进行显示。 4.1 MJPG_Streamer移植 在MJPG_Streamer源码目录中,把所有Makefile文件的CC=gcc改为CC=arm-linux-gcc,然后进行编译,生成的主要组件及功能如下: input_uvc.so组件:主要完成了摄像头图像的抓取,同时将原始YUV 格式图像转换和压缩为JPEG格式图像。 input_control.so组件:主要完成对支持调整方向摄像头的转动方向的控制。例如云台控制器,云台控制是为了实现多角度监控的功能。 output_http.so组件:这是一个功能完整的WEB服务器,它将压缩后的JPEG 图像以HTTP视频数据服务流形式输出。 |








