小螞蟻說:
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新春集五福掃福字、掃“五福到”手勢、支付寶小程序繳費通、開創了支付寶銀行卡識別綁定、聲波支付等。
如果你對我們的工作感興趣,歡迎投簡歷加入我們!我們目前正在招聘目標檢測、圖像識別等方向的專業人才,有興趣可以發郵件至: [email protected]
— END —
閱讀更多 螞蟻金服科技 的文章