首页 > 其他分享 >OpenVoiceV2:零样本跨语言语音克隆技术,支持多种风格控制

OpenVoiceV2:零样本跨语言语音克隆技术,支持多种风格控制

时间:2024-08-30 19:54:39浏览次数:12  
标签:converter 样本 speaker OpenVoiceV2 语音 path 克隆技术 se

1 openvoicev2介绍

语音克隆技术
近年来取得了显著进展,但现有方法通常存在着局限性,例如无法灵活控制语音风格、需要大量多语言数据进行训练、生成速度慢等等。为了克服这些挑战,MyShell.ai团队推出了全新的语音克隆技术OpenVoiceV2,它能够在无需额外训练的情况下,仅凭少量参考音频,就能够克隆任何人的声音,并支持多种语音风格控制,以及快速高效的跨语言语音生成。

论文地址:http://arxiv.org/pdf/2312.01479

代码地址:https://github.com/myshell-ai/OpenVoice

模型地址:https://huggingface.co/myshell-ai/OpenVoiceV2/tree/main

1.1 技术特点

OpenVoiceV2拥有以下关键技术特点:

  • 零样本跨语言语音克隆

OpenVoiceV2能够实现零样本跨语言语音克隆,即即使目标语言不在模型的训练数据集中,也可以通过少量参考音频进行克隆。这得益于OpenVoiceV2的独特设计,它将语音克隆过程分解为不同的子任务,并采用了一种基于语音特征的转换方式。

  • 灵活的语音风格控制

OpenVoiceV2支持多种语音风格控制,例如情感、口音、节奏、停顿和语调等等。用户可以根据自己的需求,自由控制生成的语音风格,为语音合成

带来更多可能性。

  • 快速高效的语音生成

OpenVoiceV2采用了高效的模型架构,并经过优化,能够在单卡A10G GPU上实现12倍实时语音生成速度,这意味着它只需85毫秒就能生成1秒的语音。

  • 多语言支持

OpenVoiceV2原生支持英语、西班牙语、法语、中文、日语和韩语,这意味着用户可以使用该技术生成多种语言的语音。

  • 开源且免费商用

为了促进语音合成技术的发展,OpenVoiceV2的代码和模型都已公开发布,并采用MIT许可证,这意味着用户可以自由使用该技术进行研究或商业应用。

1.2 性能表现

OpenVoiceV2在语音克隆方面展现出优异的性能:

  • OpenVoiceV2能够准确地克隆参考音色,并生成多种语言和口音的语音。
  • OpenVoiceV2支持多种语音风格控制,并能够保持高保真度。
  • OpenVoiceV2的语音生成速度非常快,能够满足实时应用的需求。

1.3 应用场景

OpenVoiceV2的强大功能和易用性使其在众多应用场景中具有广阔的应用前景:

  • 媒体内容创作: OpenVoiceV2可以帮助用户生成不同角色的声音,用于配音、朗读、制作音频节目等。
  • 定制化聊天机器人: OpenVoiceV2可以为聊天机器人提供更自然、更人性化的语音,提升用户体验。
  • 多模态
    交互: OpenVoiceV2可以用于构建更加智能、更加自然的多模态交互系统,例如根据用户的文字描述生成语音,或将图像转化为语音等等。
  • 教育和娱乐: OpenVoiceV2可以用于制作语音教材、游戏、动画等,为教育和娱乐领域提供更具吸引力的内容。

2 openvoicev2本地部署及使用

3.1 conda环境准备

conda环境准备详见:annoconda

3.2 运行环境构建

3.1 创建运行环境

conda create -n openvoice python==3.9
conda activate openvoice 

3.2 安装MeloTTS

git clone https://github.com/myshell-ai/MeloTTS.git
cd MeloTTS

修改依赖requirements.txt如下:

txtsplit==1.0.0
torch==2.3.1
torchaudio==2.3.1
boto3==1.34.0
botocore==1.34.0
cached_path==1.6.0
transformers==4.27.4
num2words==0.5.12
unidic_lite==1.0.8
unidic==1.1.0
mecab-python3==1.0.9
pykakasi==2.2.1
fugashi==1.3.0
g2p_en==2.1.0
anyascii==0.3.2
jamo==0.4.1
gruut[de,es,fr]==2.2.3
g2pkk>=0.1.1
librosa==0.9.1
pydub==0.25.1
eng_to_ipa==0.0.2
inflect==7.0.0
unidecode==1.3.7
pypinyin==0.50.0
cn2an==0.5.22
jieba==0.42.1
gradio==3.36.0
langid==1.1.6
tqdm
tensorboard==2.16.2
loguru==0.7.2

执行安装命令:

pip install -e .

更改typer版本:

pip install typer==0.11.0

执行下载命令:

python -m unidic download

注意:不用使用文档中的命令安装(如下所示),否则会陷入无限的依赖版本尝试

pip install git+https://github.com/myshell-ai/MeloTTS.git

3.3 安装openvoice

git clone https://github.com/myshell-ai/OpenVoice
cd OpenVoice
pip install -r requirements.txt

3.4 下载模型

下载地址:checkpoints_v2_0417.zip

解压到checkpoints_v2文件夹下

3.5 创建并运行脚本代码

根目录下创建脚本文件:deni_part3.py,内容如下:

import os
import torch
from openvoice import se_extractor
from openvoice.api import ToneColorConverter


ckpt_converter = 'checkpoints_v2/converter'
device = "cuda:0" if torch.cuda.is_available() else "cpu"
output_dir = 'outputs_v2'

tone_color_converter = ToneColorConverter(f'{ckpt_converter}/config.json', device=device)
tone_color_converter.load_ckpt(f'{ckpt_converter}/checkpoint.pth')

os.makedirs(output_dir, exist_ok=True)

reference_speaker = 'resources/example_reference.mp3' # This is the voice you want to clone
target_se, audio_name = se_extractor.get_se(reference_speaker, tone_color_converter, vad=False)

from melo.api import TTS

texts = {
    'EN_NEWEST': "Did you ever hear a folk tale about a giant turtle?",  # The newest English base speaker model
    'EN': "Did you ever hear a folk tale about a giant turtle?",
    'ES': "El resplandor del sol acaricia las olas, pintando el cielo con una paleta deslumbrante.",
    'FR': "La lueur dorée du soleil caresse les vagues, peignant le ciel d'une palette éblouissante.",
    'ZH': "在这次vacation中,我们计划去Paris欣赏埃菲尔铁塔和卢浮宫的美景。",
    'JP': "彼は毎朝ジョギングをして体を健康に保っています。",
    'KR': "안녕하세요! 오늘은 날씨가 정말 좋네요.",
}

src_path = f'{output_dir}/tmp.wav'

# Speed is adjustable
speed = 1.0

for language, text in texts.items():
    model = TTS(language=language, device=device)
    speaker_ids = model.hps.data.spk2id

    for speaker_key in speaker_ids.keys():
        speaker_id = speaker_ids[speaker_key]
        speaker_key = speaker_key.lower().replace('_', '-')

        source_se = torch.load(f'checkpoints_v2/base_speakers/ses/{speaker_key}.pth', map_location=device)
        model.tts_to_file(text, speaker_id, src_path, speed=speed)
        save_path = f'{output_dir}/output_v2_{speaker_key}.wav'

        # Run the tone color converter
        encode_message = "@MyShell"
        tone_color_converter.convert(
            audio_src_path=src_path,
            src_se=source_se,
            tgt_se=target_se,
            output_path=save_path,
            message=encode_message)

python deni_part3.py运行代码后,生成的音频文件存储在outputs_v2文件夹下。

标签:converter,样本,speaker,OpenVoiceV2,语音,path,克隆技术,se
From: https://blog.csdn.net/lsb2002/article/details/141723057

相关文章

  • YOLOv9改进策略【损失函数篇】| Slide Loss,解决简单样本和困难样本之间的不平衡问题
    一、本文介绍本文记录的是改进YOLOv9的损失函数,将其替换成SlideLoss,并详细说明了优化原因,注意事项等。SlideLoss函数可以有效地解决样本不平衡问题,为困难样本赋予更高的权重,使模型在训练过程中更加关注困难样本。若是在自己的数据集中发现容易样本的数量非常大,而困难样本......
  • 【pytorch深度学习——小样本学习策略】网格搜索和遗传算法混合优化支持向量机的小样
    最近需要根据心率血氧数据来预测疲劳度,但是由于心率血氧开源数据量较少,所以在训练模型时面临着样本数量小的问题,需要对疲劳程度进行多分类,属于小样本,高维度问题。在有限样本的条件之下,必须要需要选择合适的深度学习算法同时满足模型的泛化能力和学习精度。其次,由于小样本学习的......
  • Kolmogorov-Smirnov 检验 + k 样本 Anderson-Darling 检验 + 贝叶斯估计 + 期望方差
    KS检验是基于Kolmogorovdistribution,指的是\[K=\sup_{t\in[0,1]}\left\lvertB(t)\right\rvert\]式中\(B(t)\)是布朗桥。\(K\)的累积分布函数是\[\Pr(K\lex)=1-2\sum_{k=1}^\infty(-1)^{k-1}\mathrme^{-2k^2x^2}=\frac{\sqrt{2\pi}}x\sum_{k=1}^\infty\mathrme^......
  • 宏基因组实战之:样本组装
    紧接上文,质控去除宿主(土壤样本不需要去宿主)后下一步对样本序列进行组装。1、组装工具宏基因组学中常用序列组装工具不少,如SOAPdenovo2、megagit,spades、metaSPAdes、MOCAT2、IDBA-UD等各有优劣,下面两个软件是分析过程中比较常用的。spades:https://github.com/ablab/spadesm......
  • Kolmogorov-Smirnov 检验 + k 样本 Anderson-Darling 检验 + 贝叶斯估计 + 期望/方差
    KS检验是基于Kolmogorovdistribution,指的是\[K=\sup_{t\in[0,1]}\left\lvertB(t)\right\rvert\]式中\(B(t)\)是布朗桥。\(K\)的累积分布函数是\[\Pr(K\lex)=1-2\sum_{k=1}^\infty(-1)^{k-1}\mathrme^{-2k^2x^2}=\frac{\sqrt{2\pi}}x\sum_{k=1}^\infty\mathrme^......
  • 【Python&RS】基于矢量点读取遥感影像波段值&制作训练样本
    ​    在进行遥感定量反演或数据分析时,往往我们都具有矢量的真值,可能是点文件也可能是面文件,最重要的还是通过这个矢量获取影像中该区域的值,这样方便做波段分析以及后续的反演等流程。今天给大家分享一下如何通过点文件获取影像的波段值。原创作者:RS迷途小书童博客......
  • 强化学习Reinforcement Learning算法的样本效率提升策略
    强化学习ReinforcementLearning算法的样本效率提升策略1.背景介绍1.1问题的由来在强化学习领域,提升算法的样本效率是关键挑战之一。在许多现实世界的应用场景中,比如机器人自主导航、智能游戏、自动驾驶、医疗健康决策以及大规模服务系统优化,获取高价值的环境反馈往往......
  • PyTorch 数据集中某些类的训练验证拆分结果为零样本
    我正在使用PyTorch进行图像分类。我的数据集是目录格式。我已经设置了数据管道和模型。尽管如此,我在训练验证分割中遇到了一个问题,其中某些类在训练或验证数据集中的样本为零。这是我的代码和设置的相关部分:classCustomDataset(Dataset):def__init__(self,root_dir,......
  • 不同 Beta 分布样本
    给定这个Python代码success=np.array([1,2,3,4,5])failure=np.array([12,13,14,15,16])beta_samples=np.random.beta(success+1,failure+1,size=5)print(beta_samples)beta_samples2=[np.random.beta(success[i]+1,failure[i]+1)foriin......
  • IEC 61850 样本值 SavPDU 类型的 pyasn1 数据结构是否正确?
    我是使用pyasn1的新手,正在尝试按照Berkeley发布的PyASN1程序员手册文档IEC61850-9-2第8.5.2节表14将SEQUENCE类型转换为python类模型SavPdu的编码定义为SavPdu::=SEQUENCE{noASDU[0]IMPLICITINTEGER(1..65535),......