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