国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于QR 碼的智能手機(jī)增強(qiáng)現(xiàn)實(shí)系統(tǒng)設(shè)計(jì)

2015-01-13 10:18陳先宇
宜春學(xué)院學(xué)報(bào) 2015年3期
關(guān)鍵詞:線程應(yīng)用程序客戶端

陳先宇

(重慶交通大學(xué),重慶 400074)

近年來,有大量關(guān)于增強(qiáng)現(xiàn)實(shí)技術(shù)的研究,并且將該技術(shù)應(yīng)用于各種設(shè)備上的開發(fā),如頭戴式顯示器、智能手機(jī)、專用的嵌入式設(shè)備等。[1-3]增強(qiáng)現(xiàn)實(shí)技術(shù)可以用來探索周邊環(huán)境、游戲或者導(dǎo)航。[4]無論何種目的,開發(fā)者的目標(biāo)都是提供一個豐富的體驗(yàn),盡可能地接近于真實(shí),但對于設(shè)備的資源來說承受很大壓力。通常情況下,這些設(shè)備尺寸小、重量輕、易攜帶。因?yàn)橹悄苁謾C(jī)是上述設(shè)備中能力最強(qiáng)的,也是最常用的,所以將智能手機(jī)作為應(yīng)用開發(fā)的載體。

研究更吸引人和內(nèi)容更豐富的推送信息給智能手機(jī)用戶的新方式,來代替?zhèn)鹘y(tǒng)的信息版面。一個帶有攝像頭的智能手機(jī)可以帶用戶進(jìn)入一個虛擬世界,例如,在一個博物館里,一張簡單的地圖可以疊加上一個描繪部隊(duì)行動的動畫,而圖片海報(bào)可以疊加上短視頻。

將QR 碼作為增強(qiáng)現(xiàn)實(shí)系統(tǒng)的初始研究標(biāo)志,是因?yàn)樗诓煌囊苿悠脚_上有相關(guān)的實(shí)現(xiàn)。[5]QR碼提供兩個重要特征:

(1)存儲壓縮信息,容量足夠大,可以實(shí)現(xiàn)一個客戶端-服務(wù)器系統(tǒng)來獲取信息;

(2)提供簡單的檢測平面的手段,即通過其邊角來進(jìn)行定位。

以Android 系統(tǒng)為例,提出一個基于QR 碼的智能手機(jī)增強(qiáng)現(xiàn)實(shí)系統(tǒng),它讓用戶可以在室外和室內(nèi)使用增強(qiáng)現(xiàn)實(shí)技術(shù),也可以顯示不同類型的內(nèi)容。

1 系統(tǒng)架構(gòu)

系統(tǒng)的基本要求就是在特殊的標(biāo)志上面覆蓋圖片、動畫或影片。例如當(dāng)人們游覽一個博物館時(shí),可以通過智能手機(jī)拍攝標(biāo)志,利用增強(qiáng)現(xiàn)實(shí)技術(shù)展示更吸引人、內(nèi)容更豐富的信息,豐富人們的感受。

系統(tǒng)使用QR 碼作為標(biāo)志來實(shí)現(xiàn)增強(qiáng)現(xiàn)實(shí)技術(shù),因?yàn)镼R 碼有如下優(yōu)點(diǎn):包含可以用來定義內(nèi)容的數(shù)據(jù)、包含關(guān)于標(biāo)志物理位置的數(shù)據(jù)。但是,QR 碼也存在如下缺點(diǎn):識別速度慢,有效識別的角度有限等。[5]不過,一般情況下,用戶使用手機(jī)拍攝QR 碼時(shí),不會與QR 碼保持太大的角度,因此有效識別角度有限這一缺點(diǎn)可以不予考慮。而QR 碼識別速度慢,但在現(xiàn)實(shí)應(yīng)用場景中,不要求用戶與虛擬信息進(jìn)行實(shí)時(shí)互動,所以識別速度慢的缺點(diǎn)也可以接受,而且在識別完當(dāng)前幀的QR 碼,會沿用上一幀的增強(qiáng)現(xiàn)實(shí)內(nèi)容,不會中斷顯示,對用戶來說顯示的內(nèi)容是連續(xù)的。

系統(tǒng)的架構(gòu)如圖1 所示,由一個客戶端和一個服務(wù)器組成,服務(wù)器的工作是存儲內(nèi)容、響應(yīng)客戶端下載內(nèi)容的請求和管理數(shù)據(jù)庫存在的內(nèi)容;客戶端接收內(nèi)容并將其在智能手機(jī)上顯示出來;服務(wù)器和客戶端間采用一定的通信協(xié)議進(jìn)行信息和數(shù)據(jù)交換。

圖1 增強(qiáng)現(xiàn)實(shí)系統(tǒng)架構(gòu)

客戶端應(yīng)用周期運(yùn)行如圖2 所示,那些步驟代表順序執(zhí)行的操作。

圖2 客戶端運(yùn)行周期

服務(wù)器的架構(gòu)則十分簡單,它包含一系列響應(yīng)客戶端請求的Java servlet 和足夠存儲所有內(nèi)容的空間。另外,使用一個Web 管理模塊,負(fù)責(zé)內(nèi)容的增加、刪除或修改。系統(tǒng)使用Google 公司提供云計(jì)算平臺——Google App Engine,作為集成的存儲系統(tǒng)。

2 系統(tǒng)設(shè)計(jì)

為了加快實(shí)際內(nèi)容的展示,充分利用設(shè)備的處理能力,設(shè)計(jì)了一系列模塊,模塊彼此之間獨(dú)立運(yùn)行。另外,為了確保內(nèi)容顯示模塊不會被其他進(jìn)程拖慢速度,使用管道編程模型。每個模塊讀取輸入緩存區(qū)的數(shù)據(jù),處理之后將數(shù)據(jù)寫入另一個緩存區(qū)給另一個模塊使用。例如,當(dāng)內(nèi)容下載模塊必須連接服務(wù)器并獲取內(nèi)容時(shí),其他模塊不需要等待,而是保持運(yùn)行狀態(tài),處理它們現(xiàn)有的數(shù)據(jù)。

(1)模塊和線程

系統(tǒng)將運(yùn)行過程整合成幾個獨(dú)立的模塊,這些模塊可以通過獨(dú)立的線程并行運(yùn)行。這樣一來,可以盡可能快地將需要顯示的內(nèi)容顯示在屏幕上。

系統(tǒng)的模塊如下:

(a)圖像獲取模塊:初始化攝像頭,獲取每一幀圖像;

(b)QR 碼識別模塊:搜索圖像幀中的QR碼,并將其解碼;

(c)平面檢測模塊:使用QR 碼的四個定位點(diǎn),計(jì)算透視變換矩陣;

(d)內(nèi)容獲取模塊:搜索設(shè)備內(nèi)存,獲取相應(yīng)內(nèi)容,搜索不到則連接服務(wù)器下載;

(e)內(nèi)容變換模塊:將需要顯示的內(nèi)容按照(c)模塊得出的透視變換矩陣進(jìn)行透視變換;

(f)內(nèi)容顯示模塊:將正確的增強(qiáng)現(xiàn)實(shí)效果,即(e)模塊變換后的內(nèi)容呈現(xiàn)在獲取的視頻幀上。

如圖2 所示,內(nèi)容變換模塊和內(nèi)容顯示模塊作為一個步驟,只要內(nèi)容變換模塊不提供新的輸出,內(nèi)容顯示模塊將一直呈現(xiàn)同一個圖像,這樣可以減小QR 碼識別速度慢的問題對顯示的影響。

圖3 為所有模塊的分層結(jié)構(gòu),更好地解釋數(shù)據(jù)的獨(dú)立性和所有模塊處理一組數(shù)據(jù)的順序。圖4 為應(yīng)用于之前定義的模塊中的管道編程模型,相鄰兩個模塊之間設(shè)置一個緩存區(qū),供兩者交換數(shù)據(jù),前者將其作為輸出地址,后者將其作為輸入源,采用管道編程模型后。

圖3 系統(tǒng)模塊的分層結(jié)構(gòu)

圖4 模塊間的管道編程模型

(2)內(nèi)容高速緩存機(jī)制

客戶端應(yīng)用程序?qū)⑺幸严螺d的內(nèi)容存儲到本地設(shè)備中,以便這些內(nèi)容可以再次載入顯示,并且不需再次連接服務(wù)器去獲取。

當(dāng)客戶端解碼QR 碼后,獲取了內(nèi)容ID,應(yīng)用程序檢查這些內(nèi)容是否在本地可以找到。為了實(shí)現(xiàn)這一功能,設(shè)計(jì)了一個固定的文件夾格式,將所有內(nèi)容存儲路徑設(shè)置為:/sdcard/ARinfo/ [ContentID],其中[ContentID]為內(nèi)容ID。如果某個內(nèi)容文件沒有被找到,那么應(yīng)用程序?qū)l(fā)送請求給服務(wù)器,下載相應(yīng)內(nèi)容。

本系統(tǒng)設(shè)計(jì)內(nèi)容高速緩存的原因是從內(nèi)存中載入內(nèi)容比從服務(wù)器下載快得多。就圖像或動畫來說,處理過程幾乎是實(shí)時(shí)的;但視頻的載入需要更多的時(shí)間,獲取視頻文件所需的緩存機(jī)制也需要高速緩存,當(dāng)整個視頻文件過大時(shí),是無法完全載入到內(nèi)存中的。如果沒有高速緩存,就無法快速加載視頻,實(shí)現(xiàn)不了實(shí)時(shí)視頻流。

(3)內(nèi)容存儲

永久的內(nèi)容存儲在服務(wù)器上實(shí)現(xiàn),系統(tǒng)使用Google App Engine API 提供的Datastore 和Blobstore。Blobstore 用來存儲實(shí)際內(nèi)容文件和它的索引;而所有其他元數(shù)據(jù)(如內(nèi)容ID)則存儲在Datastore。服務(wù)器的接口允許管理員輕松地通過客戶端添加內(nèi)容。

3 系統(tǒng)實(shí)現(xiàn)

系統(tǒng)使用兩個Java 庫確保應(yīng)用運(yùn)行得正確而快速:Open CV 和Zxing,Open CV 用來檢測平面,Zxing 用來讀取二維碼,客戶端執(zhí)行程序的偽代碼如下:

while (app 在前臺){

從攝像機(jī)緩存中復(fù)制視頻幀

使用Zxing 尋找視頻幀中的QR 碼if (QR 碼存在){

解碼服務(wù)器地址

解碼內(nèi)容ID

保存QR 碼的定位角信息

}

else

continue

if (內(nèi)容在內(nèi)部存儲器)

將內(nèi)容載入內(nèi)存

else {

從服務(wù)器下載內(nèi)容

將內(nèi)容載入內(nèi)存

}

使用QR 碼定位角信息檢測平面

將內(nèi)容進(jìn)行相應(yīng)的透視變換

顯示變換后的內(nèi)容

}

對于無聲動畫,本系統(tǒng)采用GIF 格式,將圖像幀與主執(zhí)行線程同步。因?yàn)椴恍枰袔急惶幚砘蛘唢@示,所以加快了處理速度。

對于音頻/視頻材料,本系統(tǒng)獲取視頻源的單個幀后,與音頻源同步,但是這樣一來,處理速度大大下降,以致圖像最終顯示中斷。為了顯示這些視頻,ffmpeg 庫的移植是必要的。本文使用Android Native Development Kit (原生開發(fā)工具包,簡稱NDK)對ffmpeg 庫進(jìn)行編譯,以便它可以在本文的Java 應(yīng)用程序使用。庫內(nèi)的C 代碼可以很容易地通過Java Native Interface (Java 本機(jī)接口,簡稱JNI)從Java 中調(diào)用。這個庫主要用于在特定的時(shí)間戳從視頻文件中提取單個幀。視頻文件的音頻流的渲染使用Android-specific MediaPlayer (針對Android 的媒體播放器),音頻通過使用相同的時(shí)間戳與視頻同步。

應(yīng)用程序的內(nèi)容類提供對所有可以顯示的文件類型的統(tǒng)一訪問。因此,無論處理一幅圖像、一個動畫或一段影片,都確保內(nèi)容變換模塊使用正確的圖像。對于視頻或動畫,主執(zhí)行線程負(fù)責(zé)調(diào)用nextFrame ()方法,發(fā)送信號到需要一個新圖象的內(nèi)容類。

用戶界面包括兩個activities:

(1)Main Activity

Main Activity 用來顯示攝像頭拍攝到的畫面,同時(shí)疊加上相應(yīng)的虛擬圖像。從操作系統(tǒng)而來的重要信息,如事件(當(dāng)應(yīng)用程序退到后臺或提到前臺),也在這接收。當(dāng)應(yīng)用程序啟動或者提到前臺時(shí),重要的操作被執(zhí)行,如啟動工作線程或獲取接入和初始化攝像頭。

(2)Settings Activity

Settings Activity 負(fù)責(zé)顯示配置選項(xiàng)。用戶可以選擇顯示內(nèi)容的語言,攝像頭分辨率,也可以選擇打開調(diào)試信息。這個activity 可以通過按下Settings按鈕來接入,允許用戶在較低性能的設(shè)備上降低分辨率,以提高內(nèi)容顯示的速度。

由于應(yīng)用程序依賴攝像頭提供的圖像,所以無法在沒有攝像頭的設(shè)備上運(yùn)行。應(yīng)用程序最重要的一個方面是操作系統(tǒng)執(zhí)行的方式,來確保攝像頭提供的預(yù)覽不受影響或延誤,在Android 操作系統(tǒng)中使用線程要遵循兩個重要的規(guī)則:

(1)管理用戶界面的主線程不允許因?yàn)殚L操作(long operations)而停滯。如果發(fā)生這樣的事情,用戶將被告知應(yīng)用程序需要一段很長時(shí)間來執(zhí)行,它可以決定它是否被停止或等待它恢復(fù)正常操作;

(2)任何屬于用戶界面的圖像元素只可以通過主線程獲取。

圖5 應(yīng)用程序截屏

4 結(jié)語

基于QR 碼的增強(qiáng)現(xiàn)實(shí)系統(tǒng)旨在成為一個通用的增強(qiáng)現(xiàn)實(shí)應(yīng)用程序,可以用在任何場景,將豐富和動態(tài)的內(nèi)容覆蓋到場景中的QR 碼。系統(tǒng)通過平面檢測,得到透視變換矩陣,來計(jì)算并呈現(xiàn)最終的圖像,讓它們看起來像是周圍環(huán)境的一部分??蛻舳说募軜?gòu)基于管道結(jié)構(gòu),目的是最小化負(fù)責(zé)在設(shè)備屏幕上顯示圖像的模塊的延遲。每個模塊在自己的線程中運(yùn)行,從上一級緩存獲取輸入數(shù)據(jù),然后將輸出數(shù)據(jù)寫入下一級緩存。這很好地匹配了Android 應(yīng)用設(shè)計(jì)模式,負(fù)責(zé)顯示攝像頭預(yù)覽的主UI線程不會被延遲。另外,系統(tǒng)提供了一個內(nèi)容高速緩存的機(jī)制,來提高屏幕顯示增強(qiáng)現(xiàn)實(shí)內(nèi)容的速度。本系統(tǒng)達(dá)到了虛擬與現(xiàn)實(shí)相結(jié)合的目的,增強(qiáng)了用戶體驗(yàn),具有一定的研究和實(shí)用價(jià)值。

[1]Hirokazu Kato,Mark Billinghurst.Marker tracking and hmd calibration for a video-based augmented reality conferencing system[C].San Francisco,Proceedings of the 2nd IEEE and ACM International Workshop on Augmented Reality,1999:85-94.

[2]史曉琳,邊耐政. 手機(jī)增強(qiáng)現(xiàn)實(shí)室內(nèi)向?qū)У难芯颗c實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用與軟件,2013,30(2):320-323.

[3]陳燦鑫. 移動增強(qiáng)現(xiàn)實(shí)中跟蹤注冊的關(guān)鍵技術(shù)研究[D]. 華南理工大學(xué),2013:1-4.

[4]幸國王. 基于Android 平臺的移動增強(qiáng)現(xiàn)實(shí)技術(shù)綜述[J]. 電子科學(xué)技術(shù),2014,01(02):206-211.

[5] MacRae,Duncan A.Introducing QR codes:linking print and digital content via smartphone[J].Neurosurgery,2011,68(4):854-855.

猜你喜歡
線程應(yīng)用程序客戶端
基于C#線程實(shí)驗(yàn)探究
基于國產(chǎn)化環(huán)境的線程池模型研究與實(shí)現(xiàn)
線程池調(diào)度對服務(wù)器性能影響的研究*
刪除Win10中自帶的應(yīng)用程序
如何看待傳統(tǒng)媒體新聞客戶端的“斷舍離”?
谷歌禁止加密貨幣應(yīng)用程序
縣級臺在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
孵化垂直頻道:新聞客戶端新策略
大樞紐 云平臺 客戶端——中央人民廣播電臺的探索之路
三星電子將開設(shè)應(yīng)用程序下載商店