小蚂蚁说:
AR 是一种新颖的交互方式, 与传统交互方式相比, 可以让用户更深入地参与互动, 给用户带来新体验.
而春节期间, 支付宝的扫福得福活动也异常火爆, 支付宝将 AR 与游戏, 红包相结合, 探索出了一种新玩法.
虽然 AR 领域已经有了很多年的发展历程, 但技术成熟度和用户普及度都还有很大的进步空间. 而走在该领域前排的支付宝, 背后又有哪些技术架构和研究故事呢? 今天就有请我们的支付宝 AR 团队来给大家进行详细分享.
1. 前言
首先, 我们回顾下网络上对 AR 技术的定义: 增强现实技术 (Augmented Reality, 简称 AR), 是一种实时地计算摄影机影像的位置及角度并加上相应图像, 视频, 3D 模型的技术, 这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动.
从这个定义可以看出, AR 包含两个关键要素: 相机姿态估计和虚实互动.
不过, 在当前流行的 AR 应用中, 未必都满足这两个要素, 比如有些简单的 AR 应用主要是识别某个物料, 识别成功后播放一段广告视频然后发个优惠券, 这个过程并没有估计相机姿态, 但是已经满足初期 AR 营销需求了. 为此, 我们可以称当前的很多 AR 应用为泛 AR 应用.
2. AR 技术概述
AR 技术本身可以从各个维度进行分类, 比如根据硬件载体不同, 可以分为基于通用移动设备的 AR(比如手机 AR) 和基于专用设备的 AR(比如 Hololens). 这里我们主要关注基于手机的 AR, 正是由于手机的普及推动了 AR 技术的普及. 具体到手机 AR, 又可以细分成多种:
基于 NFT(Natural Feature Tracking, 自然特征点跟踪) 的 AR: 对着一个纹理丰富的平面物体扫描, 就可以实时估计相机姿态并将 3D 模型叠加到平面物体上;
基于 SLAM
(Simultaneous localization andmapping) 技术的 AR: 同时估计相机姿态和周围环境地图, 并可在周围环境中叠加虚拟物体;
基于 LBS 的 AR
: 主要利用 GPS 信息和陀螺仪信息实现 AR 效果, 比如 PokemonGo;
基于 3D 物体的 AR
: 通常需要预先对 3D 物体进行建模, 然后以任意角度扫 3D 物体均可估计相机姿态;
基于 AI 的 AR
: 主要结合模式识别技术, 实现物体类别识别, 物体特征点定位, 物体分割, 然后在此基础上叠加虚拟物体. 随着 AI 技术的蓬勃发展, 这个方向将会受到更多的重视.
2.1 AR 平台识别算法
对于大多数 AR 应用来说, 通常都包含以下 3 个模块:
识别
: 具体来说包含图像识别, 跟踪, 3D 姿态估计;
渲染:
结合成像模型, 利用渲染引擎将 3D 虚拟物体叠加到图像上
交互:
手机上主要是通过触控与虚拟物体互动, Hololens 则通过手势, 语音进行多模态互动
支付宝 AR 平台作为一个平台性的系统, 除了包含以上基本模块外, 还有线上活动运营管理系统等. 这里, 我们主要介绍识别模块, 包括基于自然特征点的图片识别, 跟踪, 姿态估计, 以及基于 AI 技术的物体识别.
2.2 识别算法框架
总体上, AR 平台识别算法框架包含识别核心层, 业务层和识别内容管理层.
其中识别核心层由 AR 客户端识别引擎和服务端识别引擎构成, 这两个引擎都是建立在核心算法基础之上, 两者有机结合, 互为补充, 协同完成识别任务.
AR 业务层也包含客户端和服务端, 负责视频采集, 交互渲染, 业务路由, 后台管理等工作. 另外一大块是识别内容管理, 包括识别模型训练, 评测以及识别内容发布, 监控, 本文主要介绍的就是核心识别算法.
3. NFT 识别算法
3.1 NFT 算法流程
从数据流角度看, 我们的 NFT 核心识别算法流程如下图所示.
整个流程包括客户端和服务端, 对于输入的每帧图像, 首先会进行客户端识别, 如果客户端没能识别出来且满足静止判断条件, 则上传服务端识别.
3.2 客户端 NFT 识别
客户端识别包含局部特征点检测, 特征点描述, 快速检索, 图片 1 对 1 匹配, 单应性校验等步骤. 针对每一个步骤, 都有多种方法可选择. 比如特征点检测方法有 SIFT,SURF,Fast,ORB 等, 其中前两种具有尺度不变性, 后两种不具备尺度不变性, 需要在不同分辨率图像上分别提取特征.
局部特征点描述有 SIFT,SURF,BRISK,FREAK,ORB 等, 它们的耗时分别为 SIFT>SURF>BRISK=FREAK>ORB, 准确性和耗时基本相反, 在手机上常用的特征一般为后面三种.
对于快速检索方面, 有两个思路:
采用 FLANN 近邻搜索方式: 从所有候选图像的所有特征点里查找最相似的特征点, 然后根据每张图片匹配上的点数进行排序得到候选匹配图片.
是采用 BOW(Bag-of-Words) 检索方式: 这样可以让我们像查字典一样快速检索到候选匹配图片.
快速检索只是从众多图片中检索出最相近的 N 幅候选图片, 针对这 N 幅候选图片, 还需要做进一步的甄别, 给出明确的答案, 确定到底和哪一幅图片匹配, 不能模棱两可.
最后再做一个单应性校验: 基于平面物料的假设, 物料模板图片和实际拍摄的物料图片之间存在一个单应性变换, 利用匹配上的特征点可以估计出一个单应性变换矩阵, 最后再根据内点数多少判定是否真的匹配上了. 到此, 单纯的图片识别过程就完成了.
3.3 客户端 NFT 跟踪
对于需要需要跟踪的场景, 比如我们最初做的 Costa 活动, 就需要实时对 Costa 餐盘纸进行跟踪和姿态估计, 以便虚拟的花总是无缝贴合在餐盘纸上, 如下图所示:
跟踪的最终目的是为了能够实时地给出相机姿态, 以便 3D 虚拟物体可以实时叠加到实景中.
事实上, 如果每帧做特征点检测, 匹配, 校验, 姿态估计的速度足够快足够准, 也可以不用做跟踪. 然而现有的特征点检测匹配算法在客户端速度还不够快, 因此普遍做法是检测之后做跟踪.
由于跟踪过程中, 我们还需要实时估计相机姿态, 因此基于整个物体 ROI 区域跟踪的方法比如 KCF(Kernelized CorrelationFilters) 方法在这里不适用, 我们需要特征点跟踪方法, 以便利用特征点进行姿态估计.
最常用的特征点跟踪算法就是 KLT(Kanade-Lucas-Tomasi) 算法, 当运动幅度不是很剧烈时, 效果还是很不错的, 对于相对剧烈的运动, 容易跟踪失败.
为此, 我们采用了局部区块模版匹配的方式进行特征点跟踪. 当然, 为了提速, 具体实现时采用了很多加速策略. 跟踪完成后, 同样也需要做单应性校验, 确认跟踪是否正确. 如果跟踪正确了, 则进行后面的 3D 姿态估计环节.
知道 2D 点和 3D 点对应关系求解位姿, 可采用非线性的 Bundle Adjustment 方法, 也可以采取线性 PnP(Perspective-n-Point) 的方法求解. 相比 Bundle Adajustment 方法, PnP 方法速度更快, 但精度略低, 抖动大一些. 为减轻抖动, 可以通过对位姿做帧间平滑.
3.4 服务端 NFT 识别
相比客户端本地识别, 我们的服务端可以识别更多种类的图片, 具有更多更强的识别能力. 服务端具备海量图片检索能力和热点图片检索能力, 并且融合这两个检索结果, 做进一步的精匹配以确定最终匹配结果.
3.5 AI 识别算法
除了常规的 NFT 图片识别外, 我们还提供了其他基于模式识别的算法, 比如春节扫红包用的 Adaboost 目标检测, SSD 目标检测, xFuNet 识别以及定制的圆形目标检测, 颜色识别, HogSVM 识别等.
其中, 基于 SSD 目标检测的方法由于通用性好, 速度快, 能够处理多种复杂情况, 借助支付宝强大的客户端深度学习引擎 xNN 已落地到多个业务场景:
在 AR 平台, SSD 目标检测最初用于解决弱纹理商家 logo 识别问题.
不少商家希望通过扫他们的品牌 logo 参加活动, 然而有些品牌 logo 实在是没啥纹理, 比如耐克的 logo, 之前介绍的 NFT 图片识别算法对这种场景基本无能为力. 因此, 我们迫切需要找到一种新方法来满足这一场景需求.
期间我们尝试了多种方案: Dense SIFT, 深度特征学习, 目标检测等. 对各种方案进行比对后, 结合 AR 平台业务场景, 我们选择了目标检测的方式. 具体到目标检测, 常见的有 Faster-RCNN,YOLO,SSD 等.
实测发现 SSD 的检测速度最快, 精度也能满足业务需求. 最终, 我们选择了 SSD 目标检测方式来识别弱纹理商家 logo.
主体方案确定之后, 还有一个问题需要解决, 即商家通常只提供少量几张 logo 图片, 这对于深度学习来说, 那真是杯水车薪. 我们的解决方案是对少量的商家 logo 图像数据做倍增, 具体倍增方式包括面内面外旋转, 缩放, 平移, 背景替换, 颜色变化等.
此外, 针对容易误检的样本, 特别添加到样本集参与样本倍增合成. 最终, 我们的 SSD 目标检测训练流程如下图所示:
除了 SSD 目标检测, 基于 Adaboost 的目标检测算法由于其全机型覆盖, 计算量小等优势用在了春节红包扫福和扫手势活动中. 此外, 还有之前的扫中秋月亮, 扫脉动瓶盖也使用了定制化的模式识别算法.
3.6 性能指标
AR 平台识别算法基本性能如下:
1. 客户端 NFT 识别耗时:<200ms
2. 客户端 NFT 跟踪耗时:<10ms
3.NFT 识别包大小:<20k
5. 客户端 SSD 检测 + 校验:<100ms
4. 后记
支付宝 AR 平台经过长时间的打磨, 各项基本功能日趋完善. 同时, 我们也非常欢迎 AR,AI 爱好者加入我们团队, 共同把支付宝 AR 平台打造得更好!
代表产品有: 支付宝 AR 扫, 2017 春节 AR 红包, 2018 新春集五福扫福字, 扫 "五福到" 手势, 支付宝小程序缴费通, 开创了支付宝银行卡识别绑定, 声波支付等.
如果你对我们的工作感兴趣, 欢迎投简历加入我们! 我们目前正在招聘目标检测, 图像识别等方向的专业人才, 有兴趣可以发邮件至: mingcai.zmc@antfin.com
- END -
来源: https://yq.aliyun.com/articles/585248