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

?

基于Kinect的唐卡圖像交互設計與實現(xiàn)

2022-02-22 12:20:40馬玉娟劉曉靜
計算機技術與發(fā)展 2022年1期
關鍵詞:線框體感唐卡

馬玉娟,劉曉靜

(青海大學 計算機技術與應用系,青海 西寧 810016)

0 引 言

唐卡歷史悠久,是中國藏族優(yōu)秀傳統(tǒng)文化的一種繪畫藝術形式,其內容保羅萬象,包括西藏的文學藝術、藏醫(yī)藏藥等,展示了西藏地區(qū)的政治經(jīng)濟和人文環(huán)境,是人們了解西藏的有效途徑,被譽為“西藏的百科全書”。近年來,體感技術得到迅速發(fā)展。微軟的Kinect體感設備能夠實時捕捉人體動作、聲音等一系列信息,因其價格低廉、實用性強等特性深受研究者們的青睞,很多國內外研究人員都選擇在此平臺上進行開發(fā)和研究。2012年,Zhang詳細介紹了Kinect傳感器及其應用效果;2015年,Péter Fankhauser等評估了Kinect v2深度傳感器在移動機器人導航中的應用。目前,林玲等建立了軌跡特征融合雙流模型對動態(tài)手勢進行識別;Feyziolu等將基于Xbox 360 Kinect的虛擬現(xiàn)實訓練應用到乳腺癌手術患者中,起到了比標準物理療法更好的治療效果;Assad-Uz-Zaman等開發(fā)了基于Kinect控制的NAO遠程康復機器人,成功進行遙控操作,指導和演示患者實時執(zhí)行不同的手臂運動鍛煉。

經(jīng)過多年的研究與開發(fā),課題組已將Kinect體感技術應用于計算機、醫(yī)療、教育等各大領域,但在弘揚唐卡文化方面還未普及,如何以創(chuàng)新的思維方式將現(xiàn)代科技與傳統(tǒng)文化相結合,讓更多非藏族群眾了解這門藝術,并把唐卡文化發(fā)展為當代受歡迎的藝術形式,讓更多人感受到藏族人民的時代精神,是一個重大的研究課題。相較于體感技術在其他領域的應用發(fā)展,文中結合Kinect傳感器討論了體感交互在唐卡文化中的應用,通過手勢控制的體感交互方式實現(xiàn)堆繡唐卡的堆繡操作,利用Kinect采集用戶深度數(shù)據(jù)、彩色數(shù)據(jù)等,根據(jù)Kinect SDK等中間插件進行人體識別、手勢識別,利用手勢交互的方式完成堆繡操作,以掃描動態(tài)二維碼的方式保存堆繡成品到個人移動設備中。

1 需求分析與總體設計

1.1 需求分析

隨著時代的發(fā)展,熱愛唐卡的人不再局限于藏傳佛教僧侶和信徒,它成為了一件藝術品,甚至工藝品,被大眾推廣,出現(xiàn)在了眾多博物館、展廳、商店以及藝術愛好者的手中。隨著唐卡愛好者不斷增多,其傳承方式也應隨之創(chuàng)新。單純的傳承和復制傳統(tǒng)唐卡技藝,只會讓唐卡藝術發(fā)展停滯不前。結合現(xiàn)代科技,繁榮唐卡文化,才能使其可持續(xù)發(fā)展。通過手勢體感交互、二維碼交互的方式了解、傳播唐卡文化,其代入感更加明確,體驗度大大增加,能夠讓用戶以放松的心態(tài)、娛樂的方式認識唐卡文化,體驗唐卡文化的博大精深,具有較好的現(xiàn)實意義與推廣性。

1.2 總體設計

本研究以Kinect體感設備為數(shù)據(jù)輸入源,以Unity3D為開發(fā)工具,通過Kinect v2 Examples with MS-SDK中間插件來完成Kinect與Unity3D兩者間的連接。依據(jù)ZXing包生成并解析二維碼,利用UI界面截圖方式將手勢實現(xiàn)的堆繡作品上傳到服務器,并對返回的Json字符串進行處理,得到的圖片鏈接后賦予二維碼,通過掃描二維碼的方式保存在個人移動設備中。系統(tǒng)框圖如圖1所示。

系統(tǒng)架構主要分為四部分:手勢堆繡、UI界面、二維碼實現(xiàn)以及判斷是否完成堆繡。

(1)UI界面。

UI界面主要分為三部分,選擇界面、堆繡界面和二維碼面板。本項目涉及到四幅堆繡唐卡圖,可以在選擇界面選擇自己喜歡的唐卡圖進行堆繡。堆繡界面是實現(xiàn)堆繡功能的主界面,由四個堆繡界面組成,這四個界面除了堆繡圖以及元素不同,其他都保持一致。

圖1 系統(tǒng)架構

(2)手勢堆繡。

手勢堆繡需要通過Kinect SDK將Kinect傳感器與PC相連接,采集用戶數(shù)據(jù),利用Kinect SDK平臺進行人體骨骼識別。在識別人體骨骼框架的基礎上進行手勢識別,識別到的手勢數(shù)據(jù)在PC端匹配,根據(jù)所匹配手勢動作的不同,分別實現(xiàn)手勢堆繡的不同操作。為了讓用戶的體驗不受設備影響,本項目在實現(xiàn)手勢堆繡的同時,也實現(xiàn)了鼠標堆繡。該文將重點介紹手勢堆繡的實現(xiàn)。

(3)二維碼實現(xiàn)。

二維碼實現(xiàn)分為三個步驟,待堆繡完成,首先將堆繡好的唐卡圖進行屏幕的區(qū)域性截圖,并保存在本地,然后將保存到本地的截圖上傳到服務器,再根據(jù)返回的Json字符串將圖片信息賦值給生成的二維碼,完成掃碼存圖的功能。

(4)判斷是否完成堆繡。

堆繡面板中灰色元素代表待放置元素的線框,在堆繡元素拖動過程中,通過位置判定的方式判斷是否放置正確。如果所拖動的堆繡元素放置到對應元素線框中,則該線框Bool值為True,否則為False。通過對元素框Bool值的判定以及完成按鈕是否被點擊的判定,判斷是否完成堆繡操作。判定為完成則彈出二維碼面板,否則返回界面,進行后續(xù)操作。

2 系統(tǒng)架構實現(xiàn)

2.1 UI界面

UI的設計與實現(xiàn)通過Unity3D軟件完成,利用C#腳本進行控制。堆繡UI界面中的背景、堆繡主面板、堆繡元素面板均通過添加Image或Raw Image組件并為其Texture屬性賦值實現(xiàn)。將堆繡元素經(jīng)Photoshop黑白圖層處理,得到灰色元素線框。用Image組件將各個元素線框放置于對應原圖像所在位置,遮蓋原位的彩色圖像,實現(xiàn)元素線框的展示。堆繡元素面板中的每一個元素實際都是一個按鈕,在UI界面中添加十個Button物體,并在其Source Image組件中分別賦值元素圖片,即可完成元素的顯示。堆繡界面如圖2所示。

圖2 堆繡界面

選擇UI的實現(xiàn)方式類同于上述堆繡UI的實現(xiàn)方式,不同之處在于四個選擇按鈕的Image是動態(tài)的,選中狀態(tài)和未選中狀態(tài)展現(xiàn)不同的圖片,未選中的圖片沒有邊框,選中后的圖片用金色邊框修飾,同時用代碼控制放大選中圖片,放大倍數(shù)為1.1倍,起到突出選項的作用。選擇界面如圖3所示。

圖3 選擇界面

2.2 手勢堆繡

2.2.1 Kinect連接

本研究所使用的Kinect設備是新一代Kinect v2傳感器,與上一代Kinect v1相比,其視野更廣闊、視頻更高清、骨骼追蹤更精確,具有傳輸速度快、精確識別以及方便使用等特點,能夠滿足設計者的多種需求。傳統(tǒng)的彩色攝像頭對背景、光線等因素的要求較高,而Kinect v2傳感器對環(huán)境的適應能力相對較強,為開發(fā)者們研究體感互動提供了極大的便利。實現(xiàn)Kinect與Unity3D的連接,需要確保Kinect傳感器與電源集線器相連接,并且電源集線器要接電,之后將Kinect設備通過USB3.0連接到PC機上。在本機PC上安裝Kinect for Windows SDK v2.0,安裝好后,本機PC上會出現(xiàn)SDK Browser應用,打開該應用,啟動Kinect Configure Verifier項,檢測設備是否連接成功。將Kinect For Windows Wrapper中間插件導入項目,并且添加Kinect Manager以及Kinect Gestures腳本于項目中的任意一個物體,實現(xiàn)Kinect與Unity3D的連接以及對Kinect的控制。

2.2.2 人體數(shù)據(jù)采集

Kinect能夠采集人體的多種數(shù)據(jù),對人體進行骨骼追蹤。其主要利用三個不同功能的攝像頭,分別進行拍攝范圍內深度數(shù)據(jù)、彩色數(shù)據(jù)的采集以及紅外檢測,采集到的人體數(shù)據(jù)如圖4所示?;诓杉降纳疃葦?shù)據(jù)進行骨骼數(shù)據(jù)計算,追蹤到人體的25個關節(jié),識別人體動作。對這些數(shù)據(jù)建立編程模型,在人體識別的基礎上實現(xiàn)手勢識別。

圖4 人體數(shù)據(jù)

2.2.3 手勢識別

手勢識別的主要依據(jù)就是提取特征參數(shù),根據(jù)不同的特征參數(shù)對手勢進行分類。手勢識別過程如圖5所示,需要在Kinect采集用戶骨骼數(shù)據(jù)的基礎上,添加Kinect Manager等組件,Kinect Manager功能多樣,它可以實現(xiàn)Kinect的初始化,完成數(shù)據(jù)采集工作還可以分析處理數(shù)據(jù),并且定位到人體骨骼位置,將骨骼數(shù)據(jù)進行輸出。由于Kinect Manager腳本已經(jīng)對Kinect采集到的數(shù)據(jù)進行了處理,并將各個功能封裝成函數(shù),在實現(xiàn)一些功能的時候,只需要訪問Kinect Manager組件,獲取需要的方法或屬性即可。通過對其組件的控制,提取到手部骨骼參數(shù),生成交互數(shù)據(jù)流,識別特定手勢,實現(xiàn)對應操作。

編寫腳本,實現(xiàn)手勢控制功能,需要在腳本的Update函數(shù)里運用IsInitialized語句判斷設備是否準備好,如果準備好,即返回結果為True,再運用IsUserDetected函數(shù)判斷是否檢測到用戶。如果檢測到用戶,再運用IsJointTracked函數(shù)判斷是否追蹤到用戶右手骨骼。順利追蹤到用戶右手骨骼后,運用GetJointKinectPosition函數(shù)獲取用戶右手的世界坐標,將獲取的世界坐標通過Camera.main.WorldToScreenPoint()方法轉換為屏幕坐標,然后再將轉換好的三維屏幕坐標轉換為二維坐標。之后,將此二維坐標的位置賦予場景中設定好的手形圖標,讓手形圖標隨著用戶右手的移動而移動。因此,場景中手形圖標的運動狀態(tài)即為用戶手勢的運動狀態(tài)。

圖5 手勢識別

activeInHierarchy函數(shù)判斷元素按鈕的激活狀態(tài)、RectangleContainsScreenPoint函數(shù)判斷手形圖標位置是否在元素按鈕圖標范圍內。以上兩個條件都滿足時,可實現(xiàn)手勢拖動后續(xù)操作。當手勢狀態(tài)為Close(握拳)狀態(tài),并且元素按鈕名稱為當前拖動元素名稱時,元素的父物體轉換為主面板,元素的位置時刻置為手勢圖標的位置,完成手勢獲取元素功能。手勢狀態(tài)為Open(張開)狀態(tài)時,判斷手勢圖標及拖動元素是否在當前拖動元素的線框范圍內,如果在線框范圍內,則將當前元素位置轉換為線框位置,完成放置正確元素吸附功能;如果不在線框范圍內,元素父物體轉換為本身設定好的父物體,元素位置設置為本身父物體位置,將元素歸位。元素拖動期間,倘若用戶丟失或者手勢丟失,同樣將元素歸位。手勢堆繡過程如圖6所示。

圖6 堆繡過程

通過訪問Kinect Manager腳本組件,實現(xiàn)Kinect與Unity3D的連接,通過腳本的編寫,得到用戶的手勢信息,從而實現(xiàn)手勢交互的功能。手勢識別過程關鍵代碼如下:

//第1步:判斷設備是否準備就緒。

bool IsInit=KinectManager.Instance.Is-Initialized();

//第2步:判斷是否檢測到用戶。

bool IsUser=KinectManager.Instance.I-sUserDetected();

//第3步:獲取用戶ID。

Long UserID=KinectManager.Instance.GetPrimaryUserID();

//第4步:檢測用戶右手骨骼。

bool HandRightSkel=KinectManager.

Instance.IsJointTracked(UserID,(int)KinectInt-erop.JointType.HandRight);

//第5步:獲取右手位置坐標。

Vector3 RightHandPos=KinectManage-r.Instance.GetJointKinectPosition(UserID, (int)KinectInterop.JointType.HandRight);

//第6步:檢測右手手勢,執(zhí)行對應操作。

KinectInterop.HandState RightHandState=KinectManager.Instance.GetRightHandSta-te(UserID);

if(RightHandState==KinectInterop.H-andState.

Closed)

{

print(“右手握拳”);

……

}

2.3 二維碼實現(xiàn)

2.3.1 屏幕截圖

場景中設置三個空物體,第一個物體位于主面板左下角,第二個物體位于主面板右下角,第三個物體位于主面板左上角。主面板的寬等于第二個物體的X坐標減去第一個物體的X坐標,主面板的高等于第三個物體的Y坐標減去第一個物體的Y坐標。創(chuàng)建一個RGB24位格、大小等于主面板寬高的Texture2D紋理,運用ReadPixels函數(shù)讀取屏幕指定范圍內的內容到自定義的紋理當中。執(zhí)行Apply函數(shù)保存紋理,運用EncodeToPNG函數(shù)將紋理編碼為PNG格式,通過File.WriteAllBytes()函數(shù)將截圖以指定名稱保存到指定位置。

2.3.2 圖片上傳

用String字符串獲取截圖保存路徑,UnityWebRequest.Get()方法可獲取該路徑圖片的字節(jié)數(shù)組。開辟一個WWWForm類,運用AddBinaryData函數(shù)在實例化的WWWForm中添加圖片的字節(jié)數(shù)據(jù)。通過網(wǎng)絡請求UnityWebRequest的Post方法,將圖片上傳到服務器。上傳成功后,服務器將返回Json字符串,返回的Json字符串中包含三個鍵值對,分別為code代碼、msg提示信息和data數(shù)據(jù)。data數(shù)據(jù)對應的值為圖片上傳后的鏈接,通過Split字符串分割方法截取Json字符串中的圖片地址鏈接,保存到一個新的字符串中,以便后續(xù)二維碼展示過程中使用。

2.3.3 生成二維碼

ZXing由Java語言所實現(xiàn),可以生成和解析二維碼,內容開源,能夠為其他語言提供接口,可以對各類條形碼進行圖像處理。生成二維碼需要下載ZXing中的ZXing.unity.dll插件,導入Unity3D項目中,提供生成二維碼的類庫,然后添加與二維碼相關的頭文件,引用ZXing和ZXing.QrCode命名空間。之后添加Color32類型的函數(shù),實例化一個BarcodeWriter二維碼讀寫控件,設置二維碼格式和區(qū)域大小。生成二維碼后的效果如圖7所示。

圖7 二維碼面板

本研究的二維碼格式為QR_CODE,QR code格式的二維碼應用比較廣泛,有著極其廣泛的編碼范圍和非常大的信息存儲量。調用Encode方法對圖片進行二維碼生成,返回Color32數(shù)組,通過SetPixels32函數(shù)將返回的Color32數(shù)組設置到創(chuàng)建好的Texture2D紋理中。通過UI界面中添加一個Raw Image物體,并將生成的二維碼圖片紋理賦值給此物體,實現(xiàn)二維碼在UI界面中的展示。

3 實驗結果

為驗證本研究的可行性與有效性,文中進行了指定距離范圍內有效的拖動堆繡元素的實驗。指定距離指用戶與Kinect傳感器之間的距離,Kinect在1.5 m~2 m自身識別效果相對較好,因此實驗距離范圍設定為1.5 m~2 m。選取5名測試者,平均身高為160.6 cm。每位測試者需要在這一距離段內分別完成20次測試,并記錄對應堆繡成功次數(shù),共測試100次,完成本次實驗,之后計算出不同距離段的平均有效率。指定距離段手勢拖動元素的有效率如表1所示。

表1 有效率

實驗測試結果顯示,文中在Unity3D中所實現(xiàn)的基于Kinect的唐卡圖像交互設計應用是可行的,識別率較高,平均有效率高達93%,能夠有效地實現(xiàn)堆繡唐卡的堆繡操作。

4 結束語

本研究利用微軟公司的Kinect傳感器采集人體數(shù)據(jù),以Unity3D軟件為開發(fā)平臺搭建人機交互界面,通過Kinect SDK等中間插件實現(xiàn)對人體的骨骼追蹤和識別。在人體骨骼識別的基礎上進行手勢識別,再根據(jù)識別出的不同手勢進行對應的堆繡操作,并以掃描二維碼的方式保存堆繡作品,具有很好的交互性。實驗結果表明,本研究能夠有效地實現(xiàn)堆繡唐卡的堆繡操作,相對于傳統(tǒng)的唐卡文化傳播方式,本研究能夠將現(xiàn)代科技與傳統(tǒng)文化相結合,借助體感交互的趣味性,激發(fā)用戶對唐卡藝術的學習和探究欲,讓唐卡文化與時俱進,推陳出新。

該文只涉及到了唐卡文化中的堆繡文化,而且只用到了體感交互中的手勢交互。因此,不論是唐卡文化的拓展,還是體感技術的推進,都有很大的發(fā)展空間。

猜你喜歡
線框體感唐卡
電磁感應線框模型中最??嫉娜愵}型剖析
體感交互技術在腦卒中康復中的應用
淺談唐卡文物的保護修復——以館藏清代活佛像唐卡為例
藝術品鑒(2020年6期)2020-08-11 09:36:40
清人繪六世班禪唐卡
紫禁城(2020年3期)2020-04-26 05:19:48
玩轉方格
人體體感感知機械手設計與實現(xiàn)
電子制作(2019年13期)2020-01-14 03:15:20
隨位移均勻變化的磁場中電磁感應規(guī)律的初探
物理通報(2018年12期)2018-12-24 03:39:12
非觸控式的體感機械臂交互控制系統(tǒng)研究
電子制作(2017年13期)2017-12-15 09:00:05
精湛的唐卡與金工技藝
中國三峽(2016年10期)2017-01-15 13:59:48
從非物質文化遺產(chǎn)視域闡釋唐卡保護——以故宮博物院的唐卡保護為例
金溪县| 修水县| 黄龙县| 卢龙县| 峨山| 昭平县| 宜兴市| 青州市| 普格县| 大厂| 绥芬河市| 惠水县| 南和县| 梅河口市| 达孜县| 镇安县| 三河市| 山西省| 集贤县| 凉山| 沙雅县| 清苑县| 和林格尔县| 汉寿县| 德安县| 朝阳县| 定西市| 阳朔县| 应用必备| 习水县| 怀柔区| 明光市| 台北县| 茌平县| 宜君县| 河津市| 临邑县| 博罗县| 邛崃市| 北流市| 平塘县|