• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      陳先宇

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

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

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

      將QR 碼作為增強現(xiàn)實系統(tǒng)的初始研究標(biāo)志,是因為它在不同的移動平臺上有相關(guān)的實現(xiàn)。[5]QR碼提供兩個重要特征:

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

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

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

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

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

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

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

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

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

      圖2 客戶端運行周期

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

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

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

      (1)模塊和線程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      當(dāng)客戶端解碼QR 碼后,獲取了內(nèi)容ID,應(yīng)用程序檢查這些內(nèi)容是否在本地可以找到。為了實現(xiàn)這一功能,設(shè)計了一個固定的文件夾格式,將所有內(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è)計內(nèi)容高速緩存的原因是從內(nèi)存中載入內(nèi)容比從服務(wù)器下載快得多。就圖像或動畫來說,處理過程幾乎是實時的;但視頻的載入需要更多的時間,獲取視頻文件所需的緩存機制也需要高速緩存,當(dāng)整個視頻文件過大時,是無法完全載入到內(nèi)存中的。如果沒有高速緩存,就無法快速加載視頻,實現(xiàn)不了實時視頻流。

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

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

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

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

      while (app 在前臺){

      從攝像機緩存中復(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)容進行相應(yīng)的透視變換

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

      }

      對于無聲動畫,本系統(tǒng)采用GIF 格式,將圖像幀與主執(zhí)行線程同步。因為不需要所有幀都被處理或者顯示,所以加快了處理速度。

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

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

      用戶界面包括兩個activities:

      (1)Main Activity

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

      (2)Settings Activity

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

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

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

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

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

      4 結(jié)語

      基于QR 碼的增強現(xiàn)實系統(tǒng)旨在成為一個通用的增強現(xiàn)實應(yīng)用程序,可以用在任何場景,將豐富和動態(tài)的內(nèi)容覆蓋到場景中的QR 碼。系統(tǒng)通過平面檢測,得到透視變換矩陣,來計算并呈現(xiàn)最終的圖像,讓它們看起來像是周圍環(huán)境的一部分??蛻舳说募軜?gòu)基于管道結(jié)構(gòu),目的是最小化負責(zé)在設(shè)備屏幕上顯示圖像的模塊的延遲。每個模塊在自己的線程中運行,從上一級緩存獲取輸入數(shù)據(jù),然后將輸出數(shù)據(jù)寫入下一級緩存。這很好地匹配了Android 應(yīng)用設(shè)計模式,負責(zé)顯示攝像頭預(yù)覽的主UI線程不會被延遲。另外,系統(tǒng)提供了一個內(nèi)容高速緩存的機制,來提高屏幕顯示增強現(xiàn)實內(nèi)容的速度。本系統(tǒng)達到了虛擬與現(xiàn)實相結(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]史曉琳,邊耐政. 手機增強現(xiàn)實室內(nèi)向?qū)У难芯颗c實現(xiàn)[J]. 計算機應(yīng)用與軟件,2013,30(2):320-323.

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

      [4]幸國王. 基于Android 平臺的移動增強現(xiàn)實技術(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)用程序客戶端
      刪除Win10中自帶的應(yīng)用程序
      電腦報(2019年12期)2019-09-10 05:08:20
      縣級臺在突發(fā)事件報道中如何應(yīng)用手機客戶端
      傳媒評論(2018年4期)2018-06-27 08:20:24
      孵化垂直頻道:新聞客戶端新策略
      傳媒評論(2018年4期)2018-06-27 08:20:16
      基于Vanconnect的智能家居瘦客戶端的設(shè)計與實現(xiàn)
      電子測試(2018年10期)2018-06-26 05:53:34
      淺談linux多線程協(xié)作
      客戶端空間數(shù)據(jù)緩存策略
      Linux線程實現(xiàn)技術(shù)研究
      關(guān)閉應(yīng)用程序更新提醒
      電腦迷(2012年15期)2012-04-29 17:09:47
      么移動中間件線程池并發(fā)機制優(yōu)化改進
      三星電子將開設(shè)應(yīng)用程序下載商店
      林州市| 余庆县| 金秀| 高邑县| 临猗县| 巫山县| 姜堰市| 高淳县| 宜阳县| 西宁市| 富蕴县| 顺义区| 德惠市| 庆安县| 绥滨县| 乾安县| 甘南县| 启东市| 依兰县| 隆化县| 顺义区| 湛江市| 偏关县| 博乐市| 六枝特区| 太白县| 石屏县| 夏津县| 嘉善县| 隆尧县| 张掖市| 华蓥市| 镇平县| 安阳县| 洛隆县| 宝应县| 称多县| 新乡县| 保康县| 呼玛县| 海宁市|