依沙·吾阿提別克,阿里甫·庫(kù)爾班,郝子煜,周 雷,呂情深
新疆大學(xué) 軟件學(xué)院,烏魯木齊830046
聾啞人通過(guò)手語(yǔ)[1-2]表達(dá)思想、獲取知識(shí)、與其他人交流,因此手語(yǔ)成為聾啞人學(xué)習(xí)、生活中必不可少的工具。學(xué)習(xí)語(yǔ)文課時(shí),聾人和老師都遇到前所未有的困難,聾人學(xué)習(xí)困難,老師教學(xué)更困難[3-4]。老師用手語(yǔ)將課文表達(dá)出來(lái),會(huì)耗費(fèi)大量體力、精力。盧葦在文獻(xiàn)[5]中闡述多媒體技術(shù)在手語(yǔ)教學(xué)中應(yīng)用的優(yōu)勢(shì),提出包含視頻、音頻、動(dòng)畫(huà)、圖像的多媒體技術(shù)擁有包含超強(qiáng)的綜合能力的論點(diǎn),進(jìn)一步指出傳統(tǒng)手語(yǔ)與多媒體教學(xué)的最佳結(jié)合點(diǎn),從而提高教學(xué)效率和質(zhì)量。這啟發(fā)人們開(kāi)發(fā)一套手語(yǔ)輔助教學(xué)系統(tǒng)來(lái)初步解決手語(yǔ)教學(xué)過(guò)程中老師和學(xué)習(xí)共同面對(duì)的問(wèn)題。
面向語(yǔ)文學(xué)習(xí)的手語(yǔ)教學(xué)系統(tǒng)主要是處理文本數(shù)據(jù),將文本數(shù)據(jù)轉(zhuǎn)化成可以發(fā)送給動(dòng)畫(huà)模塊的手語(yǔ)序列編碼,編碼順序可以根據(jù)文法手語(yǔ)的語(yǔ)法進(jìn)行調(diào)整,從而達(dá)到最終翻譯出來(lái)的手語(yǔ)滿足文法手語(yǔ)的句子特性。圖1為手語(yǔ)教學(xué)系統(tǒng)架構(gòu),整個(gè)系統(tǒng)框架分為手語(yǔ)文本分析處理模塊和手語(yǔ)動(dòng)畫(huà)合成播放模塊。兩個(gè)模塊之間采用Socket技術(shù)連接,將處理好的文本編碼結(jié)果通過(guò)Socket 機(jī)制發(fā)送給動(dòng)畫(huà)合成播放模塊。手語(yǔ)文本分析處理模塊包含課文讀取、課文文本分詞、手語(yǔ)編輯調(diào)整語(yǔ)序、手語(yǔ)轉(zhuǎn)碼等功能。課文內(nèi)容翻譯成手語(yǔ),體現(xiàn)在文本分詞、手語(yǔ)編輯等功能的恰當(dāng)應(yīng)用上。老師課堂上講語(yǔ)文,使用手語(yǔ)編輯功能將課文內(nèi)容翻譯成文法手語(yǔ)或者自然手語(yǔ),最終使文本轉(zhuǎn)化成動(dòng)畫(huà)序列并播放出來(lái),提高講課效率。
圖1 手語(yǔ)教學(xué)系統(tǒng)架構(gòu)
聾校語(yǔ)文教學(xué)系統(tǒng)以課文內(nèi)容為中心,圍繞文本數(shù)據(jù)進(jìn)行,根據(jù)標(biāo)點(diǎn)符號(hào)實(shí)現(xiàn)初步分句,對(duì)每個(gè)句子分別做手語(yǔ)翻譯及編輯,實(shí)現(xiàn)流程圖如圖2所示。對(duì)每個(gè)句子進(jìn)行分詞,形成初步的分詞序列,找出直接可以用手語(yǔ)詞表示的詞語(yǔ),存入待發(fā)送給動(dòng)畫(huà)模塊的列表;不能直接用手語(yǔ)詞表示的詞語(yǔ),如果是分詞錯(cuò)誤,可以使用系統(tǒng)的編輯功能進(jìn)行重新人工手動(dòng)分詞;找不到對(duì)應(yīng)的手語(yǔ)詞表示,原因如果不是分詞錯(cuò)誤,可以使用手語(yǔ)近義詞表示,若找不到手語(yǔ)近義詞,則按照漢語(yǔ)拼音用對(duì)應(yīng)的手語(yǔ)表示,并存入待發(fā)送列表。最終將待發(fā)送列表里面的手語(yǔ)序列轉(zhuǎn)化成對(duì)應(yīng)的手語(yǔ)動(dòng)畫(huà)編號(hào),通過(guò)模塊之間的Socket連接發(fā)送給動(dòng)畫(huà)模塊。最終,文本處理結(jié)果經(jīng)過(guò)動(dòng)畫(huà)模塊轉(zhuǎn)化成可視化的手語(yǔ)動(dòng)畫(huà)序列,從而達(dá)到課文文本內(nèi)容轉(zhuǎn)化成手語(yǔ)動(dòng)畫(huà)的目的。系統(tǒng)總體流程如圖2所示。
圖2 系統(tǒng)流程圖
結(jié)巴分詞(JieBa)[6]具有快速、簡(jiǎn)單、運(yùn)行速度快、占有的內(nèi)存小、分詞效率高等特點(diǎn),被廣泛應(yīng)用于各種中文自然語(yǔ)言處理任務(wù)中。
結(jié)巴分詞原理如圖3所示,基于前綴詞典對(duì)文本進(jìn)行詞圖掃描,得到句子中所有可能的成詞情況構(gòu)成的有向無(wú)環(huán)圖(Directed Acylic Graph,DAG);采用動(dòng)態(tài)規(guī)劃算法查找最大概率路徑,即最大切分情況;對(duì)于未在詞典里出現(xiàn)的詞語(yǔ)用具有漢語(yǔ)構(gòu)詞能力的HMM(Hidden Markov Model)方法處理[7]。
圖3 結(jié)巴分詞原理
本文使用結(jié)巴分詞對(duì)文本進(jìn)行分詞,但是由于手語(yǔ)詞匯數(shù)量少(5 000 多個(gè)),無(wú)法準(zhǔn)確地表達(dá)自然中文中的所有的詞語(yǔ)。同時(shí)結(jié)巴分詞對(duì)前綴詞典的依賴性較大,對(duì)手語(yǔ)詞典進(jìn)行基于外部知識(shí)庫(kù)的擴(kuò)充,從而提高分詞的準(zhǔn)確率和效果。因此,為了滿足根據(jù)手語(yǔ)詞語(yǔ)對(duì)課文句子進(jìn)行分詞的要求,對(duì)結(jié)巴分詞進(jìn)行改進(jìn)。改進(jìn)方面主要是擴(kuò)充前綴詞典[8]。在外部知識(shí)庫(kù)的文本擴(kuò)展中,一般有基于同義詞詞林或知網(wǎng)等的特征擴(kuò)展方法[9]。采用同義詞詞林進(jìn)行擴(kuò)展手語(yǔ)詞典,擴(kuò)充方法如下:選擇哈工大《同義詞詞林》的同義詞項(xiàng),找出包含手語(yǔ)詞的項(xiàng),把它們?nèi)考尤氲叫碌脑~典中,作為結(jié)巴分詞算法的前綴詞典。例如選擇《同義詞詞林》中的某一項(xiàng)。
例子Aa01A01=人士人物人士人氏人選。編號(hào)表示同義詞所在的分類,等號(hào)表示在某一個(gè)上下文語(yǔ)義下,后面的每個(gè)詞語(yǔ)是等價(jià)的,即同義詞。手語(yǔ)詞典中存在“人”這個(gè)詞語(yǔ),因此當(dāng)文本中遇到“士”“人物”“人士”“人氏”等就可以進(jìn)行單獨(dú)分詞,翻譯過(guò)程中用手語(yǔ)詞“人”的動(dòng)畫(huà)來(lái)替換它們。
擴(kuò)充手語(yǔ)詞典之前,手語(yǔ)詞語(yǔ)只有5 000多個(gè),當(dāng)所有能表示手語(yǔ)的近義詞加到新的詞典以后,得到的代表手語(yǔ)語(yǔ)義的詞語(yǔ)有148 656個(gè)。不論是手語(yǔ)分詞的準(zhǔn)確率還是翻譯的質(zhì)量,擴(kuò)充后的詞典表現(xiàn)更好。
手語(yǔ)分詞完成之后,進(jìn)行手語(yǔ)編輯、轉(zhuǎn)碼等操作。由于手語(yǔ)構(gòu)詞構(gòu)形、語(yǔ)法和正常的漢語(yǔ)句子有很大的區(qū)別,這要求系統(tǒng)有編輯手語(yǔ)的功能。老師備課的時(shí)候可以對(duì)手語(yǔ)句子進(jìn)行語(yǔ)序調(diào)整,使其滿足手語(yǔ)語(yǔ)法。手語(yǔ)編輯區(qū)域主要有上移、下移、添加、刪除詞語(yǔ)等功能。實(shí)現(xiàn)原理是將分詞好的詞語(yǔ)序列放在一個(gè)鏈表中,上下移動(dòng)手語(yǔ)詞語(yǔ),調(diào)整語(yǔ)序;對(duì)不滿足手語(yǔ)詞語(yǔ)構(gòu)詞構(gòu)形、分詞錯(cuò)誤等詞語(yǔ)進(jìn)行刪除,向句子中添加其準(zhǔn)確的手語(yǔ)詞語(yǔ),如果手語(yǔ)詞語(yǔ)不存在,則可以用近義詞表示。最終按“結(jié)束”按鈕生成對(duì)應(yīng)的文法手語(yǔ)序列。
手語(yǔ)轉(zhuǎn)碼是指將文法手語(yǔ)序列轉(zhuǎn)化成能夠發(fā)送給動(dòng)畫(huà)模塊的編碼序列。其關(guān)鍵是制作一個(gè)手語(yǔ)文本詞典,即手語(yǔ)轉(zhuǎn)碼表,如表1 所示。每個(gè)手語(yǔ)對(duì)應(yīng)一個(gè)編碼(ID),每個(gè)編碼對(duì)應(yīng)相應(yīng)的手語(yǔ)動(dòng)畫(huà)。通過(guò)匹配手語(yǔ)詞語(yǔ)能夠查到其對(duì)應(yīng)的編碼,再通過(guò)這個(gè)編碼播放對(duì)應(yīng)的手語(yǔ)動(dòng)畫(huà)。文法手語(yǔ)序列是手語(yǔ)詞語(yǔ)序列,為了播放該序列對(duì)應(yīng)的手語(yǔ)動(dòng)畫(huà),只要將編碼發(fā)送給動(dòng)畫(huà)模塊,調(diào)動(dòng)對(duì)應(yīng)的動(dòng)畫(huà)播放即可。
表1 手語(yǔ)轉(zhuǎn)碼表
使用Maya對(duì)人體進(jìn)行建模。首先創(chuàng)建虛擬人的骨骼,需要完整的手部骨骼模型。之后給骨骼系統(tǒng)添加蒙皮,如頭發(fā)、臉部、上衣和褲子等。為了實(shí)現(xiàn)動(dòng)畫(huà)合成播放,使用關(guān)鍵幀原理[10]制作手語(yǔ)動(dòng)畫(huà);使用Unity3D動(dòng)畫(huà)引擎開(kāi)發(fā)手語(yǔ)動(dòng)畫(huà)模塊,將Maya 做出來(lái)的虛擬人模型導(dǎo)入U(xiǎn)nity中,根據(jù)關(guān)鍵幀動(dòng)畫(huà)原理實(shí)現(xiàn)單個(gè)動(dòng)畫(huà)播放,使用線性插值算法實(shí)現(xiàn)動(dòng)畫(huà)之間的過(guò)渡融合。圖4 為虛擬人骨骼,圖5為虛擬人的關(guān)鍵幀。
圖4 帶骨骼的虛擬人和手部骨骼
圖5 表示“烏魯木齊”的動(dòng)畫(huà)的關(guān)節(jié)幀
關(guān)鍵幀動(dòng)畫(huà)[11-12]通過(guò)設(shè)置物體的關(guān)鍵幀位置與屬性,中間幀的生成均可由計(jì)算機(jī)來(lái)完成。因此在多種計(jì)算機(jī)動(dòng)畫(huà)技術(shù)中,關(guān)鍵幀動(dòng)畫(huà)以其便捷、智能的特點(diǎn)成為計(jì)算機(jī)動(dòng)畫(huà)中最基本、運(yùn)用最廣泛的方法[13]。本研究中采用關(guān)鍵幀技術(shù)完成手語(yǔ)動(dòng)畫(huà)的制作。給定兩個(gè)關(guān)鍵幀,通過(guò)線性差值算法(Linear Interpolation,LERP)[14]求得其骨骼中間姿勢(shì)??杀硎救缦拢?/p>
其中,β 為混合百分或混合因子,表示兩個(gè)動(dòng)畫(huà)之間融合的時(shí)間比例。當(dāng)β 處于0~1 之間,得最終兩個(gè)骨骼中間姿勢(shì)。當(dāng)β 為0 時(shí),最終得到的是關(guān)鍵幀。當(dāng)β 為1 時(shí),最終得到的是關(guān)鍵幀
為了達(dá)到手語(yǔ)動(dòng)畫(huà)之間觀賞性連貫、自然的效果,需要使用插值算法來(lái)處理動(dòng)畫(huà)序列。在Unity3D 游戲引擎中定義一個(gè)PlayAnimation()的協(xié)程[15]函數(shù)用于在Unity主線程中播放動(dòng)畫(huà)。其核心代碼如下:
IEnumerator PlayAnimation(){
int Count =NLPresult.ToArray().Length;
for(int i=0;i float time = this.GetCurrentAnimatorClipInfo(0)[0].clip.length; this.CrossFade(NLPresult[i].ToString(),time*0.2f); yield return newWaitForSeconds(time); } } 圖6 編輯系統(tǒng)界面 首先定義一個(gè)整型變量Count 存放要播放的手語(yǔ)動(dòng)畫(huà)數(shù)量。對(duì)該常量其中的每一個(gè)動(dòng)畫(huà),得到單個(gè)動(dòng)畫(huà)合成播放時(shí)間time。調(diào)用Unity 游戲引擎系統(tǒng)提供的CrossFade()[16]函數(shù)依次播放動(dòng)畫(huà),兩個(gè)動(dòng)畫(huà)之間采用線性插值函數(shù)[14]來(lái)進(jìn)行動(dòng)畫(huà)過(guò)渡融合,動(dòng)畫(huà)連接時(shí)間為第一個(gè)動(dòng)畫(huà)的播放時(shí)間的0.2倍,即β=0.2。最后,讓協(xié)程等待時(shí)間time,并渲染播放手語(yǔ)動(dòng)畫(huà),目的是不影響主線程渲染整個(gè)引擎。 為了得到一個(gè)完整的手語(yǔ)動(dòng)畫(huà)庫(kù),顏慶聰?shù)热薣17]采用數(shù)據(jù)手套來(lái)采集手語(yǔ)運(yùn)動(dòng)軌跡信息。由于數(shù)據(jù)手套存在價(jià)格昂貴、操作復(fù)雜等缺點(diǎn),此方法不能用于輔助教學(xué)系統(tǒng)中。因此根據(jù)問(wèn)題的需要,采用先進(jìn)的動(dòng)畫(huà)制作軟件Maya 來(lái)進(jìn)行動(dòng)畫(huà)制作。首先使用Maya 創(chuàng)建完整的人體骨骼,其中包含完整的手部的骨骼。之后,在此骨骼系統(tǒng)基礎(chǔ)上添加蒙皮,如臉部、頭發(fā)、皮膚、衣服等,形成完整的不帶動(dòng)畫(huà)的fbx文件。最后,給fbx文件添加動(dòng)畫(huà)曲線,根據(jù)手語(yǔ)動(dòng)畫(huà),主觀推測(cè)關(guān)鍵幀在手語(yǔ)動(dòng)畫(huà)過(guò)程中的位置,并且給動(dòng)畫(huà)曲線挨個(gè)添加關(guān)鍵幀。 由于fbx 文件里包含了完整的骨骼和蒙皮信息,使用fbx 會(huì)導(dǎo)致動(dòng)畫(huà)庫(kù)過(guò)于龐大,不便于使用。因此需要把動(dòng)畫(huà)從fbx 文件里分離出來(lái)。將fbx 導(dǎo)入U(xiǎn)nity 游戲引擎中,Unity 引擎能夠識(shí)別出是否含有動(dòng)畫(huà)。如果有動(dòng)畫(huà)就能夠使用Unity引擎的動(dòng)畫(huà)分離功能批量分離出單獨(dú)的動(dòng)畫(huà)文件,即動(dòng)畫(huà)庫(kù)中的最小元素anim 文件。anim 文件只包含骨骼運(yùn)動(dòng)的信息,相比于帶蒙皮信息的fbx文件,anim文件具有占用空間小、操作性強(qiáng)、易用性等特點(diǎn)。同時(shí)anim 動(dòng)畫(huà)能夠很好地導(dǎo)入U(xiǎn)nity3D 引擎中,以便用于動(dòng)畫(huà)合成、動(dòng)畫(huà)播放及動(dòng)畫(huà)過(guò)渡融合等操作。 開(kāi)發(fā)環(huán)境為:Visual Studio 2017版本,Unity 2018.1.2f1(64-bit)。使用微軟提供的基于C#語(yǔ)言的用戶界面框架WPF(Windows Presentation Foundation)開(kāi)發(fā)課文處理模塊,選擇C#語(yǔ)言實(shí)現(xiàn)課文分句、分詞、手語(yǔ)編輯、新詞添加、近義詞表示等功能;使用服務(wù)器/客戶端模式(B/C)實(shí)現(xiàn)課文處理模塊和動(dòng)畫(huà)模塊之間的通信交互,目的是為了將待發(fā)送列表里的手語(yǔ)編號(hào)序列發(fā)送給動(dòng)畫(huà)模塊。 系統(tǒng)編輯界面由課文分句、虛擬人、手語(yǔ)編輯、文法手語(yǔ)顯示等功能模塊組成,如圖6所示。課文分句功能負(fù)責(zé)將輸入進(jìn)來(lái)的文本進(jìn)行分句,以便以句子為單位進(jìn)行手語(yǔ)翻譯教學(xué)。虛擬人由Unity3D游戲引擎開(kāi)發(fā),嵌入到桌面應(yīng)用中,負(fù)責(zé)手語(yǔ)動(dòng)畫(huà)的播放顯示。由于面向聾啞學(xué)生的語(yǔ)文教學(xué)對(duì)手語(yǔ)翻譯準(zhǔn)確率要求很高,手語(yǔ)編輯提供對(duì)課文句子編輯的功能,使翻譯準(zhǔn)確率得到全面提升。 以聾啞學(xué)校第十冊(cè)第一篇課文的第一句話為例進(jìn)行實(shí)驗(yàn),并給出對(duì)應(yīng)系統(tǒng)使用分析。例如:“清晨,天氣格外晴朗,溫暖的陽(yáng)光灑滿山村”,首先對(duì)這句話采用改進(jìn)的結(jié)巴分詞算法進(jìn)行分詞,得到圖7中的結(jié)果。 圖7 文法手語(yǔ)的例子 該句子中,分詞后得到9 個(gè)詞語(yǔ),其中只有3 個(gè)(藍(lán)色背景)詞語(yǔ)能夠直接被手語(yǔ)表示,顯然這無(wú)法滿足教學(xué)要求,無(wú)法做到文本翻譯成手語(yǔ)。因此需要通過(guò)編輯功能,使用近義詞或者重新分詞等人工干預(yù)操作,將例子中的每個(gè)詞語(yǔ)直接用手語(yǔ)表示。 圖8 左圖中,詞語(yǔ)“清晨”“格外”“晴朗”“陽(yáng)光”“灑滿”“山村”都不能直接用手語(yǔ)表示??梢圆捎镁庉嫻δ軐⑺鼈冇媒x詞等表示成手語(yǔ)詞語(yǔ),如圖8右圖。此方法能夠準(zhǔn)確傳遞文本中的句子信息,又能讓聾啞學(xué)生學(xué)習(xí)更多的詞語(yǔ)意思。 圖8 編輯功能(左)及編輯后的句子(右) 對(duì)比顏慶聰?shù)热嗽O(shè)計(jì)的成型系統(tǒng)[17],本系統(tǒng)有設(shè)計(jì)簡(jiǎn)單、手語(yǔ)數(shù)據(jù)采集簡(jiǎn)便、跨平臺(tái)性、手語(yǔ)翻譯結(jié)果準(zhǔn)確等優(yōu)點(diǎn)。首先,本文使用Maya 等專業(yè)建模軟件制作動(dòng)畫(huà),基于關(guān)鍵幀算法合成手語(yǔ)動(dòng)畫(huà),反觀顏慶聰?shù)热耸褂肎love數(shù)據(jù)手套采集手部運(yùn)動(dòng)軌跡的數(shù)據(jù),此方法具有不好精確控制手部運(yùn)動(dòng)軌跡、做出的手語(yǔ)動(dòng)畫(huà)不準(zhǔn)確等缺點(diǎn)。其次,本文使用Unity3D動(dòng)畫(huà)引擎來(lái)渲染手語(yǔ)動(dòng)畫(huà),Unity3D 引擎具有跨平臺(tái)性,可以在蘋(píng)果、安卓、Linux 等系統(tǒng)中運(yùn)行,相對(duì)于顏慶聰?shù)热说南到y(tǒng)更具有廣泛使用的優(yōu)點(diǎn)。最后,此系統(tǒng)包含手語(yǔ)編輯等功能,對(duì)于文本具有詞語(yǔ)級(jí)別的精細(xì)控制,翻譯結(jié)果更準(zhǔn)確。 手語(yǔ)教學(xué)作為一種特殊教學(xué)方式,需要多方面合作。開(kāi)發(fā)一種手語(yǔ)教學(xué)系統(tǒng)能夠減輕老師備課、上課的壓力,也給聾啞學(xué)生提供一個(gè)自主學(xué)習(xí)的工具,開(kāi)拓他們的視野,同時(shí)為聽(tīng)人提供一種學(xué)習(xí)手語(yǔ)途徑,起到促進(jìn)聽(tīng)人和聾啞人交流的作用。但這在手語(yǔ)教學(xué)推廣過(guò)程中遠(yuǎn)遠(yuǎn)是不夠的。手語(yǔ)教學(xué)需要多方合作,如家長(zhǎng)、老師等都要參與到聾啞學(xué)生的學(xué)習(xí)、教育、生活中。3.5 手語(yǔ)動(dòng)畫(huà)庫(kù)建立
4 實(shí)驗(yàn)結(jié)果與分析
5 結(jié)論