闫耀芳,张子林,钱 堂,白佑铭,李兆麟
(河南科技大学信息工程学院,河南 洛阳 741023)
无人机最初只是应用于军事领域,但近年来被逐渐运用到大众生活等多个领域。由于无人机小巧灵活,方便大范围巡查的特点,无人机在疫情防控、影视拍摄、抢险救灾、电力巡检等方面都发挥着重要的作用。在无人机的很多应用中都会包含目标跟踪的任务,比如城市犯罪车辆的跟踪、大型节日活动的跟拍录制、海上漂流人员的跟踪[1]等。
2012年深圳展出的智能多目标跟踪技术,采用了国内先进的视频图像识别、检测和跟踪算法,已经远远领先于很多国外应用的多目标跟踪系统。目前,像视频监控这样静态场景中的目标检测与跟踪技术研究已经成熟[2],而在动态场景中,只要无人机的姿态发生改变,索引目标就会与之背景错位,这使得检测和跟踪更加困难。我国大疆创新致力于无人机的研发,近些年大疆就在Phantom4这样的先进机型上使用了GPS跟踪和视觉跟踪两种目标跟踪技术。Phantom4可以识别人、汽车、船只等运动物体进行自动跟随拍摄,并保持构图一致,让高难度航拍变得轻而易举。
因此,我们借助相对比较平价的Tello无人机进行了系统开发,在原有性能上加入目标追踪、轨迹推演和手势控制多项功能。让人们可以用手势控制无人机,获得运动轨迹,实现目标跟踪。
本系统的主要功能是目标跟踪,其中还包括航迹推演和手势控制功能。本系统分为以下几个软件模块:数据处理模块、目标跟踪模块、无人机控制模块、航迹推演模块和图像处理模块。
◆数据处理模块:主要负责数据收发处理,通过WiFi接收无人机视频流及各项参数,并发送PC端操作命令,实现底层的数据的交互。
◆目标跟踪模块:主要负责目标跟踪。YOLO-V3算法检测目标,DeepSORT算法跟踪目标,使其在多人干扰的情况下也能稳定跟踪目标。
◆无人机控制模块:主要负责控制无人机姿态,分为手势控制和鼠标键盘控制两个方面。通过将无人机指令与键盘鼠标事件绑定,完成无人机上下翻转等基本操作。使用OpenPose模型检测人体关键点变化,获知相应手势指令来控制与人的距离。
◆航迹推演模块:主要负责计算实时位置,记录历史点,画出移动轨迹。
◆图像处理模块:负责计算视频流图片数据的帧率,抓取、裁剪缩小图像。
本系统开发使用睿炽公司研发的Tello无人机。Tello无人机内嵌Marvell 1x1 11n单频WiFi系统单晶片(SoC),该芯片包括IP摄像头、移动路由器、IoT网关等,是一款高度集成的单频(2.4 GHz)IC,通过实现802.11b/g/n所规范的保护机制来避免干扰。它还使用内置的有线等效加密(WEP)算法,来降低数据被第三方拦截的概率。Marvell产品能够以极小能耗可靠传输空中无线高清视频,缓解无人机电池载电量不高的限制,并且其价格极具竞争力,被广泛使用于市场。
图1 通信链路
图1是Tello无人机的通信链路图,本系统主要是在个人笔记本PC上建立UDP客户端,建立接收线程RecvThread来负责从全局连接句柄Handle接收数据,向特洛Tello UDP端口8889发送命令和接收响应。在PC移动设备上建立UDP服务器,通过UDP端口8890从IP 0.0.0.0收听消息。无人机的控制链路是通过在PC端编译的一个PID控制器来实现的,使无人机能够平稳飞行。
系统开始首先启动数据处理模块,进入自动连接状态,初始化WiFi,搜索新的WiFi信号,检索并连接到Tello无人机,形成数据通路,建立视频链路,接收视频流,图像处理模块抓取、显示图像。之后,把图像交给目标检测进程,对图像建立目标索引,锁定目标,检测人体骨骼点,保存数据。通过比较主要人体骨骼关键点的位置偏差,如锁骨与手腕的距离,发现有较大的偏差值的时候,将偏差值传给PID控制器,PID控制器进一步运算,计算得到偏航、俯仰、横滚、高度四个维度的控制数据,发送控制指令,改变无人机姿态。目标移动时,通过图像处理模块将图像缩小到合适比例,从而便于系统利用DeepSORT算法输出目标位置迁移,PID调整无人机姿态,跟踪目标。当键盘事件被触发后启动PID调整无人机实现基本指令。
建立通信线路后,接收无人机数据,进入航迹推演模块,最后在画布上显示出来。系统运行流程如图2。
图2系统运行流程
关于视觉跟踪问题,各界学者专家提出了很多算法。但要弥补无人机在长时间实时跟踪过程中出现目标丢失的不足,还要不断改进机器视觉的检测和跟踪算法。本系统采用DeepSORT算法来实现目标跟踪,YOLO-V3算法来实现目标检测,得到了较好的跟踪效果。
DeepSORT目标跟踪算法是目前比较常见的针对多目标追踪的跟踪算法。DeepSORT算法继续沿用了卡尔曼滤波加匈牙利算法,先检测再跟踪,在此基础上增加了级联匹配(Matching Cascade)+新轨迹[4]的确认。卡尔曼滤波用来对目标的轨迹进行预测,使用确信度较高的跟踪结果对预测结果进行修正。匈牙利算法是一种寻找二分图的最大匹配算法,在目标追踪过程中帮助寻找前后两帧的若干目标的匹配最优解。在目标长时间被遮挡时,级联匹配通过对频繁出现的目标赋予优先权的方法,来达到最佳的匹配效果。DeepSORT算法在系统中可以帮助无人机即使在较复杂的环境下,也可以更加快速、准确地找到目标。
YOLO是目前比较流行的Object Detection算法,速度快且结构简单。YOLO-V3借鉴了金字塔特征图思想,小尺寸特征图用于检测大尺寸物体,而大尺寸特征图检测小尺寸物体[3],提升小物体检测效果。由此,在运动目标的目标检测过程中,可以减少追踪过程中目标丢失可能。尽管YOLO系列检测精度不如Faster RCNN,但是YOLO-V3每个真实框只对应一个正的候选区域。这就使得YOLO-V3算法具有更快的速度,能到达实时响应的水平。本系统中,YOLO-V3就很好地为无人机目标检测提供了精度和速度。
根据系统设计方案,进行系统测试环境的搭建:首先安装Python或Anaconda,硬件环境CPU 2.0 GHz以上,Nvidia显卡2G内存以上;软件环境要求操作系统平台为Windows 10系统,安装CUDA11.2架构。然后依次安装Paddlepaddle、Paddlehub预训练模型。人体关键点检测模型安装Open pose_body_estimation,还要依次安装Av、Keyboard、Pywifi等基本配置,最后安装TelloPy(在TelloPy-develop-0.7.0目录下执行Python setup.py install)。编译环境要求Pycharm 2021.1.1版本及以上。
系统运行后,当人伸手向右或向左摆动时,观察无人机是否跟随手势指示向右或向左移动;若人做召回或远离手势观察无人机是否靠近或远离。在测试键盘,分别按下W,A,S,D或上、下、左、右、空格、Tab键,观察无人机的动向,是否做上下左右移动,起飞或着陆。检测功能正常。
锁定目标之后,当目标移动时,观察无人机是否会跟随移动并在屏幕上显示出运动的轨迹,同时会在屏幕右上角显示飞行器状态参数。
测试完成,屏幕中绿色箭头表示无人机的位置,红色曲线表示无人机的飞行轨迹。
右上角各项飞行参数如下:
FPS:图像帧率 15
BAT:电池电量 72%
WIFI:信号强度 90
MODE:飞行模式 6
EXP:目标的期望距离 2.0 m
本文基于Tello无人机设计了一套目标跟踪系统,使用Python语言开发,具有较强的可移植能力。本系统可以通过个人笔记本电脑键盘和手势动作来控制无人机,可以显示高清图像,浏览行动轨迹,实现对动态目标检测并跟踪。利用Tello无人机自身集成的现在非常出色的WiFi技术,更加快速准确实现通信链路数据交互。将YOLO-V3目标检测算法和DeepSORT目标跟踪算法结合,大大降低了目标丢失概率。系统操作简单,成本不高,可用于安防、体育转播、老人孩童的看护等,有很大的应用前景。