基于ARM9 的嵌入式监控系统设计*
2021-02-04李来文陈希明刘泽源裴永旭黄楚俊
李来文,陈希明,刘泽源,周 昕,裴永旭,黄楚俊
(哈尔滨理工大学 计算机科学与技术学院,黑龙江 哈尔滨 150080)
1 概述
本系统采用iTop4412 开发板作为开发平台,借助Linux 操作系统来实现软件上的需求,通过网线连接路由器,然后在嵌入式系统上搭建Boa Web(Boa Webserver)服务器,通过移植MJPG-streamer 软件采集摄像头数据。用户只需要通过电脑端浏览器或者手机端App 即可查看实时监控画面。
在iTop4412 上运行定制的Linux 系统,开发板搭载UVC 摄像头的基础上,将 Mjpeg-streamer、Boa Web 移植到开发板,根据开发板IP 地址,编写html 文件、App,最终实现在电脑端和手机App 上随时查看监控画面的功能。
系统整体方案设计如图1 所示。
图1 系统整体方案
2 系统设计主要任务
本系统主要利用iTop4412 开发板搭建远程监控系统。设计任务分为适配硬件、移植软件、网页设计、制作App 四个部分。
2.1 适配硬件
本系统应用USB2.0 的UVC 摄像头,通过定制内核,确保摄像头在开发板上正常运行。
2.2 软件移植
本系统的软件部分主要包括Linux 操作系统内核的定制,根据需求来添加或者移除相应的驱动。还包括移植Boa Web 服务器及移植MJPG-streamer 视频流服务器。
2.3 网页设计
搭建轻量级的Web 服务器Boa Web,通过IP 地址访问服务器时,需要登陆首页。本监控系统,首页直接显示监控画面、报警器操控按钮即可。
2.4 移动端 App 设计
本远程监控系统除了提供电脑端浏览器访问之外,还支持手机端浏览器及App 访问方式。手机端浏览器访问与电脑端相同,只需要设计App 即可。打开App 后,点击开始按钮,即可在App 中看到监控画面;点击返回按钮,即可停止监控,回到输入IP 地址和端口的界面。更改IP 地址或端口后,可继续查看其他摄像头的监控画面。
通过Android Studio 进行Android 开发,最终在Android 10 真机上测试,确保App 能够正常使用。
3 系统可行性分析
3.1 开发平台选择
为确保USB 摄像头能获取清晰度较高的视频采集结果,同时保证嵌入式视频监控系统的性能更加稳定,必须采用性能较高的处理器作为开发平台。
本系统主芯片采用Exynos-4412,该CPU 功能强大,性能卓越,适用于要求系统具有高稳定性、高可靠性,以及高效处理和响应的场合。对于嵌入式视频监控系统而言,为用户提供满意效果,保证系统的稳定性和可靠性是前提。对该课题而言,基于Exynos-4412 的芯片是合理选择,既满足了设计上的要求,同时兼顾价格的考虑。
3.2 USB 摄像头
USB 摄像头即插即用,无需独立电源,绝大多数平台都支持。与传统监控摄像头相比,成本更低,而且品牌、性能众多,使用者可根据实际需求与资金情况,购买合适的USB 摄像头产品使用。同时Linux 内核中有V4L2 摄像设备的驱动支持,兼容USB 摄像头。即只要将V4L2 驱动加入到内核,在开发板上插入USB 摄像头后,开发板即能正常识别设备,USB 摄像头正常运行。
鉴于上述特点,本系统选用USB 摄像头作为视频采集设备。
3.3 软件方案
本设计的重点,主要是软件部分的编写。软件主要从以下几个方面进行设计。首先是选用什么样的操作系统作为开发环境,由于Linux 开源、功能丰富、强大的网络功能等特点,因此选择Linux 作为本课题的系统。然后在Linux 操作系统上搭建 Boa Web 服务器、MJPG-streamer,通过服务器将数据传输出去,在手机或者电脑上访问相应网页或手机APP,就可以实时查看摄像头捕捉到的视频画面。
对于服务器传输的视频流数据,在电脑端可以利用浏览器直接访问IP 地址和端口,所以电脑端不需要编写代码。
对于手机端提供两种方法查看监控。第一种方式是直接通过浏览器访问IP 地址和端口号;第二种就是通过App 直接查看监控画面。
4 系统具体实现
4.1 移植MJPG-streamer
MJPG-streamer 是一款免费的基于IP 地址的视频流服务器,它的输入插件从摄像头读取视频数据,并将视频数据复制到内存中,有多个输出插件可将这些视频数据进行处理,其中最重要的输出插件是网站服务器插件,它将视频数据传送到用户浏览器中,MJPG-streamer 的工作就是将其中的一个输入插件和多个输出插件绑定在一起,所有的工作都是通过它的各个插件完成的。
Mjpeg-Streamer 的移植需要jpeg 库,所以必须首先移植jpeg 库,在网上下载jpeg 源码jpegsrc.v8b.tar.gz,拷贝到Ubuntu 目录下。终端进入刚解压出来的目录执行:
./configure --host=arm-none-linux-gnueabi --prefix=/home/user/out_jpeg 命令配置编译器与安装目录。执行make 命令编译,执行make install 命令将其安装至指定目录。
下载mjpg-streamer-r63.tar.gz,并解压到Ubuntu 的一个目录下。修改源码顶层目录下的Makefile 文件,指定gcc 编译器,指定动态库。
修改plugins/input_uvc/makefile 文件,进行如图2 所示的修改。
修改plugins/output_http/Makefile,进行如图3 所示的修改。
图 2 input_uvc 修改
图 3 output_http 修改
图4 修改start 文件
图5 App 程序流程图
配置完成后make,之后将运行程序需要的依赖库和可执行程序拷贝到开发板目录下。
在开发板的根目录下创建camera 目录,将input_uvc.so、libjpeg.so.8、mjpg_streamer、output_http.so、start.sh 以及文件夹www,拷贝到开发板的camera 目录下。其中,input_uvc.so、libjpeg.so.8、output_http.so 是程序运行所需要的依赖库,start.sh 是执行程序的 shell 脚本,mipg_streamer 是可执行程序。
将USB 摄像头插入开发板,超级终端查看设备号,之后对start.sh 文件修改,指定摄像头设备号,如图4 所示。
4.2 移植 Boa Web 服务器
Boa Web 服务器是专门为嵌入式平台开发的轻量级Web 服务器。本设计使用Boa Web 服务器的原因是当用户通过电脑或手机访问服务器时,可以直接通过IP 地址查看实时监控。
官网下载BOA 源码“boa-0.94.13.tar.gz”解压到Ubuntu 指定目录下。
解压后会有名字为boa-0.94.13 的文件夹。进入这个文件夹下的src 文件夹里,运行./configure 生成Makefile编译文件。
打开刚生成的Makefile 文件,修改其中两个参数,指定 gcc 编译器为:arm-none-linux-gnueabi-gcc。
打开compat.h 文件,在第123 行代码左右找到#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 一行,改为 #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff。
保存后退出,接着make 编译,对生成的boa 文件使用命令arm-none-linux-gnueabi-strip boa,进行瘦身。
接下来将boa 文件拷贝到开发板的bin 目录下;在开发板的etc 目录下新建boa 文件夹,在根目录下新建www 文件夹,在www文件夹内新建cgi-bin 文件夹;将boa.conf 拷贝到开发板的etc/boa目录下;接着将Ubuntu 的etc 目录下的mime.types 拷贝到开发板的etc 目录下。进入到开发板/etc/boa/,打开 boa.conf,进行如下修改。
(1)首先将该文件第49 行左右的 Group nogroup 修改为Group root。
(2)其次将该文件第96 行左右的#ServerName www.your.org.here 修改为 ServerName www.your.org.here。
(3)第三将该文件第115 行左右的 DocumentRoot /var/www 修改为 DocumentRoot /www 这里的“/www”就是前面步骤使用mkdir 创建的www 目录。
(4)最后将该文件第194 行左右的 ScriptA1ias /cgi-bin//usr/1ib/cgi-bin/修改为 ScriptAlias /cgi-bin/ /www/cgi-bin/。
保存后退出。接着运行boa 程序,再运行刚才的start.sh 文件,在电脑浏览器直接输入开发板IP 地址即可查看监控画面。
4.3 安卓 App 设计
安卓App 使用Android Studio 开发,依据系统需要,编写程序,在真机上进行功能测试,最终完成整个App的开发。整个程序流程如图5 所示。
5 结束语
本文结合嵌入式技术以及监控系统技术,从实际应用出发,提出了一种基于 ARM9 的嵌入式 Web 视频监控系统的设计方案,完成了系统的具体实现,有一定的实用价值。