使用Lipsync插件做中文口形动画

LipSync主要由三个模块组成。

·前端负责分析语音,辨识指定的音节,输出位置、类型和强度。LipSyncPro的作者直接使用了PocketSphinx开源库来完成这部分的内容。

·中端没有明确的界限,负责将语音识别的结果转化为驱动表情动画的事件帧。LipSync中提供一个ClipEditor,界面功能全面,可以方便的增减和编辑AutoSync生成的帧信息。

*前端和中端都是在编辑器中离线完成的。

·后端负责在runtime时根据事件帧驱动表情动画。LipSync支持BlendShape、骨骼动画和2D帧动画。

 

初步试用下来感觉挺好用,但有个关键问题:插件不支持中文! 强行识别的结果根本没法看。作者已经在尝试做多国语言的支持,但因为不会中文,暂时还无法支持。

 

内置的英语音素分类定义

 

总结一下,要扩展LipSync支持中文,需要解决两个问题:

1)寻找中文音素表

2)寻找一个开源库来识别中文语音中的音素(最好还是Sphinx)

对于第一个问题,英文搜索几乎没有靠谱的内容,百度倒是找到好几篇研究中文LipSync的论文[1][2],看引用数不高,可能是LipSync的学术价值太低,但工程上还是挺有意义的。

[1]使用HTK自行训练中文语音模型,我没做过语音识别,比较苦手。只能看看有没有现成可用的中文模型。

[2]提出一个三段式的方案,先结合过零率和短时能量将语音切割为片段,逐片段识别为文字(论文里使用的是微软SpeechAPI),然后查字典将字拆分为音节。这个方案可行性较高,效果预期也有保证,但工程量较大。

[3]提出了一个根据声韵母发音规律进行分类的方法,如下图

 

 

[1][2]都使用了这个分类模型。

 

为CMUSphinx构建音素模型

语音识别Toolkit中,只有CMUSphinx默认有提供音素识别(Phoneme Recognition)的功能。

先准备一些文字,转化为音素作为测试数据,然后使用cmuclmtk来构建音素语言模型 [5]。

我没有合适的测试数据,于是将语言字典zh_broadcastnews_utf8.dic中的音素序列剥离出来作为测试数据。

Commands:

text2idngram.exe -vocab F:\MyProject\Sphinx\Project\Phoneme.tmp.vocab -idngram F:\MyProject\Sphinx\Project\Phoneme.idngram < F:\MyProject\Sphinx\Project\Phoneme.txt

 

idngram2lm -vocab_type 0 -idngram F:\MyProject\Sphinx\Project\Phoneme.idngram -vocab F:\MyProject\Sphinx\Project\Phoneme.tmp.vocab -arpa F:\MyProject\Sphinx\Project\ChinesePhoneme.lm

 

sphinx_lm_convert.exe -i F:\MyProject\Sphinx\Project\ChinesePhoneme.lm -o F:\MyProject\Sphinx\Project\ChinesePhoneme.lm.bin

 

[1] 基于HTK的语音驱动唇形动画的实现

https://wenku.baidu.com/view/e3cf6acdbb4cf7ec4bfed003.html

[2] 基于SAPI的语音驱动口型动画方法

http://www.ixueshu.com/document/b6cc0c79686c53bb318947a18e7f9386.html

 

 

[3] 唇读中序列口型的分类

https://cmusphinx.github.io/wiki/phonemerecognition/

 

[4]

https://www.leiphone.com/news/201703/RccQRMCqbgxnFFS3.html

 

[5] CMUSphinx - Phoneme Recognition

https://cmusphinx.github.io/wiki/phonemerecognition/

posted @ 2018-05-03 16:28  潜水的牛  阅读(5880)  评论(0编辑  收藏  举报