论文部分内容阅读
[摘 要] 本研究根据日语发音的特点,采集发音口型特征点,利用样条曲线绘制口型动画,提出了在日语学习软件系统中实现口型动画的可行方案。该方案可以根据学习者学习需要,对任意指定的单词、句子和假名,在屏幕上输出连贯的发音口型动画。
[关键词] 日语学习; 口型动画技术; 假名驱动
[中图分类号] G434 [文献标识码] A
[作者简介] 刘小丹(1957—),男,吉林蛟河人。教授,硕士生导师,主要从事图像处理和计算机图形学研究。E-mail: xdliu@lnnu.edu.cn。
一、问题的提出
随着计算机科学与网络技术的发展,基于计算机平台的外语学习软件也越来越多样化。日语在我国作为学习人数位列第二位的外语,网上出现了大量关于日语学习的多媒体教学软件。《标准日本语》、《日语五十音速成一日通》、《学日语背单词真人语音版》等都是面向初学者学习日语的软件,融合了视频教学与真人发音,并为用户提供手写练笔、单词查询、测试以及句型学习等功能。在这些软件中,虽然侧重点各不相同,表现形式多样,但普遍没有引入发音口型动画。尽管如《标准日本语》等一些日语教材通过录制真人视频的方式,为学习者提供直观发音口型和即时模仿机会,但由于这种软件中的视频都是通过事先录制形成的,软件系统无法根据用户学习需求自动生成合适的发音口型,缺乏适应性和灵活度,从而影响学习效果。例如,如果学习者需要一句话的发音,而这句话的视频在软件系统中并没有事先录制,这时既使是录制了每个假名的独立发音和一些子句的发音,系统也无法提供这句话的连贯发音口型,学习者只能根据每个假名的口型自己猜想这句话的发音口型了。本研究根据日语发音的特点,通过采集发音口型特征点的方式,利用样条曲线技术绘制出口型动画,形成了一种日语假名驱动口型动画的方法。该方法在日语学习软件系统中能灵活地根据学习者的指定,对任意句子、短语、单词等语法单位显示其连贯的发音口型动画,从而使学习软件的发音训练功能更加有效。
二、实现方案
通过假名驱动形成口型动画,在技术上涉及嘴唇建模、假名静态视位的建立、假名驱动、口型特征点的选取与绘制以及视位动态调整等多个环节。这些环节之间的关系如图1所示,下面将分别介绍。
1.嘴唇建模方式
嘴唇模型的建立涉及到嘴唇及其周围的骨骼、肌肉和皮肤的建模。人们在逐渐对嘴唇肌肉及其运动方式了解的情况下,将真实的嘴唇抽象为计算机建立的虚拟模型。嘴唇建模的方法主要分为肌肉模型、参数模型、几何模型和特征模型等。肌肉模型是通过建立人脸各肌肉的形变物理力学模型之间的关系来模拟人脸运动的规律。1981年Platt创造出了基于物理肌肉控制的人脸模型,[1]通过对肌肉施加力来对皮肤网格进行控制和变形,进而得到人脸的面部表情。参数模型的方法则将人脸用一组坐标值来表示,其中特征点由预定义的函数获得,其他非特征点的坐标利用插值函数获得。1974年Parke创造了人脸参数模型,[2][3]之后,又提出了改进的人脸参数模型。几何模型的方法是将表情基线性组合成表情,从而使对人脸的表情变化的计算量减少。Jenkins等人利用几何模型中的Blendshape插值法从照片获取口型基,然后合成二维口型模型,再通过在二维口型上加入系数,应用到三维空间来融合三维关键形态,最后形成三维口型动画。特征模型的方法是从真实的照片中提取嘴唇的特征点,根据不同的角度对相同的特征点坐标进行提取,然后计算在三维空间中这些特征点的坐标位置,最后插值重构出一个嘴唇的模型。绪方信等人[4]基于这种方法合成了声音驱动的三维口型,让实验者朗读假名并拍成照片,不同假名之间的过渡利用插值来完成。
以上提到的口型建模方法各有其优缺点。肌肉模型可以较逼真地模拟脸部的运动,但运算量相对较大。参数模型虽不需要考虑口型肌肉的复杂生理结构,但需要对大量的样本数据进行学习来建立口型参数。几何模型较前两种方法计算量相对小,但真实度不够。特征模型则需要采集大量照片信息,手工工作量较大,而且对计算机的处理速度有着比较高的要求。笔者考虑本文绘制的口型是针对日语学习,对嘴唇生理上的逼真度要求并不高,但对口型发音的逼真度要求较高,因此采用特征模型的方式通过真人发音取特征点来绘制二维口型比较合适。这样做的优点是可以用少量的特征点来表现口型,计算量小,缺点是口型的逼真度略差一些。
2.假名静态视位的建立
MPEG-4是由国际标准化组织的运动图像专家组开发的,是一种关于运动图像的定义标准。MPEG-4中对视位的定义是:Viseme is the physical(Visual) Configuration of the Mouth, Tongue and Jaw That is Visually Correlated With the Speech Sound Corresponding to a Phoneme, 即视位是指与某一音位相对应的嘴、舌头、下颚等可视发音器官所处的状态。[5]每个视位都对应着发音中的一个音位,由于音位是与某一特定的语言密切相关的,因此视位也是与语言相关的。元音是决定口型的关键因素,日语元音发音时比汉语的位置更靠前,而口型没有汉语变化明显。[6]MPEG-4中基于英语国际音标的发音定义了15种静态视位,对日语无法直接使用,因此,需要重新建立。
日语的音节主要分为两种,单因素音节和多因素音节。[7]其中,单因素音节全部为单元音型(Vowel),例如あ(a)和い(i)。多因素音节分为复元音型(Semi-vowel),例如や(ya)和ゆ(yu);辅音元音合成型(Consonant),例如か(ka)和き(ki);辅音复元音合成型(Consonant Semi-vowel),例如きゃ(kya)和きゅ(kyu)。通过实验,我们将日语的口型的静态视位进行了重新构建(如表1所示)。其中,五个元音为单元音,清音和浊音为辅音元音合成型,半元音为复元音型,拗音为辅音复元音合成型,但由于拗音的终止静态视位与半元音相同,因此不单独列出来。
3.日语假名驱动
计算机动画驱动方式主要有文本驱动、声音驱动和视频流驱动等。假名驱动属于文本驱动中的一种方式,即用户输入日语假名,屏幕上根据输入的假名输出对应的口型动画。在实现假名驱动之前,需要解决一个问题,就是怎样使日语的假名像字符一样被编程语言识别。汉语拼音和英语国际音标的驱动方式有一个共同点,就是都可以由英语的字符直接表示,不需要在程序中加入转换的代码。而日语则不同,在编程中,虽然可以使用类似“TextOut(hdc,30,30,‘おはよう’,strlen(‘おはよう’))”,在屏幕上输出假名,但不能在程序中对假名直接进行操作,例如类似“if(strcmp(a,‘お’)=0)”语句中对假名进行判断操作。为了实现日语假名的驱动方式,本研究试用了两种方法。第一种是键盘捕获,即不关心输入的是哪个假名,而是直接将用户在键盘上的按键位置获取下来,再根据按键位置判断假名的读音。第二种是将假名读入之后再进行操作,由于日语同英语不同,不是每个字节(char)都代表一个音节单位,而是双字节表示。因此利用世界通用的Unicode代码来解决这一问题,即利用函数将读入的假名的Unicode代码提取出来存放到数组中,然后再进行操作。比较之下,第二种方式更适合本文。既能通过键盘输入文本,又能直接读取已有的文本文件。
4.口型特征点的选取
采用特征模型的方式建立口型模型的好坏,很大程度上取决于特征点的选取。本文的口型特征点借鉴了MPEG-4人脸模型规范中的口型特征点(如图1所示)。之所以选用MPEG-4人脸模型规范,主要是考虑到它的可移植性高而且定义的特征点基本覆盖整个面部,可以详细地描述各个区域的运动。本研究在MPEG-4中定义的嘴部的18个FDP特征点的基础上进行删减,保留了14个特征点,这14个特征点被分为4组。
第1组:外唇边缘定义嘴唇位置的左右2个点(图2中的8.3和8.4);
第2组:内唇边缘定义内唇位置的左右2个点(图2中的2.4和2.5);
第3组:外唇上下定义口型张合的上下5个点(图2中的8.9、8.1、8.10、8.7和8.8);
第4组:内唇上下定义口型张合的上下5个点(图2中的2.7、2.2、2.6、2.8和2.9)。
将这些特征点用线段连接后,如图3所示。
利用这14个特征点,可以基本模拟出发音口型。在具体实现上,首先用照相机拍摄实验者初始不发音时的口型,再让实验者分别发出文中所需的日语假名,拍下对应的静态口型。拍摄过程在室内冷光灯下进行,基本上保证没有其他光线的干扰。实验过程对3个人进行拍摄,进行同样文本的朗读,即日语的假名以及30秒的句子朗读。通过照片的信息,可以得到特征点的位移变化。其中,图4为其中一个人读“え(e)”的口型,黑色的特征点是照片拍摄后手工添加的。
5.口型的绘制
在选取了合适的特征点后,连接这些特征点的方式会直接影响口型绘制的速度和效果。线段连接是最简单的方式,它的优点是连接速度快,缺点是口型逼真度略低,尤其是嘴角处过尖。这种方法适用于简单而不注重口型真实度的教学型口型动画,例如网络虚拟教师。但不太适用于语音教学动画,因为和真实的口型相差较大,理解模仿起来有一定困难。
为了在口型的绘制速度和绘制效果之间得到较好的平衡,本文采用二次B样条曲线来绘制口型。即将整个口型分为外嘴唇上、下以及内嘴唇上、下四部分,每部分的特征点分别连接成一条二次B样条曲线,最终合成一张完整的口型。下面以绘制上嘴唇外部曲线为例,给出核心代码(Visual C++ 6.0)。
/*now[][]存储当前绘制的口型特征点坐标*/
MoveToEx(hdcMem,now[0][0],now[0][1],NULL); /*首先将光标移到起始点*/
for(i=1;i<4;i++) /*绘制上嘴唇外部*/
for(j=1;j<=k;j++)
{
t1=j*t;
x=(int)((t1-1)*(t1-1)*0.5*now[i-1][0]+(-2*t1*t1+2*t1+1)*0.5*now[i][0]+
1*t1*0.5*now[i+1][0]);/*特征点x坐标*/
y=(int)((t1-1)*(t1-1)*0.5*now[i-1][1]+(-2*t1*t1+2*t1+1)*0.5*now[i][1]+t1*t1*0.5*now[i+1][1]);/*特征点y坐标*/
LineTo(hdcMem,x,y);
}
LineTo(hdcMem,now[4][0],now[4][1]);
MoveToEx(hdcMem,now[4][0],now[4][1],NULL); /*由线段连接上下嘴唇*/
这样解决了静态口型的模拟问题。但是人们在发音时,口型并不是突兀地从一个变为另一个,而是自然流畅地进行过渡。为了实现更真实的口型动画效果,我们考虑到了过渡口型曲线。日语的一般语速是每分钟250字左右,即每秒钟4个字。电影中的动画是每秒24帧,游戏中,最低帧数是30帧。也就是说,我们制作的口型动画中每两个口型之间至少要再加入5帧过渡口型曲线,才能合成人眼睛所能接受的口型动画。
绘制动画主要有三种方式,即逐张画法、原动画法和逐张画法与原动画法相结合。[8]第一种方式就是指每张动画都要单独绘制出来,应用在本文中,就是过渡口型曲线的特征点,全部通过相机连续拍摄得到后逐张绘制。第二种方式就是将动作的初始和终止的原画绘制出来之后,中间的过渡动画由初始到终止进行过渡处理得到。应用到本文中是口型的初始和终止视位通过拍照取特征点绘制,中间过渡动画由插值计算获得。最后一种方式是将动画中的动作按照主次来绘制,即先绘制最主要动作的原画,然后绘制次重要部分的原画,在所有重要部分绘制之后,最后加入中间的过渡画。这种方式应用到本文中是初始和终止以及中间某些重要口型由拍照获得,其他由过渡动画计算得到。第一种方式的拍照工作量太大而且对实验者的时间控制能力要求很高,第二种方式虽然效率高但无法表现某些具有复杂变化的假名发音口型。如辅音的口型就无法直接通过初始口型直接过渡到终止口型,中间还需再加入一张关键帧画面。我们采用的是第三种方式,初始、终止以及重要口型由拍照获得,其他中间过渡口型利用插值算法来获得。插值是在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点,利用函数在有限个点处的取值状况,估算出函数在其他点处的近似值。口型具体绘制过程如图5所示。
6.视位动态调整
口头语言与书面语言不同,它并不是音节、词汇等简单而机械地加和汇总,而是按照比较复杂的规律进行有机的结合。在前一个音的发音期间,发音器官就开始作下一个音的准备,逐渐向下一个音的部位移动。在声学上,不仅表现为前一音后半段向后一音的过渡趋势,而且前一个音本身的音值偏离单独发音的标准状态。在本研究中,考虑到日语中主要体现为第二行开始的音(か、き、く、…、よ),这些假名的发音口型动画是由上一个假名先过渡到辅音(k,p,m…),再过渡到构成该假名的元音。具体公式为:
Xnow(i,j)=Xformer(i,j)+(k*(Xmiddle(i,j)-Xformer(i,j)))/2
Ynow(i,j)=Yformer(i,j)+(k*(Ymiddle(i,j)-Yformer(i,j)))/2 2-1
Xnow(i,j)=Xmiddle(i,j)+((k-2)*(Xlast(i,j)-Xmiddle(i,j)))/3
Ynow(i,j)=Ymiddle(i,j)+((k-2)*(Ylast(i,j)-Ymiddle(i,j)))/32-2
其中,公式(2-1)表示从上一个假名的终止口型视位过渡到该假名的辅音口型视位,公式(2-2)表示从该假名的辅音口型视位过渡到最终该假名的元音口型视位。Xnow(i,j),Ynow(i,j)分别为当前口型特征点的x,y坐标;Xformer(i,j),Yformer(i,j)分别为上一个假名终止口型特征点的x,y坐标;Xmiddle(i,j),Ymiddle(i,j)分别为该假名的辅音(k、p、m…)口型视位特征点x,y坐标;Xlast(i,j),Ylast(i,j)分别为当前假名的终止口型特征点的x,y坐标。程序中对应的代码如下:
for(int i =0;i<16;i++)
{/*14个特征点中,内外嘴唇的第一个特征点均使用两次形成闭合曲线,因此循环进行16次*/
for(int j =0;j<2;j++)
{
if(picno<3)
now[i][j]=h.final[i][j]+(picno*(middle[i][j]-h.final[i][j]))/2;
else
now[i][j]=middle[i][j]+((picno-2)*(final[i][j]-middle[i][j]))/3;
}
}
以“か(ka)”的过渡口型动画为例:先由上一个假名的最终口型视位过渡到“k”,再过渡到最终口型“a”。 我们可以绘制出由前一个假名为“あ(a)”的终止口型过渡的“か(ka)”(见图6),并与图7中的真实照片对比。
三、假名驱动口型动画技术的应用与特点
以笔者学习日语的经验以及对日语专业和非日语专业同学的调查,我们认为根据不同的日语学习系统的设计目的和针对性,假名驱动口型动画技术可以应用于以下日语学习软件系统中:(1)五十音图学习。主要针对日语初学者,软件一般只提供五十音图中的假名发音以及简单的单词,不涉及到单词间协同发音,可将程序简化成全部口型均有初始闭嘴口型过渡到终止假名。(2)单词学习及背诵。针对一般日语学习者,软件提供日语单词的解释、读音和口型动画,涉及到前后假名的过渡,但不涉及到助词的变音,可直接使用本文提供的程序。(3)综合语音学习。针对一般日语学习者,软件提供日语单词的解释、读音,例句的解释、读音和口型动画,涉及到单词中前后假名的过渡和句子中助词的变音以及其他变音,将本文提供的程序加上变音的判断。
加入了假名驱动口型动画后的日语多媒体学习软件系统将具有如下几个特点:(1)视听同步。口型动画以及文字信息可以和声音配合同步播放,使用户在听的同时既能看到口型也能看到文字,不需携带书本。这样使用户无需一边看屏幕一边翻书,可以更加集中精力学习发音口型。(2)易于操作。用户只需掌握简单的假名五十音的输入,即可进行人机交互,使输入的文字转化成口型在屏幕上输出。(3)灵活度高。用户只需输入假名,就可以完成传统方法难以完成的任意单词或句子的口型动画。无论用户输入的句子是否合理,系统都会为用户提供准确的发音口型动画以便用户模仿。
四、结束语
本研究工作探索了日语假名驱动的口型发音动画方法,为日语学习软件开发提供了一种实用技术。在二维的情况下模拟口型动画逼真程度有限,如果能将二维的特征点运用到三维模型中,将具有更好的视觉效果。另外,人在说话的过程中语速并不是完全匀速的,如果能更好地将语速这一动态变量加入到口型动画的制作中,口型动画能更好地配合声音展现出独特的魅力。
[参考文献]
[1] K. Waters, J Frisbie. A Coordinated Muscle Mode for Speech Animation[A].In Graphics Interface’95[C].1995.163~170.
[2] F. I. Parke. ParameterizedModels for Facial Animation[J].IEEE Computer Graphics, 1982,2(9):61~68.
[3] F. I. Parke. Parameterization for Facial Animation[R].Computer Animation, Tokyo: Springer- Verlag,1991.3~13.
[4] 緒方信,中村哲,森島繁生.自動翻訳合成音声とのモデルベースリップシンクの実現[R].インタラクションポログラム, 2001.203~210.
[5] ISO/IEC14496-2, Information Technology-Coding of Audio-Visual Objects-Parts 2: Visual[S].1999.
[6] 徐一平.日本语言[M].北京:高等教育出版社,1999.14~15.
[7] 张慧明.现代日语的音节研究——基本音节与扩张音节[J].东南亚研究,2009,(4):87~92.
[8] Richard Willams.原动画基础教程——动画人的生存手册[M].邓晓娥译.北京:中国青年出版社,2006.121~152.
基金项目:辽宁省高等学校优秀人才支持计划基金资助项目(项目编号:200811833)
[关键词] 日语学习; 口型动画技术; 假名驱动
[中图分类号] G434 [文献标识码] A
[作者简介] 刘小丹(1957—),男,吉林蛟河人。教授,硕士生导师,主要从事图像处理和计算机图形学研究。E-mail: xdliu@lnnu.edu.cn。
一、问题的提出
随着计算机科学与网络技术的发展,基于计算机平台的外语学习软件也越来越多样化。日语在我国作为学习人数位列第二位的外语,网上出现了大量关于日语学习的多媒体教学软件。《标准日本语》、《日语五十音速成一日通》、《学日语背单词真人语音版》等都是面向初学者学习日语的软件,融合了视频教学与真人发音,并为用户提供手写练笔、单词查询、测试以及句型学习等功能。在这些软件中,虽然侧重点各不相同,表现形式多样,但普遍没有引入发音口型动画。尽管如《标准日本语》等一些日语教材通过录制真人视频的方式,为学习者提供直观发音口型和即时模仿机会,但由于这种软件中的视频都是通过事先录制形成的,软件系统无法根据用户学习需求自动生成合适的发音口型,缺乏适应性和灵活度,从而影响学习效果。例如,如果学习者需要一句话的发音,而这句话的视频在软件系统中并没有事先录制,这时既使是录制了每个假名的独立发音和一些子句的发音,系统也无法提供这句话的连贯发音口型,学习者只能根据每个假名的口型自己猜想这句话的发音口型了。本研究根据日语发音的特点,通过采集发音口型特征点的方式,利用样条曲线技术绘制出口型动画,形成了一种日语假名驱动口型动画的方法。该方法在日语学习软件系统中能灵活地根据学习者的指定,对任意句子、短语、单词等语法单位显示其连贯的发音口型动画,从而使学习软件的发音训练功能更加有效。
二、实现方案
通过假名驱动形成口型动画,在技术上涉及嘴唇建模、假名静态视位的建立、假名驱动、口型特征点的选取与绘制以及视位动态调整等多个环节。这些环节之间的关系如图1所示,下面将分别介绍。
1.嘴唇建模方式
嘴唇模型的建立涉及到嘴唇及其周围的骨骼、肌肉和皮肤的建模。人们在逐渐对嘴唇肌肉及其运动方式了解的情况下,将真实的嘴唇抽象为计算机建立的虚拟模型。嘴唇建模的方法主要分为肌肉模型、参数模型、几何模型和特征模型等。肌肉模型是通过建立人脸各肌肉的形变物理力学模型之间的关系来模拟人脸运动的规律。1981年Platt创造出了基于物理肌肉控制的人脸模型,[1]通过对肌肉施加力来对皮肤网格进行控制和变形,进而得到人脸的面部表情。参数模型的方法则将人脸用一组坐标值来表示,其中特征点由预定义的函数获得,其他非特征点的坐标利用插值函数获得。1974年Parke创造了人脸参数模型,[2][3]之后,又提出了改进的人脸参数模型。几何模型的方法是将表情基线性组合成表情,从而使对人脸的表情变化的计算量减少。Jenkins等人利用几何模型中的Blendshape插值法从照片获取口型基,然后合成二维口型模型,再通过在二维口型上加入系数,应用到三维空间来融合三维关键形态,最后形成三维口型动画。特征模型的方法是从真实的照片中提取嘴唇的特征点,根据不同的角度对相同的特征点坐标进行提取,然后计算在三维空间中这些特征点的坐标位置,最后插值重构出一个嘴唇的模型。绪方信等人[4]基于这种方法合成了声音驱动的三维口型,让实验者朗读假名并拍成照片,不同假名之间的过渡利用插值来完成。
以上提到的口型建模方法各有其优缺点。肌肉模型可以较逼真地模拟脸部的运动,但运算量相对较大。参数模型虽不需要考虑口型肌肉的复杂生理结构,但需要对大量的样本数据进行学习来建立口型参数。几何模型较前两种方法计算量相对小,但真实度不够。特征模型则需要采集大量照片信息,手工工作量较大,而且对计算机的处理速度有着比较高的要求。笔者考虑本文绘制的口型是针对日语学习,对嘴唇生理上的逼真度要求并不高,但对口型发音的逼真度要求较高,因此采用特征模型的方式通过真人发音取特征点来绘制二维口型比较合适。这样做的优点是可以用少量的特征点来表现口型,计算量小,缺点是口型的逼真度略差一些。
2.假名静态视位的建立
MPEG-4是由国际标准化组织的运动图像专家组开发的,是一种关于运动图像的定义标准。MPEG-4中对视位的定义是:Viseme is the physical(Visual) Configuration of the Mouth, Tongue and Jaw That is Visually Correlated With the Speech Sound Corresponding to a Phoneme, 即视位是指与某一音位相对应的嘴、舌头、下颚等可视发音器官所处的状态。[5]每个视位都对应着发音中的一个音位,由于音位是与某一特定的语言密切相关的,因此视位也是与语言相关的。元音是决定口型的关键因素,日语元音发音时比汉语的位置更靠前,而口型没有汉语变化明显。[6]MPEG-4中基于英语国际音标的发音定义了15种静态视位,对日语无法直接使用,因此,需要重新建立。
日语的音节主要分为两种,单因素音节和多因素音节。[7]其中,单因素音节全部为单元音型(Vowel),例如あ(a)和い(i)。多因素音节分为复元音型(Semi-vowel),例如や(ya)和ゆ(yu);辅音元音合成型(Consonant),例如か(ka)和き(ki);辅音复元音合成型(Consonant Semi-vowel),例如きゃ(kya)和きゅ(kyu)。通过实验,我们将日语的口型的静态视位进行了重新构建(如表1所示)。其中,五个元音为单元音,清音和浊音为辅音元音合成型,半元音为复元音型,拗音为辅音复元音合成型,但由于拗音的终止静态视位与半元音相同,因此不单独列出来。
3.日语假名驱动
计算机动画驱动方式主要有文本驱动、声音驱动和视频流驱动等。假名驱动属于文本驱动中的一种方式,即用户输入日语假名,屏幕上根据输入的假名输出对应的口型动画。在实现假名驱动之前,需要解决一个问题,就是怎样使日语的假名像字符一样被编程语言识别。汉语拼音和英语国际音标的驱动方式有一个共同点,就是都可以由英语的字符直接表示,不需要在程序中加入转换的代码。而日语则不同,在编程中,虽然可以使用类似“TextOut(hdc,30,30,‘おはよう’,strlen(‘おはよう’))”,在屏幕上输出假名,但不能在程序中对假名直接进行操作,例如类似“if(strcmp(a,‘お’)=0)”语句中对假名进行判断操作。为了实现日语假名的驱动方式,本研究试用了两种方法。第一种是键盘捕获,即不关心输入的是哪个假名,而是直接将用户在键盘上的按键位置获取下来,再根据按键位置判断假名的读音。第二种是将假名读入之后再进行操作,由于日语同英语不同,不是每个字节(char)都代表一个音节单位,而是双字节表示。因此利用世界通用的Unicode代码来解决这一问题,即利用函数将读入的假名的Unicode代码提取出来存放到数组中,然后再进行操作。比较之下,第二种方式更适合本文。既能通过键盘输入文本,又能直接读取已有的文本文件。
4.口型特征点的选取
采用特征模型的方式建立口型模型的好坏,很大程度上取决于特征点的选取。本文的口型特征点借鉴了MPEG-4人脸模型规范中的口型特征点(如图1所示)。之所以选用MPEG-4人脸模型规范,主要是考虑到它的可移植性高而且定义的特征点基本覆盖整个面部,可以详细地描述各个区域的运动。本研究在MPEG-4中定义的嘴部的18个FDP特征点的基础上进行删减,保留了14个特征点,这14个特征点被分为4组。
第1组:外唇边缘定义嘴唇位置的左右2个点(图2中的8.3和8.4);
第2组:内唇边缘定义内唇位置的左右2个点(图2中的2.4和2.5);
第3组:外唇上下定义口型张合的上下5个点(图2中的8.9、8.1、8.10、8.7和8.8);
第4组:内唇上下定义口型张合的上下5个点(图2中的2.7、2.2、2.6、2.8和2.9)。
将这些特征点用线段连接后,如图3所示。
利用这14个特征点,可以基本模拟出发音口型。在具体实现上,首先用照相机拍摄实验者初始不发音时的口型,再让实验者分别发出文中所需的日语假名,拍下对应的静态口型。拍摄过程在室内冷光灯下进行,基本上保证没有其他光线的干扰。实验过程对3个人进行拍摄,进行同样文本的朗读,即日语的假名以及30秒的句子朗读。通过照片的信息,可以得到特征点的位移变化。其中,图4为其中一个人读“え(e)”的口型,黑色的特征点是照片拍摄后手工添加的。
5.口型的绘制
在选取了合适的特征点后,连接这些特征点的方式会直接影响口型绘制的速度和效果。线段连接是最简单的方式,它的优点是连接速度快,缺点是口型逼真度略低,尤其是嘴角处过尖。这种方法适用于简单而不注重口型真实度的教学型口型动画,例如网络虚拟教师。但不太适用于语音教学动画,因为和真实的口型相差较大,理解模仿起来有一定困难。
为了在口型的绘制速度和绘制效果之间得到较好的平衡,本文采用二次B样条曲线来绘制口型。即将整个口型分为外嘴唇上、下以及内嘴唇上、下四部分,每部分的特征点分别连接成一条二次B样条曲线,最终合成一张完整的口型。下面以绘制上嘴唇外部曲线为例,给出核心代码(Visual C++ 6.0)。
/*now[][]存储当前绘制的口型特征点坐标*/
MoveToEx(hdcMem,now[0][0],now[0][1],NULL); /*首先将光标移到起始点*/
for(i=1;i<4;i++) /*绘制上嘴唇外部*/
for(j=1;j<=k;j++)
{
t1=j*t;
x=(int)((t1-1)*(t1-1)*0.5*now[i-1][0]+(-2*t1*t1+2*t1+1)*0.5*now[i][0]+
1*t1*0.5*now[i+1][0]);/*特征点x坐标*/
y=(int)((t1-1)*(t1-1)*0.5*now[i-1][1]+(-2*t1*t1+2*t1+1)*0.5*now[i][1]+t1*t1*0.5*now[i+1][1]);/*特征点y坐标*/
LineTo(hdcMem,x,y);
}
LineTo(hdcMem,now[4][0],now[4][1]);
MoveToEx(hdcMem,now[4][0],now[4][1],NULL); /*由线段连接上下嘴唇*/
这样解决了静态口型的模拟问题。但是人们在发音时,口型并不是突兀地从一个变为另一个,而是自然流畅地进行过渡。为了实现更真实的口型动画效果,我们考虑到了过渡口型曲线。日语的一般语速是每分钟250字左右,即每秒钟4个字。电影中的动画是每秒24帧,游戏中,最低帧数是30帧。也就是说,我们制作的口型动画中每两个口型之间至少要再加入5帧过渡口型曲线,才能合成人眼睛所能接受的口型动画。
绘制动画主要有三种方式,即逐张画法、原动画法和逐张画法与原动画法相结合。[8]第一种方式就是指每张动画都要单独绘制出来,应用在本文中,就是过渡口型曲线的特征点,全部通过相机连续拍摄得到后逐张绘制。第二种方式就是将动作的初始和终止的原画绘制出来之后,中间的过渡动画由初始到终止进行过渡处理得到。应用到本文中是口型的初始和终止视位通过拍照取特征点绘制,中间过渡动画由插值计算获得。最后一种方式是将动画中的动作按照主次来绘制,即先绘制最主要动作的原画,然后绘制次重要部分的原画,在所有重要部分绘制之后,最后加入中间的过渡画。这种方式应用到本文中是初始和终止以及中间某些重要口型由拍照获得,其他由过渡动画计算得到。第一种方式的拍照工作量太大而且对实验者的时间控制能力要求很高,第二种方式虽然效率高但无法表现某些具有复杂变化的假名发音口型。如辅音的口型就无法直接通过初始口型直接过渡到终止口型,中间还需再加入一张关键帧画面。我们采用的是第三种方式,初始、终止以及重要口型由拍照获得,其他中间过渡口型利用插值算法来获得。插值是在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点,利用函数在有限个点处的取值状况,估算出函数在其他点处的近似值。口型具体绘制过程如图5所示。
6.视位动态调整
口头语言与书面语言不同,它并不是音节、词汇等简单而机械地加和汇总,而是按照比较复杂的规律进行有机的结合。在前一个音的发音期间,发音器官就开始作下一个音的准备,逐渐向下一个音的部位移动。在声学上,不仅表现为前一音后半段向后一音的过渡趋势,而且前一个音本身的音值偏离单独发音的标准状态。在本研究中,考虑到日语中主要体现为第二行开始的音(か、き、く、…、よ),这些假名的发音口型动画是由上一个假名先过渡到辅音(k,p,m…),再过渡到构成该假名的元音。具体公式为:
Xnow(i,j)=Xformer(i,j)+(k*(Xmiddle(i,j)-Xformer(i,j)))/2
Ynow(i,j)=Yformer(i,j)+(k*(Ymiddle(i,j)-Yformer(i,j)))/2 2-1
Xnow(i,j)=Xmiddle(i,j)+((k-2)*(Xlast(i,j)-Xmiddle(i,j)))/3
Ynow(i,j)=Ymiddle(i,j)+((k-2)*(Ylast(i,j)-Ymiddle(i,j)))/32-2
其中,公式(2-1)表示从上一个假名的终止口型视位过渡到该假名的辅音口型视位,公式(2-2)表示从该假名的辅音口型视位过渡到最终该假名的元音口型视位。Xnow(i,j),Ynow(i,j)分别为当前口型特征点的x,y坐标;Xformer(i,j),Yformer(i,j)分别为上一个假名终止口型特征点的x,y坐标;Xmiddle(i,j),Ymiddle(i,j)分别为该假名的辅音(k、p、m…)口型视位特征点x,y坐标;Xlast(i,j),Ylast(i,j)分别为当前假名的终止口型特征点的x,y坐标。程序中对应的代码如下:
for(int i =0;i<16;i++)
{/*14个特征点中,内外嘴唇的第一个特征点均使用两次形成闭合曲线,因此循环进行16次*/
for(int j =0;j<2;j++)
{
if(picno<3)
now[i][j]=h.final[i][j]+(picno*(middle[i][j]-h.final[i][j]))/2;
else
now[i][j]=middle[i][j]+((picno-2)*(final[i][j]-middle[i][j]))/3;
}
}
以“か(ka)”的过渡口型动画为例:先由上一个假名的最终口型视位过渡到“k”,再过渡到最终口型“a”。 我们可以绘制出由前一个假名为“あ(a)”的终止口型过渡的“か(ka)”(见图6),并与图7中的真实照片对比。
三、假名驱动口型动画技术的应用与特点
以笔者学习日语的经验以及对日语专业和非日语专业同学的调查,我们认为根据不同的日语学习系统的设计目的和针对性,假名驱动口型动画技术可以应用于以下日语学习软件系统中:(1)五十音图学习。主要针对日语初学者,软件一般只提供五十音图中的假名发音以及简单的单词,不涉及到单词间协同发音,可将程序简化成全部口型均有初始闭嘴口型过渡到终止假名。(2)单词学习及背诵。针对一般日语学习者,软件提供日语单词的解释、读音和口型动画,涉及到前后假名的过渡,但不涉及到助词的变音,可直接使用本文提供的程序。(3)综合语音学习。针对一般日语学习者,软件提供日语单词的解释、读音,例句的解释、读音和口型动画,涉及到单词中前后假名的过渡和句子中助词的变音以及其他变音,将本文提供的程序加上变音的判断。
加入了假名驱动口型动画后的日语多媒体学习软件系统将具有如下几个特点:(1)视听同步。口型动画以及文字信息可以和声音配合同步播放,使用户在听的同时既能看到口型也能看到文字,不需携带书本。这样使用户无需一边看屏幕一边翻书,可以更加集中精力学习发音口型。(2)易于操作。用户只需掌握简单的假名五十音的输入,即可进行人机交互,使输入的文字转化成口型在屏幕上输出。(3)灵活度高。用户只需输入假名,就可以完成传统方法难以完成的任意单词或句子的口型动画。无论用户输入的句子是否合理,系统都会为用户提供准确的发音口型动画以便用户模仿。
四、结束语
本研究工作探索了日语假名驱动的口型发音动画方法,为日语学习软件开发提供了一种实用技术。在二维的情况下模拟口型动画逼真程度有限,如果能将二维的特征点运用到三维模型中,将具有更好的视觉效果。另外,人在说话的过程中语速并不是完全匀速的,如果能更好地将语速这一动态变量加入到口型动画的制作中,口型动画能更好地配合声音展现出独特的魅力。
[参考文献]
[1] K. Waters, J Frisbie. A Coordinated Muscle Mode for Speech Animation[A].In Graphics Interface’95[C].1995.163~170.
[2] F. I. Parke. ParameterizedModels for Facial Animation[J].IEEE Computer Graphics, 1982,2(9):61~68.
[3] F. I. Parke. Parameterization for Facial Animation[R].Computer Animation, Tokyo: Springer- Verlag,1991.3~13.
[4] 緒方信,中村哲,森島繁生.自動翻訳合成音声とのモデルベースリップシンクの実現[R].インタラクションポログラム, 2001.203~210.
[5] ISO/IEC14496-2, Information Technology-Coding of Audio-Visual Objects-Parts 2: Visual[S].1999.
[6] 徐一平.日本语言[M].北京:高等教育出版社,1999.14~15.
[7] 张慧明.现代日语的音节研究——基本音节与扩张音节[J].东南亚研究,2009,(4):87~92.
[8] Richard Willams.原动画基础教程——动画人的生存手册[M].邓晓娥译.北京:中国青年出版社,2006.121~152.
基金项目:辽宁省高等学校优秀人才支持计划基金资助项目(项目编号:200811833)