聋哑学校语文辅助教学系统研究
2020-06-09依沙吾阿提别克阿里甫库尔班郝子煜吕情深
依沙·吾阿提别克,阿里甫·库尔班,郝子煜,周 雷,吕情深
新疆大学 软件学院,乌鲁木齐830046
1 引言
聋哑人通过手语[1-2]表达思想、获取知识、与其他人交流,因此手语成为聋哑人学习、生活中必不可少的工具。学习语文课时,聋人和老师都遇到前所未有的困难,聋人学习困难,老师教学更困难[3-4]。老师用手语将课文表达出来,会耗费大量体力、精力。卢苇在文献[5]中阐述多媒体技术在手语教学中应用的优势,提出包含视频、音频、动画、图像的多媒体技术拥有包含超强的综合能力的论点,进一步指出传统手语与多媒体教学的最佳结合点,从而提高教学效率和质量。这启发人们开发一套手语辅助教学系统来初步解决手语教学过程中老师和学习共同面对的问题。
2 系统架构与实现流程
2.1 系统框架
面向语文学习的手语教学系统主要是处理文本数据,将文本数据转化成可以发送给动画模块的手语序列编码,编码顺序可以根据文法手语的语法进行调整,从而达到最终翻译出来的手语满足文法手语的句子特性。图1为手语教学系统架构,整个系统框架分为手语文本分析处理模块和手语动画合成播放模块。两个模块之间采用Socket技术连接,将处理好的文本编码结果通过Socket 机制发送给动画合成播放模块。手语文本分析处理模块包含课文读取、课文文本分词、手语编辑调整语序、手语转码等功能。课文内容翻译成手语,体现在文本分词、手语编辑等功能的恰当应用上。老师课堂上讲语文,使用手语编辑功能将课文内容翻译成文法手语或者自然手语,最终使文本转化成动画序列并播放出来,提高讲课效率。
图1 手语教学系统架构
2.2 实现流程
聋校语文教学系统以课文内容为中心,围绕文本数据进行,根据标点符号实现初步分句,对每个句子分别做手语翻译及编辑,实现流程图如图2所示。对每个句子进行分词,形成初步的分词序列,找出直接可以用手语词表示的词语,存入待发送给动画模块的列表;不能直接用手语词表示的词语,如果是分词错误,可以使用系统的编辑功能进行重新人工手动分词;找不到对应的手语词表示,原因如果不是分词错误,可以使用手语近义词表示,若找不到手语近义词,则按照汉语拼音用对应的手语表示,并存入待发送列表。最终将待发送列表里面的手语序列转化成对应的手语动画编号,通过模块之间的Socket连接发送给动画模块。最终,文本处理结果经过动画模块转化成可视化的手语动画序列,从而达到课文文本内容转化成手语动画的目的。系统总体流程如图2所示。
图2 系统流程图
3 关键技术
3.1 分词实现
结巴分词(JieBa)[6]具有快速、简单、运行速度快、占有的内存小、分词效率高等特点,被广泛应用于各种中文自然语言处理任务中。
结巴分词原理如图3所示,基于前缀词典对文本进行词图扫描,得到句子中所有可能的成词情况构成的有向无环图(Directed Acylic Graph,DAG);采用动态规划算法查找最大概率路径,即最大切分情况;对于未在词典里出现的词语用具有汉语构词能力的HMM(Hidden Markov Model)方法处理[7]。
图3 结巴分词原理
本文使用结巴分词对文本进行分词,但是由于手语词汇数量少(5 000 多个),无法准确地表达自然中文中的所有的词语。同时结巴分词对前缀词典的依赖性较大,对手语词典进行基于外部知识库的扩充,从而提高分词的准确率和效果。因此,为了满足根据手语词语对课文句子进行分词的要求,对结巴分词进行改进。改进方面主要是扩充前缀词典[8]。在外部知识库的文本扩展中,一般有基于同义词词林或知网等的特征扩展方法[9]。采用同义词词林进行扩展手语词典,扩充方法如下:选择哈工大《同义词词林》的同义词项,找出包含手语词的项,把它们全部加入到新的词典中,作为结巴分词算法的前缀词典。例如选择《同义词词林》中的某一项。
例子Aa01A01=人士人物人士人氏人选。编号表示同义词所在的分类,等号表示在某一个上下文语义下,后面的每个词语是等价的,即同义词。手语词典中存在“人”这个词语,因此当文本中遇到“士”“人物”“人士”“人氏”等就可以进行单独分词,翻译过程中用手语词“人”的动画来替换它们。
扩充手语词典之前,手语词语只有5 000多个,当所有能表示手语的近义词加到新的词典以后,得到的代表手语语义的词语有148 656个。不论是手语分词的准确率还是翻译的质量,扩充后的词典表现更好。
3.2 文法手语编辑
手语分词完成之后,进行手语编辑、转码等操作。由于手语构词构形、语法和正常的汉语句子有很大的区别,这要求系统有编辑手语的功能。老师备课的时候可以对手语句子进行语序调整,使其满足手语语法。手语编辑区域主要有上移、下移、添加、删除词语等功能。实现原理是将分词好的词语序列放在一个链表中,上下移动手语词语,调整语序;对不满足手语词语构词构形、分词错误等词语进行删除,向句子中添加其准确的手语词语,如果手语词语不存在,则可以用近义词表示。最终按“结束”按钮生成对应的文法手语序列。
手语转码是指将文法手语序列转化成能够发送给动画模块的编码序列。其关键是制作一个手语文本词典,即手语转码表,如表1 所示。每个手语对应一个编码(ID),每个编码对应相应的手语动画。通过匹配手语词语能够查到其对应的编码,再通过这个编码播放对应的手语动画。文法手语序列是手语词语序列,为了播放该序列对应的手语动画,只要将编码发送给动画模块,调动对应的动画播放即可。
表1 手语转码表
3.3 手语动画合成
使用Maya对人体进行建模。首先创建虚拟人的骨骼,需要完整的手部骨骼模型。之后给骨骼系统添加蒙皮,如头发、脸部、上衣和裤子等。为了实现动画合成播放,使用关键帧原理[10]制作手语动画;使用Unity3D动画引擎开发手语动画模块,将Maya 做出来的虚拟人模型导入Unity中,根据关键帧动画原理实现单个动画播放,使用线性插值算法实现动画之间的过渡融合。图4 为虚拟人骨骼,图5为虚拟人的关键帧。
图4 带骨骼的虚拟人和手部骨骼
图5 表示“乌鲁木齐”的动画的关节帧
关键帧动画[11-12]通过设置物体的关键帧位置与属性,中间帧的生成均可由计算机来完成。因此在多种计算机动画技术中,关键帧动画以其便捷、智能的特点成为计算机动画中最基本、运用最广泛的方法[13]。本研究中采用关键帧技术完成手语动画的制作。给定两个关键帧,通过线性差值算法(Linear Interpolation,LERP)[14]求得其骨骼中间姿势。可表示如下:
其中,β 为混合百分或混合因子,表示两个动画之间融合的时间比例。当β 处于0~1 之间,得最终两个骨骼中间姿势。当β 为0 时,最终得到的是关键帧。当β 为1 时,最终得到的是关键帧
3.4 手语动画融合过渡
为了达到手语动画之间观赏性连贯、自然的效果,需要使用插值算法来处理动画序列。在Unity3D 游戏引擎中定义一个PlayAnimation()的协程[15]函数用于在Unity主线程中播放动画。其核心代码如下:
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 编辑系统界面 首先定义一个整型变量Count 存放要播放的手语动画数量。对该常量其中的每一个动画,得到单个动画合成播放时间time。调用Unity 游戏引擎系统提供的CrossFade()[16]函数依次播放动画,两个动画之间采用线性插值函数[14]来进行动画过渡融合,动画连接时间为第一个动画的播放时间的0.2倍,即β=0.2。最后,让协程等待时间time,并渲染播放手语动画,目的是不影响主线程渲染整个引擎。 为了得到一个完整的手语动画库,颜庆聪等人[17]采用数据手套来采集手语运动轨迹信息。由于数据手套存在价格昂贵、操作复杂等缺点,此方法不能用于辅助教学系统中。因此根据问题的需要,采用先进的动画制作软件Maya 来进行动画制作。首先使用Maya 创建完整的人体骨骼,其中包含完整的手部的骨骼。之后,在此骨骼系统基础上添加蒙皮,如脸部、头发、皮肤、衣服等,形成完整的不带动画的fbx文件。最后,给fbx文件添加动画曲线,根据手语动画,主观推测关键帧在手语动画过程中的位置,并且给动画曲线挨个添加关键帧。 由于fbx 文件里包含了完整的骨骼和蒙皮信息,使用fbx 会导致动画库过于庞大,不便于使用。因此需要把动画从fbx 文件里分离出来。将fbx 导入Unity 游戏引擎中,Unity 引擎能够识别出是否含有动画。如果有动画就能够使用Unity引擎的动画分离功能批量分离出单独的动画文件,即动画库中的最小元素anim 文件。anim 文件只包含骨骼运动的信息,相比于带蒙皮信息的fbx文件,anim文件具有占用空间小、操作性强、易用性等特点。同时anim 动画能够很好地导入Unity3D 引擎中,以便用于动画合成、动画播放及动画过渡融合等操作。 开发环境为:Visual Studio 2017版本,Unity 2018.1.2f1(64-bit)。使用微软提供的基于C#语言的用户界面框架WPF(Windows Presentation Foundation)开发课文处理模块,选择C#语言实现课文分句、分词、手语编辑、新词添加、近义词表示等功能;使用服务器/客户端模式(B/C)实现课文处理模块和动画模块之间的通信交互,目的是为了将待发送列表里的手语编号序列发送给动画模块。 系统编辑界面由课文分句、虚拟人、手语编辑、文法手语显示等功能模块组成,如图6所示。课文分句功能负责将输入进来的文本进行分句,以便以句子为单位进行手语翻译教学。虚拟人由Unity3D游戏引擎开发,嵌入到桌面应用中,负责手语动画的播放显示。由于面向聋哑学生的语文教学对手语翻译准确率要求很高,手语编辑提供对课文句子编辑的功能,使翻译准确率得到全面提升。 以聋哑学校第十册第一篇课文的第一句话为例进行实验,并给出对应系统使用分析。例如:“清晨,天气格外晴朗,温暖的阳光洒满山村”,首先对这句话采用改进的结巴分词算法进行分词,得到图7中的结果。 图7 文法手语的例子 该句子中,分词后得到9 个词语,其中只有3 个(蓝色背景)词语能够直接被手语表示,显然这无法满足教学要求,无法做到文本翻译成手语。因此需要通过编辑功能,使用近义词或者重新分词等人工干预操作,将例子中的每个词语直接用手语表示。 图8 左图中,词语“清晨”“格外”“晴朗”“阳光”“洒满”“山村”都不能直接用手语表示。可以采用编辑功能将它们用近义词等表示成手语词语,如图8右图。此方法能够准确传递文本中的句子信息,又能让聋哑学生学习更多的词语意思。 图8 编辑功能(左)及编辑后的句子(右) 对比颜庆聪等人设计的成型系统[17],本系统有设计简单、手语数据采集简便、跨平台性、手语翻译结果准确等优点。首先,本文使用Maya 等专业建模软件制作动画,基于关键帧算法合成手语动画,反观颜庆聪等人使用Glove数据手套采集手部运动轨迹的数据,此方法具有不好精确控制手部运动轨迹、做出的手语动画不准确等缺点。其次,本文使用Unity3D动画引擎来渲染手语动画,Unity3D 引擎具有跨平台性,可以在苹果、安卓、Linux 等系统中运行,相对于颜庆聪等人的系统更具有广泛使用的优点。最后,此系统包含手语编辑等功能,对于文本具有词语级别的精细控制,翻译结果更准确。 手语教学作为一种特殊教学方式,需要多方面合作。开发一种手语教学系统能够减轻老师备课、上课的压力,也给聋哑学生提供一个自主学习的工具,开拓他们的视野,同时为听人提供一种学习手语途径,起到促进听人和聋哑人交流的作用。但这在手语教学推广过程中远远是不够的。手语教学需要多方合作,如家长、老师等都要参与到聋哑学生的学习、教育、生活中。3.5 手语动画库建立
4 实验结果与分析
5 结论