版权说明: 本文由博主keep丶原创,转载请保留此块内容在文首。
原文地址: https://blog.csdn.net/qq_38688267/article/details/131891162
一、背景介绍
应系统需求,需实现数字人互动功能,其中最大的难点在于如何将文字/语音数据转换成虚拟数字人面部表情数据,因此对该功能的解决方案进行调研。
二、现有解决方案
1.Nvidia Audio2Face
Audio2Face 预先载入名为“Digital Mark”的3D角色模型。此模型可按照音轨进行动画处理,用户只需要选取音频并上传至应用程序即可。该应用会将音频输入馈送到经过预训练的深度神经网络,然后根据神经网络输出的内容,调整角色网格的3D顶点,以实时创建面部动画。同时,使用者还可以选择编辑各种后制参数来优化角色的呈现效果。此外,使用者也可以逐步引导虚拟数字人的情绪,像快乐、惊奇、愤怒和悲伤等关键情绪都可轻松混合。
2.音素映射BS
名词解释
- 音素(Phonemes):一种语言中语音的“最小”单元(primitive sounds) ,英文一般有40-50个音素。
- 词/语素(morpheme):一种语言中最小的具有语义的结构单元
- 协同发音(Coarticulation):由于发音器官惯性,受到上下文影响,语谱和频率不同
- 分帧:一段完整的语音信号通常是非稳态的,即其特征基本上是随时间变化的。傅里叶变换要求输入信号是平稳的。然而由于人的口腔与喉部发声的固有特性,在一个短时间范围,其特征基本保持不变,即语音信号是短时平稳的,所以需要分帧。
- 加窗:加窗的目的是让一帧信号的幅度在两端渐变到 0。渐变对傅里叶变换有好处,可以让频谱上的各个峰更细,不容易糊在一起(术语叫做减轻频谱泄漏)。加窗的代价是一帧信号两端的部分被削弱了,没有像中央的部分那样得到重视。
- 帧移:缓解加窗削弱了两端信号的办法,帧截取时相互重叠一部分。相邻两帧的起始位置的时间差叫做帧移,常见的取法是取为帧长的一半,或者固定取为 10 毫秒。
音频特征提取
在汉语普通话拼音里,每一个声母都与国际音标(音素)相对应,即每个声母都可以看成一个音素。每一个单韵母也都与国际音标相对应,即每个单韵母都是一个音素。比较特别的是,在汉语拼音里,通常认为是复合韵母的"er",对应国际音标"【a】",可视为单韵母对待。
在汉语普通话语言系统中,全部声母和单韵母都是具有区分词义的作用的最小语言单位,任意一个声母或韵母替换成另一个声母或韵母都会导致相应的语音的含义发生变化,因而汉语普通话语言系统中全部的声母和单韵母都是音位。
通过音素对应的视位,进行插值,生成对应的口型。
实现方案
1.部署本地文字转语音&音素模型
- 模型:PlayVoice/vits_chinese
- 特点:
1、来自BERT的隐藏韵律嵌入,获得语法自然停顿
2、从自然语音推断损失,获得更少的声音误差
3、VITS框架,获得高音频质量 - 缺点:
1、不支持英文音素
2、默认只有一个发音人,其他的需要训练
2.利用云服务(阿里云TTS)
- 特点:
1、成熟商业产品,功能齐全
2、免费使用两路并发 - 缺点:
1、免费版性能一般
三、优劣势分析
1.Nvidia Audio2Face
- 优点:
- 开发工作量较少
- 可实现情绪化面部表情
- 缺点:
- 中文嘴型不太准确
- BS数据生成速度较慢
2.音素映射BS
- 优点:
- 嘴型相对准确
- BS数据生成速度较快
- 少一步第三方服务调度,服务
- 缺点:
- 开发工作量较多
- 没有情绪