PaddleSpeech 小样本合成

🔥 欢迎大家来到 PaddleSpeech 小样本合成运行环境,通过本教程的学习,你可以一键运行 PaddleSpeech 中 demos/speech_web/speech_server/vc.py所需的后端环境,快速体验 PaddleSpeech 小样本合成功能。

本项目支持:

效果演示:

项目说明:

Aistudio 中不便于展示前端,大家感兴趣的同学可以前往:【SpeechWeb】中通过web_client,安装 node.js 配置前端环境,在自己的游览器上体验。

喜欢的同学可以点个 ⭐️star⭐️ 支持我们,PaddleSpeech传送门:https://github.com/PaddlePaddle/PaddleSpeech

🎁 学习过程中你遇到任何问题,可以加入PaddleSpeech的交流群进行讨论。

安装 PaddleSpeech 以及试验所需环境

# 下载 PaddleSpeech 源代码
!git clone https://gitee.com/paddlepaddle/PaddleSpeech.git

# 安装 PaddleSpeech
%cd PaddleSpeech
!pip install . -i https://mirror.baidu.com/pypi/simple
# 下载 NLTK
%cd /home/aistudio
!wget -P data https://paddlespeech.bj.bcebos.com/Parakeet/tools/nltk_data.tar.gz
!tar zxvf data/nltk_data.tar.gz
# 安装 speech web 小样本合成需要的工具
# 如果已经执行过一次了就不需要在下载相关模型和工具了
%cd /home/aistudio
!bash env.sh
# 安装 speech server 所需环境
%cd /home/aistudio/PaddleSpeech/demos/speech_web/speech_server
!pip install -r requirements.txt  -i https://mirror.baidu.com/pypi/simple

启动后端服务

需要在命令行中单独执行,点击左侧 ➕ 号后,新建终端,在终端中执行

cd /home/aistudio/PaddleSpeech/demos/speech_web/speech_server
python vc.py --port 8010

出现下面代码,表示服务启动成功

INFO:     Started server process [13554]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8010 (Press CTRL+C to quit)

确保服务启动成功后,再执行下面的体验代码

# requests 模拟前端访问
import requests

def use_api(url, methods, para=None):
    if methods == "get":
        r = requests.get(url)
    else:
        r = requests.post(url, data=para)
    
    if r.status_code == 200:
        return r
    else:
        return None

一句话合成功能体验

基于 GE2E 和 ECAPA-TDNN 模型的一句话合成方案,可以模仿输入的音频的音色进行合成任务

GE2E 音色克隆 克隆体验

使用 GE2E 模型作为音色提取模型,实现一句话合成功能

# speech server 的路径
# 后端返回的路径都是相对与这个路径的相对路径
SPEECH_SERVER_PATH = "/home/aistudio/PaddleSpeech/demos/speech_web/speech_server"
# 模拟网页前端,发送 GE2E 音色克隆请求, 40s 左右
import json

url = "http://127.0.0.1:8010/vc/clone_g2p"
text = "欢迎使用飞桨语音套件"
methods = "post"
# 这里我们使用 env.sh 中下载的示例音频
para = {
        'wavName': "000001.wav",
        'wavPath': "source/wav/vc/upload/000001.wav",
        'text': text,
        'func': 'ge2e'
        }
r = use_api(url, methods, json.dumps(para))
# 看看返回了啥
r.json()
{'code': 0,
 'result': {'wavName': '000001.wav',
  'wavPath': 'source/wav/vc/out/000001.wav'},
 'message': 'ok'}
# 我们听一下克隆的效果怎么样
import IPython.display as ipd
import os

# wavPath 里面是相对 speech_server 的路径
wav_path = os.path.join(SPEECH_SERVER_PATH, r.json()['result']['wavPath'])
ipd.Audio(wav_path)
Your browser does not support the audio element.

ECAPA-TDNN 音色克隆体验

使用 ECAPA-TDNN 模型作为音色提取模型,实现一句话合成功能

# 模拟网页前端,发送 ECAPA-TDNN 音色克隆请求, 30s 左右
import json

url = "http://127.0.0.1:8010/vc/clone_g2p"
text = "欢迎使用飞桨语音套件"
methods = "post"
# 这里我们使用 env.sh 中下载的示例音频
para = {
        'wavName': "000001.wav",
        'wavPath': "source/wav/vc/upload/000001.wav",
        'text': text,
        'func': 'ecapa_tdnn'
        }
r = use_api(url, methods, json.dumps(para))
# 体验一下效果
# wavPath 里面是相对 speech_server 的路径
wav_path = os.path.join(SPEECH_SERVER_PATH, r.json()['result']['wavPath'])
ipd.Audio(wav_path)

小数据集微调方案

PaddleSpeech开源小样本微调方案,基于aishell3开源多说话人数据集得到预训练模型,通过少量音频数据,同样可以学习新发音人的音色。

# 使用 default 数据集 finetune, Aistudio V100 4min 左右
url = "http://127.0.0.1:8010/finetune/clone_finetune"
methods = "post"
para = {
    'wav_path': "source/wav/finetune/default"
}
r = use_api(url, methods, json.dumps(para))
# 看看后端返回了啥,是否成功,成功 code = 0
# result 里面是 试验路径, exp_path
r.json()
{'code': 0,
 'result': '/home/aistudio/PaddleSpeech/demos/speech_web/speech_server/tmp_dir/finetune/default',
 'message': 'ok'}
# 使用微调后的模型合成声音
url = "http://127.0.0.1:8010/finetune/clone_finetune_syn"
methods = "post"
text = "欢迎使用飞桨语音套件"
para = {
        'exp_path': r.json()['result'],
        'text': text
    }

r = use_api(url, methods, json.dumps(para))
# 看看后端返回结果
r.json()
{'code': 0,
 'result': {'wavName': 'itybw.wav',
  'wavPath': '/home/aistudio/PaddleSpeech/demos/speech_web/speech_server/source/wav/finetune/out/itybw.wav'},
 'message': 'ok'}
# 听一下合成的效果
ipd.Audio(r.json()['result']['wavPath'])
# 听一下合成的效果
ipd.Audio('/home/aistudio/PaddleSpeech/demos/speech_web/speech_server/source/wav/SAT/upload/SSB03540307.wav')

语音-语言跨模态大模型 ERNIE-SAT

语音-语言跨模态大模型 ERNIE-SAT :采用语音-文本联合训练的方式在多语言的数据集上训练,合成声音更加自然,可以承接多种下游任务,支持个性化合成、跨语言合成、语音编辑,可有效降低定制化音库所需数据量。

ERNIE-SAT 个性化合成体验

使用跟输入音频相同的音色合成文本

# ERNIE-SAT 个性化合成体验, 30s 左右
url = "http://127.0.0.1:8010/vc/clone_sat"
methods = "post"
# 用自己的数据进行替换
para = {
    'old_str': "请播放歌曲小苹果",
    'new_str': "你可以使用我的声音合成其它文本",
    'language': "zh",
    'function': "synthesize",
    'wav': "source/wav/SAT/upload/SSB03540307.wav",
    'filename': "SSB03540307.wav"
}

r = use_api(url, methods, json.dumps(para))
r.json()
{'code': 0,
 'result': '/home/aistudio/PaddleSpeech/demos/speech_web/speech_server/source/wav/SAT/out/sat_syn_zh_SSB03540307.wav',
 'message': 'SAT合成成功'}
# 体验一下合成的声音
ipd.Audio(r.json()['result'])

ERNIE-SAT 跨语言合成体验

使用相同音色,合成其它语言,支持 中文 -> 英文 与 英文 -> 中文

# ERNIE-SAT 跨语言合成体验, 30s 左右
url = "http://127.0.0.1:8010/vc/clone_sat"
methods = "post"
# 用自己的数据进行替换
para = {
    'old_str': "请播放歌曲小苹果",
    'new_str': "you can speak English",
    'language': "zh",
    'function': "crossclone",
    'wav': "source/wav/SAT/upload/SSB03540307.wav",
    'filename': "SSB03540307.wav"
}

r = use_api(url, methods, json.dumps(para))
# 体验一下合成的声音
ipd.Audio(r.json()['result'])

ERNIE-SAT 语音编辑体验

支持语音编辑,可以修改 文本中的部分字符,然后智能拼接

# ERNIE-SAT 语音编辑体验, 30s 左右
url = "http://127.0.0.1:8010/vc/clone_sat"
methods = "post"
# 用自己的数据进行替换
para = {
    'old_str': "请播放歌曲小苹果",
    'new_str': "请播放音乐小苹果",
    'language': "zh",
    'function': "edit",
    'wav': "source/wav/SAT/upload/SSB03540307.wav",
    'filename': "SSB03540307.wav"
}

r = use_api(url, methods, json.dumps(para))
r.json()
{'code': 0,
 'result': '/home/aistudio/PaddleSpeech/demos/speech_web/speech_server/source/wav/SAT/out/sat_edit_zh_SSB03540307.wav',
 'message': 'SAT合成成功'}
# 体验一下合成的声音
ipd.Audio(r.json()['result'])

欢迎大家加入 PaddleSpeech

相信大家通过上面的学习,已经对小样本合成以及 ERNIE-SAT 有了一个初步的了解,关于各个模型的试验细节,大家可以参考项目最上面的说明,各个功能都有配套的 example 供大家学习和参考。

PaddleSpeech自 2022.5.20 发布 1.0 版本以来,收到了越来越多的开发者贡献提交自己的模型与代码,社区开发者们是 PaddleSpeech 的重要力量,欢迎更多开发者参与到 PaddleSpeech 的开发中!感谢各位开发者们的分享与贡献!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UHXi28mo-1664258471367)(https://ai-studio-static-online.cdn.bcebos.com/8ee2221485f641fd9fbedf81a6797fec3f01c716cbde4125922ca5928bdf71dd)]

# 去除链接,保存版本
!find -L /home/aistudio -type l -delete

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐