程鋒,魏東華,陳詩源
(廣州新華學(xué)院,廣東廣州 510310)
如今,移動(dòng)端已然成為日常網(wǎng)絡(luò)獲取信息的重要渠道。然而市面上缺少中藥材科普類App,而且中藥材的展現(xiàn)形式以圖片形式居多,中藥材知識(shí)推廣傳播的方式較為單一。
本項(xiàng)目針對(duì)上述問題,將AR 技術(shù)應(yīng)用于中藥材識(shí)別與實(shí)時(shí)建模系統(tǒng)的研發(fā)。中藥材識(shí)別與實(shí)時(shí)建模系統(tǒng)構(gòu)建與真實(shí)藥材標(biāo)本相似的三維數(shù)字模型,能直觀、立體地展現(xiàn)出中藥材的形狀、顏色、紋理等特征,實(shí)現(xiàn)中藥材的數(shù)字化表達(dá)。中藥材識(shí)別與實(shí)時(shí)建模系統(tǒng)具有完備的中藥材體系和多功能的科普教學(xué)功能體系,擴(kuò)大了中藥材的展示空間。該系統(tǒng)提高了中藥材學(xué)習(xí)的真實(shí)性和趣味性,真正將中藥材知識(shí)科普,中藥材圖像識(shí)別,模型AR展示等功能集于一體[1]。本文以Android 為平臺(tái),使用Unity3D 引擎,結(jié)合Easy AR SDK 設(shè)計(jì)了一款中藥材識(shí)別與實(shí)時(shí)建模系統(tǒng),學(xué)員可通過Android手機(jī)掃描中藥材圖片即可實(shí)時(shí)呈現(xiàn)中藥材模型。
Unity 引擎使用C#作為主要編程語言,通過提供大量的API和工具,使得開發(fā)人員可以輕松地創(chuàng)建和管理對(duì)象、設(shè)計(jì)和布置場(chǎng)景、添加光照效果、處理動(dòng)畫等。Unity 的多平臺(tái)支持和廣泛的插件生態(tài)系統(tǒng)為開發(fā)者提供了極大的靈活性和可定制性。
Easy AR 是一種基于計(jì)算機(jī)視覺的增強(qiáng)現(xiàn)實(shí)技術(shù),它采用SLAM 算法進(jìn)行圖像識(shí)別和跟蹤,實(shí)現(xiàn)了AR 場(chǎng)景的定位、構(gòu)建和跟蹤,為AR 應(yīng)用的開發(fā)提供了高效且穩(wěn)定的解決方案。Easy AR還提供了豐富的開發(fā)工具和API,包括Easy AR SDK、Easy AR Engine和Easy AR Studio等,支持多種開發(fā)語言和平臺(tái)。
本項(xiàng)目的框架設(shè)計(jì)有圖像識(shí)別模塊、虛實(shí)構(gòu)建模塊、人機(jī)交互模塊、數(shù)據(jù)庫應(yīng)用和項(xiàng)目?jī)?yōu)化等,如圖1系統(tǒng)設(shè)計(jì)所示。
圖1 系統(tǒng)設(shè)計(jì)
基于Easy AR 開發(fā)圖像識(shí)別模塊。Easy AR Sense Unity Plugin 提供Easy AR Sense 功能在Unity 中的封裝。本項(xiàng)目運(yùn)用Easy AR 運(yùn)動(dòng)跟蹤技術(shù)(Motion Tracking)和Easy AR 平面圖像跟蹤技術(shù)(Planar Image Tracking)進(jìn)行AR圖像識(shí)別和AR平面跟蹤[2]。
虛擬信息在真實(shí)場(chǎng)景中的位置以及虛擬對(duì)象和真實(shí)場(chǎng)景的配準(zhǔn),需要通過確定攝像機(jī)的內(nèi)外參數(shù)完成對(duì)攝像機(jī)的標(biāo)定,其中包括中藥材模型的構(gòu)建,Shader 著色器的應(yīng)用以及模型材質(zhì)貼圖和燈光渲染等。
用戶可通過在移動(dòng)端屏幕上單指點(diǎn)擊、移動(dòng)或者雙指縮放的形式,實(shí)現(xiàn)中藥材模型的放大、縮小及旋轉(zhuǎn)等操作,可以細(xì)致地觀察中藥材模型紋理。UI界面設(shè)計(jì)采用典雅黑與金色主題,映襯中藥材的文化歷史悠久,傳承歷久彌新。
2.4.1 腳本優(yōu)化
本項(xiàng)目中參考了設(shè)計(jì)模式中的工廠模式,將功能模塊與交互模塊的腳本分離開來,初步實(shí)現(xiàn)了設(shè)計(jì)模式的高內(nèi)聚、低耦合思想,方便將來代碼的維護(hù)與重構(gòu)。
2.4.2 內(nèi)存優(yōu)化
本項(xiàng)目中還對(duì)一些基于粒子系統(tǒng)的特效采用了對(duì)象池管理的技術(shù),當(dāng)不需要時(shí)就隱藏而不是銷毀,再次需要時(shí)就顯示,這樣可以有效減少系統(tǒng)因?qū)嵗馁M(fèi)的內(nèi)存資源。
系統(tǒng)用例如圖2 所示,中藥材識(shí)別與實(shí)時(shí)建模系統(tǒng)主要功能為藥材庫及AR識(shí)別,用戶通過點(diǎn)擊按鈕,實(shí)現(xiàn)對(duì)應(yīng)的系統(tǒng)功能,進(jìn)入沉浸式學(xué)習(xí)模式。
圖2 系統(tǒng)用例圖
首先,需要從官網(wǎng)中注冊(cè)開發(fā)者賬號(hào),然后在開發(fā)板塊中創(chuàng)建應(yīng)用,填寫應(yīng)用名與包名,就會(huì)創(chuàng)建出對(duì)應(yīng)的License Key 了。下載Easy AR SDK for Unity,導(dǎo)入U(xiǎn)nity。在Unity 工程文件夾中,會(huì)有一個(gè)Easy AR 的文件夾與一個(gè)plugins 的文件夾,plugins 里都是一些Easy AR 封裝好的代碼,在U3D 中主要使用Easy AR 文件夾下面的Prefabs 腳本。在場(chǎng)景中拖入Easy AR_Startup 預(yù)制體,這個(gè)物體上面有需要填寫的License Key。因?yàn)樵擃A(yù)制體下有攝像頭,所以把場(chǎng)景原來的MainCamere刪掉[3]。
創(chuàng)建工程之后,下一步就需要將每個(gè)中藥材的識(shí)別圖像和中藥材模型與預(yù)先創(chuàng)建的ImageTarget 組件進(jìn)行關(guān)聯(lián)。具體流程包括以下步驟:1)將中藥材識(shí)別圖像復(fù)制到StreamingAsset 和Texture 目錄下;2)為每個(gè)ImageTarget 組件創(chuàng)建對(duì)應(yīng)的渲染材質(zhì)球Materials;3) 在Hierarchy 面板中單擊各個(gè)ImageTarget 組件,打開屬性設(shè)置面板,并在Transform 屬性欄下設(shè)置位置、旋轉(zhuǎn)和縮放比例等屬性值,以確保中藥材模型與識(shí)別圖像在空間中不會(huì)重疊;在Materials 屬性欄中選取Materials 目錄下已經(jīng)建好的對(duì)應(yīng)材質(zhì)球,并將其設(shè)置為Element的值。
圖3 Image Target組件屬性設(shè)置面板
4)在腳本屬性區(qū)分別設(shè)置Path 的值為對(duì)應(yīng)中藥材識(shí)別圖Storage 的值需要設(shè)為: Assets,需要建立StreamingAsset 的對(duì)應(yīng)關(guān)系目錄,對(duì)應(yīng)的Path 路徑是StreamingAssets文件夾下的路徑。把識(shí)別圖拖到該文件夾下,假設(shè)圖片名字為“靈芝.jpg”,則Path為“靈芝.jpg”。
Easy AR 圖像識(shí)別模塊的整體流程如圖4 所示,Easy AR 提供一個(gè)靈活的target 管理接口,可以在運(yùn)行時(shí)生成Easy AR 的target,Easy AR 通過兩個(gè)步驟來管理target。ImageTarget 表示平面圖像的target,它可以被ImageTracker 跟蹤。ImageTarget 內(nèi)的數(shù)值在可以被讀取之前,需要首先通過create/setupAll 等方法填入。然后再通過ImageTracker.loadTarget 成功載入ImageTracker 之后,可被ImageTracker 檢測(cè)和跟蹤。ObjectTarget 表示3D object target,它可以被Object-Tracker 跟蹤。ObjectTarget內(nèi)的數(shù)值在可以被讀取之前,需要首先通過setupAll 方法載入,然后再Object-Tracker.loadTarget 成功載入ObjectTracker 之后,可以被ObjectTracker檢測(cè)和跟蹤[4]。
圖4 Easy AR應(yīng)用
當(dāng)完成App 的UI 界面交互功能及中藥材識(shí)別與實(shí)時(shí)建模系統(tǒng),需要將該項(xiàng)目打包apk 并導(dǎo)出到移動(dòng)端使用。使用Unity2019 及以上版本,可以在Unity Hub 下載發(fā)布Android 平臺(tái)的SDK 和JDK 工具包,構(gòu)建好編譯環(huán)境之后開始編譯。
圖5~圖9 為App 部分功能模塊界面截圖,該系統(tǒng)已實(shí)現(xiàn)其主要功能。
圖5 首頁
圖6 藥材庫
圖7 AR識(shí)別
圖8 科普界面
圖9 答題界面
本實(shí)驗(yàn)使用Unity3D 發(fā)布Android 平臺(tái)生成APK安裝包,使用Android 系統(tǒng)的手機(jī)進(jìn)行運(yùn)行測(cè)試,如表1所示,兩種具體的運(yùn)行環(huán)境軟硬件配置。
表1 環(huán)境配置
測(cè)試系統(tǒng)主要的功能,測(cè)試流程詳見表2。
表2 測(cè)試用例
以Android 手機(jī)為硬件平臺(tái),結(jié)合Easy AR 的圖像識(shí)別功能,在Unity3D 平臺(tái)設(shè)計(jì)了一款中藥材識(shí)別與實(shí)時(shí)建模系統(tǒng),該系統(tǒng)不受時(shí)間、地點(diǎn)、空間的限制,學(xué)員通過Android 手機(jī)掃描中藥材圖片,就可實(shí)時(shí)調(diào)整畫面三維視角,便可實(shí)時(shí)呈現(xiàn)該藥材的模型,并獲取該藥材的科普內(nèi)容,進(jìn)入浸入式學(xué)習(xí),使中藥材文化的傳播與推廣形式更加多樣化,然而該系統(tǒng)仍存在一些問題:伴隨著中藥材識(shí)別圖數(shù)量的增加,對(duì)運(yùn)行App 的手機(jī)的內(nèi)存有一定的要求。針對(duì)此問題可以考慮使用Easy AR云識(shí)別功能加以改進(jìn)。