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