楊 路
(1.安徽省公安教育研究院(安徽公安學(xué)院籌備處),安徽 合肥230031;2.南京工業(yè)大學(xué)機(jī)械與動力工程學(xué)院,江蘇 南京211816)
網(wǎng)站是高校信息化建設(shè)的窗口,當(dāng)前的使用集中在校內(nèi)師生群體,來自其他用戶的比率較低。主要原因包括:(1)富媒體建設(shè)不足,富媒體是一種信息傳播方式,具備圖片、文本等多種信息資源和沉浸式感知體驗(yàn)。當(dāng)前高校網(wǎng)站以二維平面資源為主,缺乏生動性和沉浸式的體驗(yàn)[1]。(2)網(wǎng)站設(shè)計(jì)大同小異,尤其缺乏交互功能,對用戶的吸引力不足[2]。如何使網(wǎng)站資源以最有效的形式展示給用戶、讓用戶沉浸其中、吸引更多用戶訪問以提高使用率,進(jìn)而提升知名度,對高校未來的信息化建設(shè)具有重要的指導(dǎo)意義。
應(yīng)對上述問題,一是提高網(wǎng)站的吸引度,利用盡可能豐富的媒介傳遞信息。二是提高網(wǎng)站的互動性,賦予用戶對信息流的控制權(quán)。增強(qiáng)現(xiàn)實(shí)(Augmented Reality,簡稱AR)是一種借助虛擬空間包含的信息強(qiáng)化對現(xiàn)實(shí)場景感知的技術(shù)?;谠鰪?qiáng)現(xiàn)實(shí)技術(shù)設(shè)計(jì)了圖片識別和平面識別兩種應(yīng)用,包括三個部分:(1)用于顯示的虛擬空間,一般以預(yù)設(shè)件prefab的格式設(shè)計(jì)。(2)實(shí)現(xiàn)平面識別、圖片識別和物體識別的功能腳本。攝像頭掃描到標(biāo)識物,以三維虛實(shí)融合的形式顯示包含多種資源的虛擬空間,物體識別可識別攝像頭數(shù)據(jù)中的校園建筑。(3)提供自然交互功能的腳本,采用符合人的使用習(xí)慣的命令交互方式。設(shè)計(jì)完成后導(dǎo)出安裝包,安裝并啟動應(yīng)用開啟攝像頭,攝像頭掃描到平面標(biāo)識物顯示包含學(xué)院建筑模型和介紹視頻的虛擬空間,吸引用戶去瀏覽網(wǎng)站。掃描到圖片標(biāo)識物顯示包含學(xué)院信息的虛擬空間,可與虛擬對象進(jìn)行交互。如果掃描到的圖像中包含校園建筑,則識別顯示建筑名稱。
包括軟件設(shè)計(jì)環(huán)境和硬件測試環(huán)境。軟件設(shè)計(jì)環(huán)境用于設(shè)計(jì)虛擬空間和編寫功能腳本。Unity3D(2019)是一款常用的虛擬空間集成設(shè)計(jì)環(huán)境,功能腳本采用C#編寫。ARFoundation是Unity3D構(gòu)建的AR開發(fā)包,不需要導(dǎo)入別的插件,所以采用Unity3D+ARFoundation設(shè)計(jì)圖片識別應(yīng)用。Tensor FlowSharp是Google公司開發(fā)的機(jī)器學(xué)習(xí)系統(tǒng)Tensor Flow對C#接口的封裝,因?yàn)閁nity3D采用C#編寫腳本,所以采用Tensor-FlowSharp實(shí)現(xiàn)物體識別功能??紤]到AR開發(fā)包ARCore也是Google的產(chǎn)品,所以采用Unity3D+ARCore+Tensor Flow Sharp設(shè)計(jì)平面識別應(yīng)用[3-4]。硬件測試環(huán)境用于運(yùn)行應(yīng)用測試效果,采用android智能手機(jī)作為硬件測試環(huán)境。
如圖1(a)所示,圖片識別應(yīng)用設(shè)計(jì)包括4個步驟:(1)新建Unity3D工程。配置player settings參數(shù),取消多線程渲染,刪除vulkan。minimum api level選擇android7.0’nougat’及以上,target api level必須高于nougat,xr settings選擇arcore supported。配置external tools參數(shù)確保jdk和android sdk路徑正確。(2)在工程的assets文件夾建立prefabs、scripts等資源管理文件夾,導(dǎo)入ARFoundation插件。(3)新建場景,刪除默認(rèn)的main camera,導(dǎo)入ar session和ar session origin。(4)制作顯示用虛擬空間,編寫基于C#的圖片識別、命令交互的功能腳本,完成設(shè)計(jì)。如圖1(b)所示,平面識別應(yīng)用設(shè)計(jì)包括4個步驟:(1)新建Unity3D工程,配置參數(shù)同圖片識別,不再贅述。(2)在工程的assets文件夾建立prefabs、scripts等資源管理文件夾,導(dǎo)入arcore-unitysdk插件。(3)新建場景,刪除默認(rèn)的main camera和directional light,添加ARCore device、environmental light和event system。(4)制作顯示用虛擬空間,編寫基于C#的平面識別、物體識別和命令交互的功能腳本[5-6],完成設(shè)計(jì)。
圖1 應(yīng)用設(shè)計(jì)流程圖
3.1.1 虛擬空間
虛擬空間包含文本、圖片、按鍵、模型、音視頻等多種對象,前三者通過UGUI提供的text、image和button控件實(shí)現(xiàn)。模型可導(dǎo)入已經(jīng)制作好的,或通過3DMAX等軟件自行制作。音頻采用Audio Source組件實(shí)現(xiàn),創(chuàng)建空白對象AUDIO,選中AUDIO添加Audio Source組件,該組件的AudioClip參數(shù)用于選擇要播放的音頻文件。音頻文件設(shè)置為2D sound格式,Audio Listener設(shè)置為ARFoundation提供的AR camera即可。視頻用到VideoPlayer組件,創(chuàng)建空白對象VIDEO并掛載VideoPlayer組件,通過Video Clip參數(shù)選擇要播放的視頻文件。把上述虛擬對象根據(jù)顯示需要布置好在空間中的位置,然后作為一個整體拖到prefabs文件夾下,完成prefab格式的虛擬空間設(shè)計(jì)。
3.1.2 圖片識別
ARFoundation的圖片識別是依據(jù)參考圖像庫的信息實(shí)現(xiàn)的,首先通過reference image library建立參考圖像庫,命名imageref。點(diǎn)擊imageref的add image添加要識別的圖片。選中ar session origin掛載ar tracked image manager組件,把圖像庫imageref賦值給reference library屬性,把要顯示的虛擬空間賦值給tracked image prefab即可。ar tracked image manager組件在運(yùn)行時只能設(shè)置一個tracked image prefab,不管識別幾個圖片,顯示的都是同一個虛擬空間,限制了應(yīng)用功能。采用手動方法進(jìn)行虛擬空間的實(shí)例化操作解決該問題,把要顯示的虛擬空間放置在resources文件夾中,通過動態(tài)加載模型的方式賦值,圖像庫名稱要與設(shè)置好的圖像庫名稱一致即可。
3.1.3 命令交互
命令交互提供了用戶與虛擬空間包含對象的交互操作,包括單點(diǎn)觸摸類和雙點(diǎn)位移類。觸摸類如觸摸button控件播放視頻,位移類如縮放模型,采用Unity3D內(nèi)置的touch結(jié)構(gòu)體與touchphase枚舉類自定義編程實(shí)現(xiàn)。流程如下:首先通過input.touchcount得到觸點(diǎn)個數(shù),如果等于1表示是觸摸類操作,那么再根據(jù)觸摸對象的名稱判斷要控制的是視頻、文本還是音頻。以視頻播放為例,編寫playvideo腳本定義VideoPlayer變量control_video,通過find方法根據(jù)名稱找到要播放的視頻文件并賦值給control_video。選中視頻播放的button控件,給onclick事件綁定control_video的play方法,然后把playvideo腳本掛載到ar session origin上。當(dāng)用戶單點(diǎn)觸摸視頻播放的button控件觸發(fā)play方法,實(shí)現(xiàn)視頻播放功能,其他操作同理。如果觸點(diǎn)個數(shù)等于2表明在執(zhí)行縮放類操作,定義了表示上次兩個觸摸點(diǎn)的間距變量Length1和當(dāng)前兩個觸摸點(diǎn)的間距變量Length2,調(diào)用isEnlarge方法判斷是放大還是縮小操作,如果Length1大于Length2那么就執(zhí)行縮小操作,反之執(zhí)行放大操作。
3.2.1 平面識別
平面識別包括三個步驟,(1)制作虛擬平面和虛擬空間。新建一個平面showplane,應(yīng)用紋理后掛載渲染腳本detected plane visualizer,最后把showplane放置到prefabs文件夾中,完成prefab格式的虛擬平面制作。虛擬空間的制作如3.1.1節(jié)所述,這里不再贅述。(2)可視化虛擬平面。編寫平面識別腳本,定義變量showplaneprefab和兩個List變 量allplanes與newplanes,showplaneprefab保存要可視化的虛擬平面,把sessions中標(biāo)記為new的新檢測平面保存到newplanes變量,根據(jù)新檢測平面?zhèn)€數(shù)進(jìn)行實(shí)例化和顯示,并把所有檢測到的平面保存到allplanes變量中。在Hierarchy窗口新建對象controller掛載平面識別腳本并把第一步制作的showplane作為參數(shù)賦值給平面識別腳本的showplaneprefab參數(shù)。(3)可視化虛擬空間。采用raycast射線檢測的方法確認(rèn)虛擬空間的顯示位置,如果發(fā)生了碰撞就在離射線最近的位置實(shí)例化虛擬空間。在Hierarchy窗口選中controller,把用于顯示的虛擬空間和first person camera作為參數(shù)賦給腳本的showspaceprefab和arcamera參數(shù),當(dāng)攝像頭識別到平面就顯示設(shè)置好的虛擬空間。
3.2.2 物體識別
應(yīng)用Tensor FlowSharp實(shí)現(xiàn)物體識別功能的步驟如下:(1)導(dǎo)入Tensor Flow plugin(0.3)插件。(2)在scripts文件夾下編寫detectimage和getcamera腳本。detectimage腳本調(diào)用Tensor Flow實(shí)現(xiàn)detectimage圖像導(dǎo)入方法和detectobject物體識別方法。getcamera腳本實(shí)現(xiàn)detectimgcheck物體識別方法,首先對攝像頭獲取的圖像信息進(jìn)行預(yù)處理,判斷是否是鏡像、發(fā)生旋轉(zhuǎn)等。然后調(diào)整圖像,連同標(biāo)簽和訓(xùn)練模型一起傳遞給detectimage腳本的detectimage和detectobject方法。最后采用Task異步調(diào)用和InvokeRepeating延遲方式執(zhí)行detectimgcheck方法,調(diào)用detectobject方法在攝像頭圖像上識別校園建筑并繪制矩形框。(3)配置屬性,采用ssd_mobilenet_v1_android_export(訓(xùn)練模型)和coco_labels_list(標(biāo)簽)。最后把getcamera腳本掛載到場景攝像機(jī)下,把ssd_mobilenet_v1_android_export和coco_labels_list作為參數(shù)賦值給getcamera腳本,完成功能設(shè)計(jì)。
基于Unity3D+ARFoundation設(shè)計(jì)了圖片識別應(yīng)用,掃描到圖片以虛擬融合的方式顯示虛擬空間,如圖2(a)所示。用戶可進(jìn)行交互,如觸摸“校園特色”button控件顯示相關(guān)內(nèi)容,如圖2(b)所示。基于Unity3D+ARCore+Tensor FlowSharp設(shè)計(jì)了平面識別應(yīng)用,攝像頭掃描到平面如桌面顯示學(xué)院的介紹視頻,如圖3(a)所示。用戶可觸摸button控件播放視頻,讓用戶對學(xué)院有一個初步的了解,進(jìn)而吸引用戶去訪問網(wǎng)站乃至校園。如果攝像頭掃描的圖像包含校園建筑,則識別并顯示建筑名稱,如圖3(b)所示,幫助用戶更好的了解學(xué)院情況。針對高校信息化建設(shè)的現(xiàn)狀,將增強(qiáng)現(xiàn)實(shí)和機(jī)器學(xué)習(xí)應(yīng)用到網(wǎng)站設(shè)計(jì)中。以三維虛實(shí)融合的形式帶給使用者沉浸式的感知體驗(yàn)。用戶可以手姿方式按需訪問,激發(fā)了訪問網(wǎng)站的興趣和主動性。研究豐富了高校信息化建設(shè)的方法,對高校未來的信息化建設(shè)具備一定的指導(dǎo)意義。
圖3 平面識別應(yīng)用效果圖