姜檬 郭仁春 李俊龍 王志淳



摘? ?要:文章介紹了基于Leap Motion手語語音轉換的原理以及在實際中如何實現應用,其能夠將手語手勢翻譯成所需語言,并且以語音的形式傳遞消息,實現為聾啞人“發聲”的目的。Leap Motion手語語音轉換的硬件部分采用Leap Motion體感控制器,能夠實時采集人手指的坐標、加速度、方向等動態手勢的運動信息。軟件采用Unity 3D三維引擎,提供了開發手勢識別的SDK,并給出了一些基本手的模型,在Unity 3D中完成由手勢到文字,再到語音的轉換。
關鍵詞:動態手勢識別;厲動;Unity 3D
1? ? 手勢識別
手勢識別是手語語音轉換的首要步驟,包括手勢的采集與手勢識別。手勢的釆集廣泛使用的方法有數據手套[1]、專業的視頻釆集攝像機等[2]。而手勢識別的研究方向有兩個:一個是靜態手勢識別,另一個是動態手勢識別。靜態手勢識別始于20世紀初,主要利用獲取到的單個時間點的手勢圖像中手的形狀、手指的姿態等信息進行手勢表達含義的識別[3]。相比于靜態手勢識別,動態手勢識別要稍晚一些,需要對連續一段時間的手勢圖像信息進行圖像處理,通過獲取處理后的連續時間內手、手指的位置、速度等數據信息來識別手勢表達的意義[4]。
本文提出的基于Leap Motion的手語語音轉換是基于視覺(圖像)的手勢識別系統[5],采用的手勢識別系統是Leap Motion體感控制器,是支持C#語言的三維引擎,且提供了手勢開發的軟件開發工具包(Software Development Kit,SDK),為手勢定義成文字提供了便利條件。本文是使用C#語言對手語語音轉換進行開發的。
2? ? Leap Motion手語語音轉換的原理
2.1? Leap Motion功能介紹
本文采用的Leap Motion是Leap公司最新研發的體感控制器,是一款微米級3D手動交互設備,十分小巧且應用廣泛。當手在傳感器上方活動時能夠實現對手和手指的運動追蹤。能夠追蹤到一個人10根手指的三維坐標信息且位置精度高達0.01 mm,具有150°的超寬幅空間視場,能夠以高達每秒200幀以上的速度追蹤一個人的手部移動。延遲比顯示器的刷新率還要低,特別適合做手語翻譯器。
Leap Motion內置兩個紅外攝像頭,從不同角度捕捉兩張畫面,重建出手掌在真實世界三維空間的運動信息。檢測的范圍大體在傳感器上方25~600 mm之間,檢測的空間大體是一個倒四棱錐體。
Leap Motion的系統采用了右手笛卡爾坐標系,返回的數值都是以真實世界的毫米為單位。如圖1所示,原點在Leap Motion 控制器的中心,X軸和Z軸在器件的水平面上,X軸和設備的長邊平行,Z軸和短邊平行。Y軸是垂直的,以正值增加形式朝上。
Leap Motion能夠實時監測信息。使用過程中,Leap Motion傳感器會定期發送關于手的運動信息,每份信息稱為“幀”,Leap Motion傳感器會給所有手指手掌的列表和信息分配一個唯一標識(ID),在手掌、手指或手持的工具保持在視野范圍內時,不會改變。一旦手從設備的視野中丟失,再次被發現時就會重新為視野中的手分配一個全新的ID號。
2.2? Leap Motion手語語音轉換設計原理
本文對Leap Motion手語語音轉換的研究分為5個部分,即真實世界的手勢、手勢識別、屏幕中的模型手、自定義手勢代表的文字、文字轉化成語音,如圖2所示。
以“耶”的手勢為例,當Leap Motion設備安裝完成并運行之后,在鏡頭視野范圍之內做“耶”的手勢,如圖3(左)所示。手的姿態通過紅外攝像頭采集到電腦上,形成如圖3(中)所示的紅外圖像,由于是雙紅外攝像頭,會形成兩張視角有一定偏差的圖像,根據這兩張圖像,可以計算出手姿態的三維信息,包括手指、手掌的位置、速度、方向和加速度。將數據傳給系統提供的三維手模型,屏幕上就會同步出現一個虛擬的三維手,如圖3(右)所示,其動作與真實手基本一致。
要自定義手勢代表的文字,調用Unity 3D中提供的手勢開發的SDK,編寫程序對“耶”的手勢定義成文字并在屏幕中展示該文字。最后將文字轉化成語音,利用系統自帶的語音庫Speechlib方法將文字轉化成語音,運行代碼,就會有“耶”的聲音發出。
3? ? 在Unity 3D中實現手語、文字和語音的轉換
3.1? 手勢實現的原理
將a定義為右手拇指第三指節的長度,將此長度設置為參考長度。當手指指尖與手掌中心的距離大于3個參考長度規定為張開手指,當手指指尖與手掌中心的距離小于1個參考長度規定為握住手指。用參考長度作為判據,分別計算各個手指的指尖到手掌中心的距離,就可以識別手的某一姿態,如圖4(左)所示。