李雪艷, 戴 路
(陽光學(xué)院人工智能學(xué)院, 福建福州 350015)
增強(qiáng)現(xiàn)實(shí)技術(shù), 也稱為AR技術(shù)(Augmented Reality), 其工作原理是將真實(shí)世界信息和虛擬世界信息“無縫”集成, 把現(xiàn)實(shí)世界的一定時(shí)間空間范圍內(nèi)很難體驗(yàn)到的實(shí)體信息通過電腦等科學(xué)技術(shù), 模擬仿真后再疊加, 將虛擬的信息應(yīng)用到真實(shí)世界, 被人類感官所感知, 從而達(dá)到超越現(xiàn)實(shí)的感官體驗(yàn)[1].
現(xiàn)階段增強(qiáng)現(xiàn)實(shí)的技術(shù)一般有三種[2]: (1)基于顯示器的增強(qiáng)現(xiàn)實(shí)技術(shù); (2)基于視頻透視式的增強(qiáng)現(xiàn)實(shí)技術(shù); (3)光學(xué)透視式的增強(qiáng)現(xiàn)實(shí)技術(shù). 由于視頻透視式的增強(qiáng)現(xiàn)實(shí)技術(shù)和光學(xué)透視式的增強(qiáng)現(xiàn)實(shí)技術(shù)需要極強(qiáng)的硬件方面支持, 成本極高, 不宜廣泛推廣[3], 因此, 本設(shè)計(jì)采用基于顯示屏的增強(qiáng)現(xiàn)實(shí)技術(shù)進(jìn)行設(shè)計(jì). 該方式能夠采用手機(jī)進(jìn)行增強(qiáng)現(xiàn)實(shí)交互, 開發(fā)簡(jiǎn)便且便于推廣. 本設(shè)計(jì)基于高通公司推出的Vuforia SDK.
Unity 3D 是由Unity Technologies公司開發(fā)的能夠?qū)崿F(xiàn)場(chǎng)景可視化以及三位動(dòng)態(tài)模型等互動(dòng)的游戲開發(fā)工具, 開發(fā)者能通過Unity 3D輕松開發(fā)出一款視覺交互類的應(yīng)用[4]. 其采用C#語言, 能在Windows、 Linux和Mac OS等操作系統(tǒng)下開發(fā), 并能將游戲發(fā)布到各種主流的平臺(tái)上. 同時(shí), Unity 3D支持各種插件, 可以降低開發(fā)難度[5]. 本文選取Vuforia插件進(jìn)行增強(qiáng)現(xiàn)實(shí)交互的設(shè)計(jì).
增強(qiáng)現(xiàn)實(shí)技術(shù)在開發(fā)過程中需要攻克多個(gè)技術(shù)難題. Vuforia擴(kuò)增實(shí)境軟件開發(fā)工具包(Vuforia Augmented Reality SDK)的簡(jiǎn)介如圖1所示, 它是高通公司推出的針對(duì)移動(dòng)設(shè)備擴(kuò)增實(shí)境應(yīng)用的軟件開發(fā)工具包, 可以明顯降低增強(qiáng)現(xiàn)實(shí)交互應(yīng)用的開發(fā)門檻[6]. 其可以支持Unity3D、 HoloLens、 Android、 iOS、 UWP的等系統(tǒng)[7].
圖1 Vuforia 插件簡(jiǎn)介
本設(shè)計(jì)主要研究在使用Unity3D游戲引擎及Vuforia SDK的基礎(chǔ)上開發(fā)增強(qiáng)現(xiàn)實(shí)的應(yīng)用, 并將其打包成.apk格式的安卓安裝包, 且最終能在安卓手機(jī)上運(yùn)行. 其設(shè)計(jì)概要流程圖如圖2所示. 首先通過Vuforia官網(wǎng)下載基于Unity 3D的插件, 并通過注冊(cè)獲取開發(fā)者身份. 然后將準(zhǔn)備好需要進(jìn)行虛擬交互的圖像通過授權(quán)獲取應(yīng)用許可及其相關(guān)密鑰, 并將需要交互的模型與密鑰一并導(dǎo)入U(xiǎn)nity 3D中. 最后通過Vuforia SDK設(shè)置及相關(guān)腳本編寫最終完成相關(guān)增強(qiáng)現(xiàn)實(shí)的交互, 并打包為.apk格式的安卓系統(tǒng)的安裝包, 之后通過相關(guān)測(cè)試并最終完成作品.
圖2 設(shè)計(jì)概要流程圖
對(duì)于Vuforia SDK資源包的創(chuàng)建, 需要用郵箱注冊(cè)一個(gè)ID賬號(hào)登錄, 并激活賬戶進(jìn)入Vuforia網(wǎng)站, 申請(qǐng)注冊(cè)需要的應(yīng)用, 獲取應(yīng)用的許可證密匙. 然后進(jìn)入Downloads選項(xiàng), 選擇下載add-vuforia-package-8-6-7.unitypackage. 下載完成之后得到一個(gè)后綴名為unitypackage的Unity插件包, 之后導(dǎo)入插件包后, Unity3D的菜單欄上會(huì)多出一個(gè)Vuforia的菜單選項(xiàng), 通過這個(gè)選項(xiàng)能添加Vuforia的相關(guān)預(yù)置.
在Vuforia官網(wǎng)注冊(cè)后進(jìn)入Develop頁(yè)面, 在license Manager選項(xiàng)中創(chuàng)建License Key, License Key是Vuforia公司對(duì)Vuforia SDK的許可證密鑰. 其中, 個(gè)人版是免費(fèi)的. 本文使用的License Key截圖見圖3.
圖3 許可證密鑰
同時(shí)將Vuforia SDK的許可證密鑰添加到App Lincense Key中, 添加Lincense Key后的效果圖如圖4所示. 應(yīng)用運(yùn)行時(shí)若無該密鑰將無法運(yùn)行程序.
圖4 添加Lincense Key后的效果圖
將原場(chǎng)景中的攝像頭Main Camera替換為插件中的AR Camera. 替換選項(xiàng)截圖如圖5所示. 并且在開啟攝像機(jī)前需添加自動(dòng)對(duì)焦相關(guān)功能, 防止攝像頭在移動(dòng)過程中由于焦距問題導(dǎo)致無法識(shí)別圖的問題.
圖5 替換為AR Camera組件的截圖
在Develop頁(yè)面的Target Manager中創(chuàng)建應(yīng)用中需要用到的識(shí)別圖, 通過Add Datebase上傳所需要用到的識(shí)別圖. 識(shí)別圖使用的形狀包括Single Image、 Cuboid、 Cylinder和3D Object四種模式. 同時(shí)系統(tǒng)還能檢測(cè)識(shí)別圖的被識(shí)別度, 識(shí)別圖的特殊性越高, 其被識(shí)別的準(zhǔn)確率就越高. 注冊(cè)圖的識(shí)別標(biāo)記如圖6所示. 最后系統(tǒng)將生成UnityPackage的插件包, 可以將該插件導(dǎo)入Image Target Behaviour的選項(xiàng)里.
圖6 注冊(cè)圖的識(shí)別標(biāo)記
人物模型的放大、 縮小及旋轉(zhuǎn)可以直接通過觸摸屏的手勢(shì)進(jìn)行操作, 這可以在Unity 3D中通過Finger Gestures插件實(shí)現(xiàn). 首先導(dǎo)入Finger Gestures手勢(shì)識(shí)別的插件包, 將插件包中的預(yù)設(shè)體Finger Gestures添加到場(chǎng)景, 并添加監(jiān)聽器. 然后在OnPinch事件中能獲取兩個(gè)手指張開或收縮時(shí)的路徑, 并通過該路徑放大或縮小物體的尺寸. 最后在OnTwist事件中能獲取最近一次角度的變化, 通過該變化調(diào)節(jié)物體的旋轉(zhuǎn)角度. 通常雙指張開代表放大操作, 雙指收縮代表了縮小操作, 拖住移動(dòng)代表旋轉(zhuǎn)操作.
模型能通過點(diǎn)擊屏幕等方式進(jìn)行一定的交互, 因此模型需要帶有動(dòng)作, 若模型不帶有動(dòng)作則無法進(jìn)行動(dòng)作類的交互. 當(dāng)選擇了一套具有動(dòng)作的模型后, 配合Unity 3D中自帶的Animatior(動(dòng)畫系統(tǒng)), 對(duì)模型的動(dòng)作進(jìn)行管理. Animation是舊版的動(dòng)畫狀態(tài)機(jī), Animator是新版的動(dòng)畫狀態(tài)機(jī). Animator是把Animation統(tǒng)一管理和邏輯狀態(tài)管理的組件, 可以更方便進(jìn)行圖形化狀態(tài)管理. 本系統(tǒng)的動(dòng)畫狀態(tài)機(jī)如圖7所示.
圖7 動(dòng)畫狀態(tài)機(jī)狀態(tài)機(jī)
將交互的每一個(gè)動(dòng)作與相關(guān)條件進(jìn)行綁定, 通過編寫腳本就能進(jìn)行動(dòng)作交互. 本作品為角色添加兩組動(dòng)作: stand和attack動(dòng)作, 并添加一個(gè)狀態(tài)變量attack_fal, 其初始值為false, 當(dāng)系統(tǒng)發(fā)現(xiàn)識(shí)別圖時(shí), 角色直接進(jìn)入stand狀態(tài). 只有當(dāng)attack_fal值由false變?yōu)閠rue時(shí), 角色動(dòng)作將由attack轉(zhuǎn)為stand; 當(dāng)attack_fal值由true變?yōu)閒alse時(shí), 角色動(dòng)作將由attack狀態(tài)轉(zhuǎn)為stand狀態(tài). 在腳本中設(shè)置, 當(dāng)監(jiān)聽到點(diǎn)擊屏幕事件時(shí), attack_fal=true, 使角色由stand狀態(tài)進(jìn)入attack狀態(tài). 當(dāng)運(yùn)行完attack狀態(tài)后, 腳本設(shè)置attack_fal=false, 使角色由attack狀態(tài)轉(zhuǎn)為stand狀態(tài). attack動(dòng)作圖如圖8所示.
圖8 attack動(dòng)作圖
當(dāng)系統(tǒng)所有功能都能實(shí)現(xiàn)以后, 進(jìn)入Preferences的External Tools中, 添加Android的SDK和JDK信息. 然后在Build Settings中選擇需要打包的場(chǎng)景信息, 并在Platform中選擇Android系統(tǒng). 之后在Android API Level 中選擇Android的版本. 最后在player settings中設(shè)置Company Name、 Product Name與Bundle Identifier之后確認(rèn), 并創(chuàng)建apk安裝包.
在Android手機(jī)端安裝打包好的命名為AR_TEST.APK的安裝包, 安裝完后打開該應(yīng)用, 將攝像頭對(duì)準(zhǔn)識(shí)別圖, 識(shí)別圖上將出現(xiàn)設(shè)置好的虛擬人物模型. 然后對(duì)該虛擬人物進(jìn)行縮放、 旋轉(zhuǎn)、 點(diǎn)擊等操作, 都能實(shí)現(xiàn)相應(yīng)的功能.
選擇時(shí)下比較主流的基于安卓系統(tǒng)手機(jī)品牌, 包括華為、 小米、 三星和魅族進(jìn)行測(cè)試. 測(cè)試包括: 是否能正常進(jìn)入應(yīng)用; 打開AR攝像頭, 是否會(huì)閃退; 是否能對(duì)圖片進(jìn)行識(shí)別、 交互功能是否能夠?qū)崿F(xiàn); 是否能夠?qū)崿F(xiàn)縮放、 旋轉(zhuǎn)、 交互等功能. 測(cè)試結(jié)果如表1所示.
表1 Vuforia應(yīng)用系統(tǒng)測(cè)試一覽表
本設(shè)計(jì)通過Unity 3D游戲引擎配合高通Vuforia插件, 采用C#編寫應(yīng)用腳本, 設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)能夠識(shí)別特定識(shí)別圖, 并出現(xiàn)相應(yīng)的角色模型的增強(qiáng)現(xiàn)實(shí)效果的系統(tǒng). 其使用Finger Gestures插件實(shí)現(xiàn)相應(yīng)角色的放大、 縮小、 旋轉(zhuǎn)等功能, 可以通過Unity 3D自帶的動(dòng)畫狀態(tài)機(jī)實(shí)現(xiàn)角色的簡(jiǎn)單控制, 并在基于安卓系統(tǒng)的多個(gè)手機(jī)操作系統(tǒng)下測(cè)試成功. 由于研究時(shí)間和現(xiàn)階段技術(shù)問題應(yīng)用還存在以下缺陷: 由于系統(tǒng)需要與Vuforia服務(wù)端進(jìn)行連接, 因此需要進(jìn)行聯(lián)網(wǎng), 在沒有網(wǎng)絡(luò)的情況下無法實(shí)現(xiàn)增強(qiáng)現(xiàn)實(shí)的實(shí)現(xiàn)過程.
基于手機(jī)端的AR技術(shù)攜帶便利, 研發(fā)成本不高, 實(shí)現(xiàn)起來較為簡(jiǎn)便, 相對(duì)于眼鏡設(shè)備來講更容易普及. 隨著技術(shù)的提升, 近年來也出現(xiàn)了一些熱門的AR應(yīng)用, 如Pokémon Go、 Zoo Kazam、 Google Translate等. 除了高通的Vuforia平臺(tái), 其他各大平臺(tái)也不斷推出了各自的AR方面的SDK, 如Google公司的ARCore、 蘋果公司的ARKit、 國(guó)內(nèi)的視+AR開放平臺(tái). 隨著科技的發(fā)展, 增強(qiáng)現(xiàn)實(shí)技術(shù)在未來會(huì)應(yīng)用到更多領(lǐng)域.