为了降低生产生活领域中灾难事故发生的概率, 提高安全生产效率, 视频监控系统已被广泛应用于包括实验室、工厂、农业以及军工等各个领域. 传统视频监控系统存在使用成本高、布线复杂等问题, 设计一种性能优良、使用灵活且成本低廉的视频监控系统已成为一种迫切的需要. 文献[1]提出了一种基于C/S模式的远程视频监控系统, 该系统使用特定硬件完成对视频数据的采集、加密, 并通过特定的网络链路将数据传输至远程服务器. 服务器完成对视频数据的解码后将数据在本地网络进行广播. 这种方式虽然实现了视频的远程监控, 但其硬件使用成本高, 且客户端必须与接收数据的服务器处于同一网络, 并不适用于普通民用大范围推广; 黄新等[2]使用基于ARM+Linux的嵌入式系统并结合V4L2接口完成对视频数据的采集, 同时在系统中安装有基于Boa的Web服务器, 实现了基于Web方式的远程视频访问. 该方法降低了硬件使用成本, 但由于直接在嵌入端运行Web服务器, 为了维持嵌入端的系统性能, 势必对连接客户端的数量有所限制, 因此仅适用于小范围应用; 为了扩大单个摄像头的监控范围, 陈国俊等[3-5]提出了一种ARM+Linux+移动智能车的视频监控模式, 可以通过控制智能车的移动, 实现单个摄像头对不同场景的监控, 同时通过WiFi将采集到的数据发送至远程监控终端; 卜振江等[6-9]提出了基于Android的移动视频监控客户端. 通过连接流媒体服务器实时获取视频数据, 同时将收到的视频数据显示于Android手机客户端. 该方法所使用的软硬件技术成熟, 开发成本低, 具有较高的普及性; Zhou等[10]设计了一种基于Raspberry Pi的移动式视频监控系统, 但其采集到的数据仅能发送到拥有指定IP的设备; Azeta等[11]提出的基于Android的视频监控系统可以通过手机控制搭载有摄像头的智能车, 但必须要求手机与智能车控制系统处于同一WiFi网络中.
综合对上述现有视频监控系统的分析, 本文提出了一种移动远程视频监控系统. 该系统中的摄像头不再固定于某个位置, 而是安装于可远程操纵的移动智能车上, 大大增加了视频监控范围; 利用Linux系统中的V4L2接口以及套接字技术, 极大的方便了视频数据的采集与发送; 利用桌面机的强大处理能力, 实现数据转发、存储及客户端连接, 方便任意网络设备对视频监控系统的访问; 运行于Android/桌面系统的应用程序使得用户在任意时刻均可实现对视频的访问, 并且可以实现对智能车运动的操控. 该系统在提高了视频数据采集的灵活性, 同时, 简化了摄像头的部署, 提高了系统可扩展性, 实现移动端对监控系统的远程访问.
1 系统模型由图1可知, 整个系统由车载移动式摄像头、视频采集系统、服务器以及客户终端组成, 其组成与功能如下:
(1) 摄像头搭载于履带式智能车上, 并由Arduino系统通过串行端口接收用户控制指令, 控制智能车的运动, 从而实现单个摄像头对不同区域的场景进行视频采集.
(2) 安装有嵌入式Linux的ARM系统实现视频数据采集、转发以及接收控制指令的功能. 一方面, 系统通过V4L2接口完成对USB摄像头的视频数据采集, 并将采集得到的视频数据通过UDP协议发送至数据转发服务器; 另一方面, 通过TCP协议接收来自服务器转发的控制指令, 并通过串行端口传输至智能车控制系统.
(3) 数据服务器承担连接视频采集系统与客户端的功能, 一方面通过UDP协议转发视频数据至客户端, 另一方面通过TCP协议转发来自客户端的智能车控制指令至视频采集系统.
(4) 运行于Android端的APP通过网络连接至数据服务器, 实时显示收到的视频数据并提供用户控制界面以操作智能车的运动.
2 系统关键技术研究 2.1 指令控制协议
表1列明了系统中使用的控制指令协议. 指令通过TCP通道, 由客户终端经过服务器发送至视频采集系统, 实现对车辆移动的控制、摄像头参数的调整以及用户登录.
由表1中的控制协议可知, 摄像头参数中仅包含亮度及对比度调整, 取值范围均为“0–99”. 除结尾的0x10为十六进制数以外, 其他部分均采用ASCII码表示. 整个控制协议分为三大类, 分别为智能车控制协议、摄像头参数控制协议以及用户登录协议. 需要注意的是, 视频采集转发模块在收到智能车控制协议后并不会进一步解码, 而是将其直接通过串口转发至Arduino系统, 从而控制车辆运动; 而对于摄像头参数调整指令, 会使用相关API完成参数调整.
2.2 基于Arduino的智能车控制系统智能车由左右电机带动履带运行, 采用左右车轮转速差的方式控制车辆的转向, 其运动受到上位机指令的控制.
图2展示了智能车运动控制结构模型. Arduino系统与基于ARM的视频采集转发系统通过串行端口连接并交换数据. 由于两者均采用TTL串口的方式, 因此只需将双方的RX/TX交叉对接即可; Arduino控制板一旦接收到来自视频采集系统的指令, 即通过产生PWM信号, 控制左右电机驱动器的工作, 使得车辆能够按照预定的轨迹运动, 实现移动视频采集功能.
需要注意的是, 为了降低系统工作量, ARM控制端一旦接收到控制命令后即向Arduino系统进行发送, 不会做出额外的操作.
2.3 视频数据分包传输对于本系统所使用的嵌入式ARM+Linux系统, UDP协议数据包一次最大数据传输量约为50 kB, 对于某些设备而言, 无法一次性将采集到的一帧数据传输至服务器, 因此必须对每一帧数据进行分包处理. 由于视频采集与服务器均处于同一局域网中, 数据传输速率高且错误率低, 故本系统采用表2所示的简单协议标记帧数据的起始, 并将数据切分为固定大小的块.
根据表2中的拆分协议, 发送端将一帧数据切分为大小为mKB (非结尾数据块, 结尾数据块大小为S – n × m KB, 其中S为一帧数据的大小, n为非结尾数据块的数量)的数据块. 在帧数据发送前, 首先将数据头进行发送, 然后再将块数据按顺序向外传输; 接收端在完成数据块的接收后会首先解码是否为数据头, 然后分如下两种情况完成对接收数据的操作:
(1) 当前数据块为数据头. 将上次数据头与本次数据头之间收到的数据拼接成为完成的jpeg文件, 准备转发、存储或显示.
(2) 当前数据块非数据头. 将本次数据按接收顺序存放于系统指定的缓冲区.
由以上操作可知, 两次数据头之间的数据即为完整的图像数据帧; 数据块的大小m根据系统资源以及网络传输速度, 在实际应用中确定.
2.4 网络结构及数据转发根据图3所示的系统网络结构可知, 系统中各个模块(除控制智能车的Arduino系统外)之间的数据传递均通过TCP/UDP网络完成.
(1) 基于ARM的视频采集与转发系统通过TCP协议在8000端口实现监听并接收来自客户端的指令. UDP通道则通过8000端口负责向外发送采集到的视频数据. 本模块一旦启动即开始数据采集, 并通过UDP通道向服务器端发送视频数据.
(2) 客户端使用TCP与UDP协议(8001端口)连接至服务器, 发送控制指令同时获取视频数据. 需要注意的是, 由于UDP采用了无连接传输方式, 因此当客户端需要获取视频数据时, 必须显示的告知服务器, 而当程序退出时, 则需要告知服务器本地程序已关闭, 从而节约网络资源. 当客户端程序实现启动/退出动作时, 会根据表1中所述指令协议, 通过TCP通道向服务器发送用户登录/退出指令.
(3) 服务器端的功能主要用于指令与视频数据的转发, 一方面, 服务器通过TCP与UDP协议(均为8001端口)连接至视频采集与转发系统, 另一方面通过TCP与UDP协议(均为8000端口)进行监听并与客户端连接, 实现视频采集系统与客户端之间的数据转发. 服务器端采用图4中所示的链表结构维持客户端信息, 表中记录了已向服务器发送登录指令的客户端信息, 包括客户端的IP地址、网络端口及将来可用到的扩展信息. 服务器在转发视频时会遍历客户端信息表, 向表中所有的客户端发送视频数据.
3 系统设计与实现 3.1 视频采集参数设定
由于视频采集系统中安装有嵌入式Linux系统, 因此可以使用V4L2接口方便的完成视频数据的采集与摄像头参数的调整. 根据Linux开发文档, 结合图5所展示的视频数据采集与参数设定工作流程, 可以快捷的完成对视频数据的采集.
采集得到的视频参数主要包括图像分辨率、视频格式等信息, 其参数信息存储于v4l2_format数据结构中; 缓冲区初始化则需要指定缓冲区数量、缓冲区类型、捕获模式以及内存区的使用方式, 其参数存储v4l2_requestbuffers数据结构中. 根据所选用的硬件, 本系统选用表3中列明的参数完成视频数据的采集.
3.2 服务器数据存储与显示
服务器接收来自视频采集系统的数据, 然后将其转发至客户端, 除此以外, 为了方便管理人员的使用, 服务器会在本地存储视频数据并在显示器上向管理员实时展示当前视频.
为了完成上述功能, 服务器本地创建有两个帧缓冲区分别用于接收数据块, 当服务器收到数据后, 会选择将其存入空闲缓冲区中, 此时服务器会对另一个缓冲区中的有效数据进行存储与显示操作, 上述操作过程详细展示于图6中. 由于MJPEG中的每一帧数据为独立的jpg格式数据, 因此本系统引入OpenCV库, 将jpg数据流合并为avi格式的视频数据; 图像的显示则利用了VC2012中的CImage对象实现. 需要注意的是, 视频采集端将帧数据进行了切分处理, 所以服务器每次收到的数据仅为一帧数据的一部分, 在对相关数据进行处理前, 必须对数据块进行拼接, 从而得到完整的帧数据.
由服务器程序设计流程及方法可知, 客户端通过TCP协议连接至CMD Channel, 即指令通道; 通过UDP协议连接至Data Channel, 即数据通道. 连接后, 客户相关信息均显示在图7所示的客户端登录界面中. 需要注意的是, 客户端可以根据需要, 仅连接至其中的一个通道.
服务器端除承担数据转发功能外, 亦可以实现对视频数据的显示与存储.
3.3 移动端视频显示与指令控制图8中所示的移动端工作流程分别展示了程序在UDP通道的视频接收显示过程及在TCP通道的指令发送过程. 客户端程序启动时, 基于TCP协议的指令通道会自动连接至服务器指定端口, 该通道仅用于指令信息从移动端至服务器端的单向流动; 当用户需要查看视频数据时, 则需要手动点击按钮LOGIN连接至基于UDP协议的数据通道, 该通道仅用于视频数据从服务器端向移动终端单向流动.
根据图8中的移动端程序工作流程, 利用Unity作为移动端开发工具, 使得程序具备跨平台的特性, 可运行于Android、IOS、Windows以及Linux等操作系统.
在本系统中, 程序以Android系统作为测试平台, 将得到的APK文件安装到手机客户端中, 得到图9所示的移动端显示界面. 用户在第一个配置界面中输入服务器IP地址及端口, 完成后, 即可进入第二个视频显示及操作界面; 在视频显示及操作界面中, 用户点击LOGIN完成登录, 系统即可实现视频的显示及控制指令的发送.
3.4 智能车控制
本系统采用履带型车辆作为监控系统的移动载体, 车辆的移动控制由Arduino系统控制. 视频信号采集板与Arduino系统之间通过RS232总线连接.
图10中的信号采集系统通过TCP通道获取客户端指令, 通过RS232转发至Arduino控制板; 控制板解析用户指令并将指令信号转换为左右两轮的PWM信号, 控制驱动板的工作, 从而带动车辆的正确移动.
4 系统应用与性能分析
为了验证该系统的实用性, 同时分析系统的运行效率, 将本系统采集部分(载有视频采集系统的履带车)、数据服务器以及移动客户端均部署于江汉大学实验室内, 得到图11所示的履带式移动远程视频监控系统.
系统在工作过程中, 利用服务器程序实现对数据包的监控可知, 在此工作环境下, 视频传输帧率约为20 fps, 同时移动监控端可以正确显示视频信息, 并能够控制智能车的前后左右四个方向的运动.
5 结论与展望本文提出了一种移动远程视频监控系统. 该系统由以下部分组成: 搭载有摄像头的智能车与ARM+Linux系统结合, 实现对视频数据的实时采集; 利用PC机作为服务器, 实现数据在采集端与移动监控端之间的交互; 用户通过操作基于Android的移动端程序, 完成对视频的监控, 并可以发送指令至采集端, 控制智能车的运行. 各个模块之间通过TCP/UDP协议实现连接, 使得系统具有较强的通用性. 与现有技术相比, 该系统部署方便, 使用成本低, 使用灵活, 方便了对场景的实时监控, 适合于绝大多数具备网络连接的室内场合. 在下一步工作中, 可以尝试将多个摄像模块加入系统, 实现一套系统对不同场景的监控切换, 从而实现对更大范围的有效视频监控.
[1] |
刘艳, 王雪梅, 陶骏, 等. 基于C/S模式的远程网络视频监控系统的设计和实现. 长春师范大学学报, 2019, 38(6): 30-34. |
[2] |
黄新, 梁洋洋. 基于V4L2嵌入式视频监控系统. 仪器仪表用户, 2017, 24(5): 46-50. DOI:10.3969/j.issn.1671-1041.2017.05.014 |
[3] |
陈国俊, 唐学麒, 吴余万. 基于ARM和Linux平台的移动视频监控小车研制研究. 电脑知识与技术, 2016, 12(34): 81-83. |
[4] |
卓轩宇, 唐琳. 基于STM32的WiFi视频监控小车. 计算机产品与流通, 2018(3): 98. |
[5] |
张路, 姚向国. 基于WiFi可移动视频监控小车的设计. 南方农机, 2018(6): 88, 90. |
[6] |
卜振江, 杨海波, 贾军营. 基于Android的移动视频监控客户端. 计算机系统应用, 2017, 26(4): 275-279. DOI:10.15888/j.cnki.csa.005768 |
[7] |
刘江平, 张蕾. 基于Android平台的手机视频监控的研究. 内蒙古农业大学学报(自然科学版), 2017, 38(6): 68-72. |
[8] |
王艳. 基于Android终端的移动视频监控客户端设计. 微型电脑应用, 2019, 35(7): 105-107. DOI:10.3969/j.issn.1007-757X.2019.07.031 |
[9] |
吴雅琴, 鲁张依婵, 张红娜, 等. 智能手机视频监控系统的设计与实现. 物联网技术, 2018, 8(2): 85-87. |
[10] |
Zhou K, Yuan YH. A smart ammunition library management system based on raspberry pie. Procedia Computer Science, 2020, 166: 165-169. DOI:10.1016/j.procs.2020.02.041 |
[11] |
Azeta J, Bolu CA, Hinvi D, et al. An android based mobile robot for monitoring and surveillance. Procedia Manufacturing, 2019, 35: 1129-1134. DOI:10.1016/j.promfg.2019.06.066 |