玩转3D视界:3D机器视觉及其应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.6 DMAPP开发平台

如果相机的校准、数据的预处理等基本工作都要从头开始做,那我们做一个项目的时候,开发周期一定会很长,所以我们迫切需要一个能够直接提供基础算法的开发平台,从而加快研究和产品化的步伐。本节我们将介绍由上海数迹提供的通用、成熟的算法开发平台——DMAPP(Data Miracle Application)。

2.6.1 SmartToF SDK——数据获取与处理

DMAPP的基础框架是SmartToF SDK(简称“SDK”)。SDK是配套前文介绍过的SmartToF系列模组进行开发的工具包,支持Linux、Windows、Android等主流平台,其基本架构如图2.6-1所示。

图2.6-1 SDK基本架构

其中,工具包含软件工具、深度图可视化界面SmartToFViewer、点云可视化界面SmartToF_PCLViewer等;示例包含C语言、Python等的示例程序;传感器适配器可适配不同厂家的ToF相机;函数库中包含多种常用函数,如3D数据滤波函数等;同时还支持多种接口。SmartToF SDK核心的可视化界面如图2.6-2所示。

图2.6-2 SmartToF SDK核心的可视化界面

SmartToFViewer是一款可视化工具,可以用来快速评估模组效果,模拟不同参数对显示效果的影响并确定最佳参数,其主要功能如下。

(1)设备选择、打开、关闭等;

(2)显示图像深度图、灰度图等;

(3)配合PCLViewer显示点云图;

(4)查看物体和模组摄像头间的距离;

(5)查看模组信息及工作状态;

(6)设置常用参数;

(7)设置滤波特性;

(8)设置运动模式;

(9)录像及回放录像。

接下来,我们简要介绍一下利用SDK可以获取的数据及其格式,利用SmartToF相机获取数据时,可以改变LED的调制频率,方便根据需求平衡精度和范围。利用SDK观察深度图和点云图时,我们可以选择灰度编码或伪彩色编码,两种编码方式均采用不同颜色表征距离的远近。SmartToFViewer还可以保存数据,保存的格式可以为图片、视频、点云等。图片一般为16bit的深度图,保存的数据是以毫米为单位的实际距离。视频可以直接保存为二进制bin文件,该方式不会压缩数据,可以存储为以毫米单位的整数,也可以存储为以米为单位的浮点数。SmartToFViewer还提供了经过不同方式压缩后的数据存储格式。点云可以存储为世界坐标系下的(xyz)坐标,常用格式为PLY,这种格式简单且通用。

在了解数据的获取后,我们一起来了解SDK能够对相机和数据进行哪些调整与处理,使采集的深度图和点云能更好地满足我们的需求。

2.6.1.1 HDR模式

HDR是High-Dynamic Range(高动态范围)的缩写,普通相机的HDR模式是为了兼顾明暗不同的照片,在一瞬间拍摄过曝、正常、欠曝的多张照片,再将照片进行合成,就得到了兼顾亮部和暗部的照片。在利用ToF相机采集深度图时,积分时间(曝光时间)越长,进光量越多,则距离计算的精度就越高,但是积分时间过长,会使近距离的部分出现过度曝光,无法测量实际距离。所以我们需要在远近不同的区域采用不同的积分时间,从而获得远近景都具备更高精度的图像。

2.6.1.2 运动模式

相机在拍摄运动的物体时会产生拖影现象,当参与计算的多个DCS(Differential Correlation Sample,差分相关采样)的采样时间过长会造成运动模糊,我们可以通过缩短拍摄时间来减少运动拖影。当拍摄时间已经缩短到极限值时,我们可以减少DCS的数量,例如,我们采用标准的4个DCS时,每个DCS的采样时间是6ms,运动模糊度就是18~24ms,如果我们只用2个DCS,运动模糊度就是6~12ms。但减少DCS会降低测量精度,在拍摄运动的手时进行截图,如图2.6-3所示,左、右两图分别为4个和2个DCS成像结果,可以看出,左图手指之间有明显的粘连,存在运动拖影,右图较为清晰,无运动拖影。

图2.6-3 运动拖影和无运动拖影

2.6.1.3 多模组干扰滤波

在使用多个模组进行测距时,会出现因为调制频率相同而互相干扰的问题,我们可以采取时分复用的方式,通过控制不同模组的开始时间,避免信号之间的干涉,从而实现多模组的干扰滤波。

2.6.1.4 镜头校准

镜头校准目前主要针对镜头的鱼眼校准,鱼眼失真一般为桶形畸变,其相关示意图如图2.6-4和图2.6-5所示。

图2.6-4 标准网格及鱼眼失真网格示意图

图2.6-5 鱼眼失真相机拍摄的图片及校准后的图片

接下来,我们介绍一下应该如何利用OpenCV库中的相关函数来校准相机的鱼眼失真,读者可以根据自己所用的相机,利用OpenCV中提供的相关函数进行二次标定和校正。OpenCV中的校正原理如下。

其中,ki是校正所需的参数,xy是未校准的坐标,xeye是校准后的坐标。鱼眼失真校准流程如图2.6-6所示。

图2.6-6 鱼眼失真校准流程

数据格式之间的转换和深度图与点云的滤波,我们会在接下来的第4章和第5章进行详细介绍,数据的压缩也会在第5章进行讲解。

2.6.2 DMAPP架构

相比于SDK偏底层的处理,DMAPP更加注重为上层应用提供帮助,是从样品到产品发布的一体化平台,DMAPP的目的是有效缩短算法和产品的研发周期。通过DMAPP可以选择观察和采集数据的格式与种类,同时可以对传感器获取的原始数据进行不同的预处理。DMAPP架构示意图如图2.6-7所示,其支持Windows、Linux、Android平台,主要功能为数据获取和处理,提供算法开发模块、数据共享模块和辅助应用化模块等,利用该平台可以直接发布样品和产品。DMAPP平台可以调用不同传感器采集不同种类的深度图,并为开发者提供处理深度图的各种基本工具,包括多种滤波器和补空洞算法,同时可将深度图转换为点云、体素、三角网格等不同的数据格式,能够满足不同的研究需求。

图2.6-7 DMAPP架构示意图

1.数据共享模块

数据是研究的基础,DMAPP可以采集不同类型的数据,同时提供各种标准的数据存储格式,用户可以将使用3D相机采集的3D数据通过DMAPP的数据共享模块上传,也可以下载其他用户上传的数据,该模块可以为研究人员提供丰富的数据集。

2.算法开发模块

算法开发是研究的核心内容,在DMAPP平台提供各种底层处理算法的基础上,算法开发模块是研究人员唯一需要关注的模块,研究人员可以利用该模块调用底层处理算法,对采集的数据进行预处理,包括底层的滤波(我们会在第5章对滤波进行详细讲解)等,也可以直接从数据共享模块中下载所需的数据集。当开发成熟后,研究人员可以选择将算法发布到DAMPP平台中,进行测试验证等工作。

3.辅助应用化模块

一个算法的最终目标是得到实际应用,DMAPP提供了多种工具,包括人工智能数据标注工具、测试评估体系和图形化显示评估工具,同时还能够对计算量进行分析,匹配合适的计算平台,如微控制单元(Microcontroller Unit,MCU)、微处理器(Microprocessor Unit,MPU)、视频处理单元(Video Processing Unit,VPU)等。

4.通用数据接口

任何一个应用架构都不是一个孤岛,所以输入数据和输出数据的格式满足规范是非常重要的。DMAPP平台的标准数据接口如图2.6-8所示,其列举了DMAPP与外部数据通信的几种接口。2008年,开放型网络视频接口论坛(Open Network Video Interface Forum,ONVIF)成立,ONVIF标准是描述了网络视频的模型、接口、数据类型及数据交互模式的网络视频框架协议,实时消息传输协议(Real Time Messaging Protocol,RTMP)主要用于在流媒体/交互服务器之间进行的音视频和数据通信,两个协议都是常用的标准视频流接口规范。消息队列遥测传输(Message Queuing Telemetry Transport,MQTT)是ISO标准下基于发布/订阅范式的消息协议,是算法开发用户在发布自己的成果时需要遵循的协议。

图2.6-8 DMAPP平台的标准数据接口

2.6.3 DMAPP的特点与优势

DMAPP支持多平台、多语言开发,支持Windows、Linux、Android多个操作系统,同时支持Python、C、C++等多种语言。通过使用DMAPP,研发人员无须花费时间进行与研发无关的基础算法的学习和实现,只需要调用对应的已封装好的函数即可,这样可以使研发人员专注于核心算法的研究,有助于产品的快速形成。

DMAPP的各项功能代码都是开源的,用户可以根据实际需求进行修改,如滤波器的叠加、伪彩色视图的颜色修改等。DMAPP提供的数据共享平台使用户能够将采集的数据按照一定的规则标准进行发布,为同一研究领域的人员提供交流和验证的数据集,减少重复的数据采集工作。

DMAPP可提供多种外部设备的接入支持,包括ONVIF支持,可接入普通监控系统;RTMP推流支持,可接入公有云或私有云直播系统;MQTT支持,可以快捷方便地将结果发布到物联网系统中;同时还能够通过Web配置DMAPP的所有参数。