羅琳元 農旭安 尤文圣 陳文程
廣東理工學院 廣東 肇慶 526100
“模型展示”是科技館、博物館等場所展示的重要內容之一。目前在投影顯示和手勢交互過程中,市場上大多采用3D動畫與2D圖片,通過鼠標調整x、y、z軸的坐標來實現動畫及圖片的控制。該方法在圖像顯示上缺乏真實與立體感,在控制上缺乏自然的人機交互,且在傳統(tǒng)的圖像顯示可能會存在圖像不清晰、圖像顯示不流暢、卡頓等問題;存在技術不成熟,成本較為昂貴,操作不便等問題。但近年來,裸眼3D顯示已廣泛存在于新興的數字博物館、文物復原系統(tǒng)、科技廳、娛樂廳、主題樂園等。裸眼3D技術在當代的興起,使得其技術水平也在逐步提高,在市面上出現了各式各樣裸眼3D的運用,給使用者帶來了視覺上的沖擊與震撼。且該技術具有成本低、成像真實立體的特點,非常適合于三維模型展示。
Kinect是微軟公司開放的一款人體控制設備。該設備可以快速捕捉與識別人體,感應手掌和手指詳細的運動坐標軌跡的數據信息,分析人體的肢體動作,從而滿足使用者的交互需求、理解和表達人體所作出的肢體動作。Kinect也是通過骨骼點數據分析,從而捕捉和識別人體的肢體動作,完成一系列的人機交互操作。將其結合旋轉陣列LED裸眼3D顯示技術,能讓觀眾真實感受到物體就在手中,進行操控隨意化的三維模型,投影展示與操控效果更加真實、簡便。
Unity 3D是能夠實現虛擬引擎開發(fā)的軟件,它對場景具有呈現功能和高效的渲染能力且性能強大。與3Dsmax、Maya等軟件相比,Unity 3D兼容性更強,能夠有效支持Kinect控制設備的運行,且方便后續(xù)的系統(tǒng)調整和更改程序。
在此基礎上,本文提出了一種基于Kinect控制技術的旋轉陣列LED裸眼3D顯示系統(tǒng),解決了科技館、博物館等場所三維模型展示真實感與互動性的問題,以及外界環(huán)境因素也考慮到設計中,能夠讓人機交互更加順利。旋轉陣列LED顯示屏,在視差原理下通過快速旋轉LED風扇陣列,從而在陣列中形成一個真實的、立體的三維模型,是利用旋轉陣列LED顯示屏風扇葉片中500像素點的LED發(fā)光條,在以一端為圓心進行高速旋轉根據像素點的大小,能夠清晰地把三維模型投影呈現到屏幕中;計算機通過程序控制著這些LED發(fā)光條,進行發(fā)光和對圖像信息的顯示和變換。Kinect對人體手勢運動軌跡進行捕捉與追蹤,實現對投影出的模型進行變換大小、旋轉等互動操作。該系統(tǒng)具有便捷性、互動性,有利于推廣,對Kinect的運用起到了重要的推動作用[1]。
系統(tǒng)的硬件主要包括機柜、設置在機柜內的計算機、Kinect體感控制器、旋轉陣列LED顯示屏。所述機柜包括置于地面上的固定板、設于固定板上的框架、用于安裝旋轉陣列LED顯示屏的固定支架。所述旋轉陣列LED顯示屏包括旋轉風扇、電機和安裝于風扇葉片上的LED。旋轉陣列LED顯示屏通過固定支架安裝在框架中,Kinect體感控制器安裝在機柜的前面且與計算機電性相連,如圖1所示。旋轉陣列LED顯示屏通過計算機處理將三維模型投影成像區(qū)域。
圖1 硬件設計圖
旋轉陣列LED顯示屏:顯示三維模型的影像。由長方體的邊框和10組風扇組合而成,成直立擺放。為了保證成像的呈現效果,可以不受邊框的大小限制展示出三維模型,三維模型是在距離顯示屏10cm的空間進行呈現,立體感和真實感強[2]。
旋轉LED風扇:顯示投影的片源。風扇由兩根500像素點LED發(fā)光條組合而成,在每組風扇中就有兩條LED發(fā)光條能夠讓投影出的三維模型清晰,通過旋轉進行三維模型的成像,再通過計算機程序控制著LED發(fā)光條的發(fā)光,以及對圖像信息的加載、顯示與變化,從而會有更好的立體感和視覺效果。
Kinect體感控制器:Kinect負責追蹤手掌和手指,實現體感交互控制。Kinect是一種三維立體視覺體感控制,即利用紅外攝像頭和深度攝像頭從不同視覺角度捕捉圖像,可有效減少不同環(huán)境背景和照明變化以及膚色上差異等對識別造成的誤差。利用紅外攝像頭追蹤手掌和手指,使得在實際手勢運動操作中更加容易識別與重構手的運動信息。將手放置于距離Kinect體感控制器25~500cm前方,進行手勢操作;即距離設備越近,手勢交互的空間范圍將越寬;且不會受到外界環(huán)境的影響導致交互失敗,確保了能夠精準地對投影出的三維模型進行交互。
計算機:計算機與Kinect電性相連,對Kinect捕捉和追蹤的數據進行處理。可以選用裝有最新的Win7系統(tǒng)等甚至更高的系統(tǒng)能夠有效支持Kinect完成高圖形處理的計算機。Kinect通過算法程序來對手勢進行交互的重要步驟,同時也需要對一定量的處理器和內存儲量資源進行運行[3]。
系統(tǒng)的主要功能是實現三維模型的人機交互與立體顯示,因此在設計上需要實現這兩個功能。一方面,手勢動作可以從不同角度觀看三維模型,即通過Kinect傳感器對手勢運動軌跡進行捕捉和追蹤,控制立體虛擬場景中三維模型的旋轉、切換和變換大小等交互控制;另一方面,手勢操作模型切換是指通過手勢動作進行控制加載虛擬場景中的各種三維模型。這需要定義關鍵類的手勢信息,才能精準捕捉到手勢軌跡動作實現上述的手勢動作操作。
系統(tǒng)為每個三維模型設置了資源路徑、資源位置、模型大小切換等txt數據文件,使運行時能夠準確讀取和加載出模型。在運行系統(tǒng)時,Revolving Gamera首先尋找到Game Object“Kinectdata Manager”和“Kinectdata Manager.cs”,使得腳本實現Kinect初始化,檢測手指和手掌的動作軌跡數據,根據手勢動作將獲取的信息轉換成Unity 3D場景中對應的數據,并通過Kinect傳感器對投影顯示出的三維模型進行旋轉、切換模型場景等操作[4]。
當運行Kinect時,以設備中心為坐標原點的右邊將成為坐標系,但Unity3D場景則基于左手坐標系。因此,需要將kinect人機交互的右手坐標系轉換為Unity 3D環(huán)境中的左手坐標系。在將Kinect捕捉得到的手勢數據位置信息坐標(x,y,z)轉換為Unity 3D場景中的數據坐標時,應該先轉換z軸。如果Unity 3D中需要使用負坐標,則應設置KinectY方向的移動數據。同時Kinect所捕捉的手勢運動數據單位是“毫米”,而Unity 3D則是“米”,所以需要按照比例設置kinect與Unity 3D單位變換關系,使Kinect所檢測到1mm的手勢運動數據在Unity 3D中都會相應地變換為1sm。
Kinect體感控制器在運行后會向識別范圍內捕捉并檢測手掌、手指的軌跡信息或工具的運動信息數據。所檢測到的數據信息標定為一個框架,它包含手掌、手指和工具等屬性數據。當Kinect捕捉和追蹤到手勢運動時,設備自動將該手掌或者手指標記一個ID。只要手掌或手指不離開Kinect的識別范圍,ID標記保持不變。而離開識別范圍后,Kinect捕捉不到手勢運動數據時會默認為丟失,之后出現的新的手掌或手指將被標記一個新的ID,在不同的使用者使用中會根據系統(tǒng)數據,分析手掌和手指并標記ID,且在下一個使用者使用時會對上一位使用者標記的ID進行刪除,以防止存儲數據過多對計算機內存的過量使用,導致投影出的三維模型出現卡頓等情況。為了識別被綁定后手勢的數據信息、位置信息和手勢運動方法,Kinect提供手勢數據的對象包含了這些重要的數據特征[5]。
在此基礎上,手勢交互系統(tǒng)實現的關鍵在于三維場景的設置和驅動,其主要在Unity 3D引擎中實現。KinectDeveloperKit是專門為Unity 3D開發(fā)者提供的插件,Unity Asset是可以導入文件夾中的數據,實現Unity 3D對Kinect數據的調用。通過3Dsmax或Rhino軟件進行三維建模,形成三維模型為FBX的通用格式文件,再將模型導入Unity 3D中搭建3D場景,最后調節(jié)和設置場景的燈光和材質,調整相機的位置可以實現不同角度3D場景的展示。通過使用Unity 3D將自帶的Mono Develop程序進行腳本編程的編寫,將其綁定到相應的Game Object,從而進行對三維場景的程序驅動。編輯系統(tǒng)完成后,可以通過Unity 3D發(fā)布到Windows平臺,并連接裸眼3D顯示系統(tǒng)進行人機交互,再通過旋轉陣列LED顯示屏,風扇轉動形成的三維模型,根據使用者的肢體動作對其進行人機交互,實現對三維模型的放大、縮小、切換模型等功能[6]。
在傳統(tǒng)的市面上售賣的Kinect傳感控制器中,可能會存在投影出的三維模型模糊不清晰等情況,且操作復雜,甚至可能會受到周圍環(huán)境的影響導致沒辦法正常運作。而文中設計的系統(tǒng)是利用Kinect體感控制技術結合旋轉陣列LED裸眼3D顯示成像技術,在Unity 3D引擎的開發(fā)下設計了三維模型與手勢交互的裸眼3D顯示終端;設計并構建了系統(tǒng)的硬件結構和軟件結構,實現了系統(tǒng)坐標變換、手勢交互控制等關鍵技術。與傳統(tǒng)的基于平面和鼠標的顯示控制模式相比,該系統(tǒng)具有更真實的立體感,更簡單的手勢操作,大大提高了展覽中模型展示的效果,也是對Kinect傳感控制器能夠近距離進行手勢交互技術和手捕捉追蹤技術的進一步探索和運用,同時展現了Kinect傳感控制器的強大,更好地呈現三維模型投影能精準地與使用者實施交互,并對未來科技的發(fā)展以及在運用中更好地展示Kinect傳感控制器的便利之處。