基于Android和Raspberry Pi的远距离视频监控系统的设计
2017-04-14刘智旸马娅婕余湧
刘智旸+马娅婕 余湧
摘 要: 为了实现视频监控的移动性和远程操控,结合无线网络、Java语言和Eclipse开发编译工具,提出一种使用Android和Raspberry Pi组合,实现远程实时视频监控的新思路。摄像头获取图像数据,通过Raspberry Pi处理后以视频流的形式上传到图像服务器,以Android智能手机作为移动控制终端,通过WiFi访问图像服务器,获取图像数据并在控制界面进行显示,用户通过视频信息对移动机器人进行远程控制,达到远程实时监控的效果。通过实验测试,该系统可以有效地进行远程视频监控,具有良好的可用性。
关键词: 远程视频监控; Android; Raspberry Pi; 图像服务器; 移动机器人;实时监控
中图分类号: TN948.4?34 文献标识码: A 文章编号: 1004?373X(2017)07?0012?04
Design of remote video surveillance system based on Android and Raspberry Pi
LIU Zhiyang, MA Yajie, YU Yong
(School of Information Science and Engineering, Wuhan University of Science and Technology, Wuhan 430081, China)
Abstract: In order to implement the mobility and remote control of the video surveillance, a new thought of the real?time video surveillance implemented based on the Android and Raspberry Pi is proposed in combination with the wireless network, Java language and Eclipse tool. The image data is acquired with the camera, which is processed with the Raspberry Pi to upload it to the image server with the video streaming. The Android smart phone is used as the mobile control terminal, which can access the image server via WiFi to acquire the image data and display it on the control interface. The user can control the mobile robot remotely with the video information to realize the remote real?time monitoring effect. The system was performed with experimental test. The results show that the system can monitor the remote video effectively, and has high availability.
Keywords: remote video surveillance; Android; Raspberry Pi; image server; mobile robot; real?time monitoring
0 引 言
传统的视频监控系统大部分采用PC机作为控制终端,在使用过程中受到工作环境和网络环境等其他因素的影响,极大地限制了监控者控制的灵活性。并且随着监控需求的不断改变和发展,视频传输的实时性、监控设备的移动性等一些实际需求也越来越高。
由于Android系统的开放使得Android软件的开发变得更加容易,并且基于Android移动设备使用的普遍性和灵活性,结合Raspberry Pi强大的图像处理能力和体积小的特点,本文提出了基于Android和Raspberry Pi的远距离实时视频监控系统的设计方案。
在系統中使用搭载Web摄像头的移动机器人进行视频采集,移动机器人使图像采集更加灵活、采集范围更广;为了方便图像数据的传输,减少控制终端图像数据下载压力,使用图像服务器缓存图像数据;为了保障视频流畅度,使用SurfaceView控件播放视频,独特的锁定销毁机制减少播放过程中黑屏或者花屏现象的发生。
1 系统整体框架和功能需求分析
系统由移动机器人终端、图像服务器和移动控制终端三部分组成,其中移动机器人终端是搭载了Raspberry Pi开发板和车载Web摄像头的移动小车,移动控制终端以Android智能手机作为控制平台,两者通过WiFi无线网络连接图像服务器并进行数据通信,系统整体设计图如图1所示。
在整个系统的运行过程中,图像服务器作为两个终端视频数据传输的中介,起到图像数据缓存的作用。
移动机器人终端的主要功能有两个:
(1) 通过USB无线网卡连接到无线网络,接收和执行控制终端发送的控制指令。
(2) 车载Web摄像头实时获取图像数据并进行压缩编码,通过无线网络上传到图像服务器,完成视频数据的传输。
Android控制终端的主要功能有两个:
(1) 通过无线网络访问图像服务器,获取上传的视频图像数据,将图像数据解码后在控制界面中进行视频显示。
(2) 通过无线网络与移动小车取得连接,在控制界面中通过图像信息实现对移动小车的远程控制。
2 图像服务器
在系统中,使用MJPG?Streamer图像软件提供的图像服务器进行视频图像数据的缓存。MJPG?Streamer是一款开源的轻量级视频服务器软件[1]。该软件可应用在基于IP协议的网络中,将Web摄像头获取到的图像数据以视频流的形式上传到图像服务器中进行缓存。
图像服务器在整个系统运行过程中扮演着机器人终端和控制终端视频传输的中介。控制终端在获取视频数据时,不需要等到整个视频下载完成,通过无线网络访问图像服务器,下载实时图像數据即可。
图像服务器的使用保证了图像数据的完整性和传输的稳定性,同时也方便对视频数据进行存储、删除等其他操作。并且系统利用MJPG?Streamer调用Web摄像头的硬件压缩功能,降低服务器的载荷,使整个系统具备节约资源、减少内存占用、运行速度快的优点[2]。
3 移动机器人终端的设计
机器人终端是以二轮驱动的小车作为移动平台,采用Raspberry Pi + Arduino作为主控制器,分别实现不同的控制功能。其中Raspberry Pi是一款基于Linux系统、只有一张信用卡大小的卡片式计算机,具有强大的视频、图像、音频处理能力,且具有体积小、价格低廉、功能强大的特点[3],特别适合作为小型移动设备的多媒体信息处理及传输平台。Arduino控制平台是一块基于开放源代码的USB接口板,简单易用,程序的烧写和修改变得更加容易[4],并且可以方便地与现有的电子元器件进行连接以实现控制和交互功能,在本系统中可以作为移动机器人的电机和舵机的控制平台。
移动机器人终端的结构图如图2所示。在机器人终端通过Arduino平台接收并判断手机发送的控制指令,实现对小车电机运转和舵机转动的控制;Raspberry Pi控制Web摄像头进行图像摄取,然后通过无线网卡上传到图像服务器。
由此可见,机器人终端主要完成两个工作:控制指令的判别和执行;摄像头获取到的实时图像数据的处理和上传。
3.1 控制指令判别和执行
手机发出的控制指令通过无线网络和socket通信接口发送给Raspberry Pi,Raspberry Pi将控制指令通过USB数据线传送给Arduino,在Arduino中对指令进行判别和执行:通过控制两个电机的运行状态来控制移动机器人的行动状态;Arduino控制板通过输出不同脉宽的信号进行舵机转动角度控制[5]。将摄像头固定在舵机上,舵机的旋转带动摄像头的旋转,扩大了摄像头的视角,增加可视范围。
3.2 视频处理和上传
移动机器人使用Web摄像头,通过UVC协议免驱动安装与Raspberry Pi进行连接。因为Web摄像头中包含MJPEG编码器,采用JPEG图像压缩技术实现视频数据的压缩处理[6]。然后将每一帧图像数据传送给Raspberry Pi,通过Raspberry Pi的MJPG?Streamer图像开发软件将图像数据以视频流的形式通过无线网络传送到图像服务器中。作为控制终端的手机可以访问图像服务器下载每一帧图像数据,然后进行相应的解码和显示操作。
3.3 图像质量保证
为了减少视频数据传输时占用的带宽,使图像传输更加流畅,采用减小图像分辨率和图像传输帧率的方法。
(1) 图像分辨率的选取:分辨率是指单位长度中的像素数目。在调试过程中对常用分辨率下每帧图像的效果和大小进行记录和比对,如表1所示。
为了兼顾图像的质量和图像数据的大小,最后选择320×240作为图像分辨率。
表1 不同分辨率图片大小和效果
[分辨率 图片大小 图片效果 160×120 6 KB左右 模糊 320×240 10 KB左右 清晰 600×400 14 KB左右 清晰 640×480 16 KB左右 清晰 ]
(2) 图像传输帧率:帧率是指单位时间内显示的图片数量,单位为f/s。系统选用的Web摄像头支持的帧率为1~30 f/s,根据人眼的视觉暂留效应,当传输的图像为24帧以上时会认为画面是连续的,为了基本满足人眼的观看效果,并且保证视频图像显示的流畅度和视频播放的稳定性,选用20~24 f/s作为测试帧率。
4 移动控制终端的设计
系统以Android智能手机作为控制终端,Eclipse作为应用软件开发平台,设计一款APP应用,实现对机器人的远程控制以及视频显示。
在功能实现上将视频显示和远程控制分别放在两个线程中运行,避免线程阻塞,减少系统资源的损耗。控制终端的工作流程图如图3所示。
移动控制终端的设计主要包括三个部分:UI控制界面,移动机器人的远程控制以及视频的显示。
4.1 UI控制界面
UI控制界面是通过调用Android的SDK编写控制端的可视化界面[7]。在控制界面中,连接Button按钮完成与移动机器人终端的远程连接,前后左右Button按钮完成对移动机器人的行进控制,摄像头旋转Button按钮完成对摄像头的转动控制,SurfaceView控件进行视频图像的显示。
当机器人终端正常工作后,用户点击APP进入到控制界面,实时采集的图像信息会通过SurfaceView控件显示在屏幕上,远程连接移动机器人后,用户通过图像信息对移动机器人进行远程控制。
4.2 远程控制
控制界面提供给用户不同的控制按钮,通过点击不同的Button对移动机器人进行控制。控制按钮的主要功能有:与移动机器人的远程连接和断开、移动机器人前后左右的行进、车载摄像头的旋转。
控制指令的发送是通过使用Socket接口通信技术来实现。Socket有两种通信方式:面向连接的方式和无连接方式[8],本设计采用面向连接的方式来提高通信的可靠性。通过机器人的IP地址和端口号创建Socket,获得输出流OutputStream,然后使用流套接字完成对机器人控制指令的传输,实现对机器人的远程控制。Socket通信的创建和数据传输流程图如图4所示。
Socket通信包括三个步骤:建立连接、发送数据、关闭套接字。函数核心代码如下:
public void WiFiSend(String command){
socket = new Socket("192.168.199.213",8000);
WiFiout = socket.getOutputStream();
WiFiout.write(command.getBytes());
Socket.close(); }
4.3 視频显示
4.3.1 视频图像的获取
通过无线网络访问指定的图像服务器,从图像服务器下载由Raspberry Pi上传的每一帧实时图像数据,下载后的图像数据在控制终端进行图片解码操作,获取数据包中的有效数据并存入数据缓冲区。
每一帧图片的格式为JPEG格式,JPEG文件主要包括文件起始符、压缩数据和文件结束符[9]。读取数据找到图片压缩数据的起始标记码和结束标记码,除去标记码后获得有效压缩数据,获取图片压缩数据的主要函数代码如下:
public void DecodedPic() {
try {
header = new String(jpg_buf,"utf?8");
int index = header.indexOf(conLenString);
if (index != -1){
int index2 = header.indexOf("\r", index);}
if (index2 != -1) {
String frameLenString = header.substring
(index+contentLenString.length(),index2);}
for (i=0;i if (jpg_buf[i] == (byte) 0xFF) { Arrcopy(jpg_buf,i,jpg_buf,0,pos-i); pos = pos-i;} }}} 4.3.2 视频的播放 在控制终端下载每一帧图像数据后,对数据进行解码并创建位图进行显示,循环绘制位图达到视频的效果。 采用传统的View控件绘图存在三个缺陷:View缺乏缓冲机制;当程序需要更新图像时,程序必须重绘View上的整张图片,并且没有销毁机制,导致在重绘过程中会出现黑屏或者花屏的现象,影响视频观看效果;View的绘图必须在当前UI线程中进行,更新View组件时总要采用Handler处理,程序需要花较长的时间进行重绘,主线程将会被阻塞,使得视频观看不流畅[10]。 为了保证视频的观看效果和流畅度,选用SurefaceView控件进行位图的绘制,SurfaceView与SurfaceHolder结合使用,在主线程之外的线程中在屏幕上进行位图的绘制。其中SurfaceView控件的更新机制会更新SurfaceView的绘制,通过不断进行位图的重绘达到实时视频的效果。由于SurfaceView控件在单独的线程中更新画面,不会阻塞主UI线程,从而提高了程序的反应速度,也保证了图像显示的流畅度。 图形显示的过程如下:实现SurfaceHolder.Callback接口;获得SurfaceHolder对象;SurfaceHolder.addCallback()添加回调函数;SurfaceHolder.lockCanvas()锁定画布;Canvas绘图;SurfaceHolder.unlockCanvas()解锁提交图形。 5 系统调试 系统的综合测试主要测试两个方面的内容:控制终端对机器人终端的远程控制,检查机器人是否能准确地执行控制指令;控制终端的视频显示,查看视频播放的流畅度和清晰度。 装配完毕的移动机器人小车如图5所示。正常运行后,在APP中通过WiFi无线网络与机器人取得连接,在操作界面中用户根据实时图像信息对机器人进行远程控制,点击操作界面中的方向控制按钮,观察到机器人能够准确快速地执行相应的指令。通过对图像帧数的设置和对比,机器人摄像头图像采集的帧数最终设置为20 f/s。在10M带宽的无线网络下,图像下载速度可以达到96 Kb/s,并且20 f/s在画面品质和播放流畅度方面达到平衡,更高或更低带宽需要专门调试并设置。视频显示的效果图如图6所示。 6 结 语 本系统通过Android和Raspberry Pi的组合,提供了一种能够实现远程实时视频监控的新方案。Raspberry Pi增强了下位机的视频图像处理能力,Android APP增加了控制终端使用的灵活性和便捷性,移动车载摄像头相比固定摄像头大大增加了监控范围。该系统具有成本低、功耗小、操作方便快捷、移动灵活性大等优点,实现了远距离、可移动、实时视频监控。 参考文献 [1] 周鹏飞.基于MJPG?Streamer的移动视频监控系统的设计与研究[D].淮南:安徽理工大学,2013. [2] 刘涛,吕勇,毛海波.基于WiFi技术的无线视频监控系统设计[J].现代计算机(专业版),2015(1):49?53. [3] 张占军,陈诗伟,赵煜,等.智能家居系统的无线控制方案设计[J].科教导刊?电子版,2015(1):283?284. [4] 卞云松.基于Arduino单片机的避障小车机器人[J].自动化技术与应用,2014,33(1):16?19. [5] 蔡睿姸.基于Arduino的舵机控制系统设计[J].电脑知识与技术,2012,8(15):3719?3721. [6] 刘尘尘.基于ARM的远程视频监控系统设计[J].计算机测量与控制,2012,20(8):2127?2129. [7] 王辰,周杰,季榉.基于Android平台的实时视频技术的实现[J].计算机应用与软件,2014,36(6):120?121. [8] 阎秀英,周亚建,胡正名.基于Java的网络实时远程监控系统设计[J].计算机工程,2009,35(5):74?75. [9] 蔡红亮.静止图像压缩技术(JPEG)芯片的设计[D].南京:东南大学,2003. [10] 张雅楠,杨璐,郑丽敏.基于Android手机的远程视频监控系统的设计与开发[J].计算机应用,2015,33(z1):283?286.