51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

4.1k star! FishSpeech1.2重磅开源,目前中文开源TTS效果最好!手把手带你进行部署推理复现官方demo!

今天发现一个最新重磅开源的FishSpeech项目,其功能强大,除了支持超逼真人TTS,还支持声音克隆,效果炸裂!感觉应该是目前开源中文最好的TTS效果!如果你想要商用,请参考官方文档~ 本文手把手带你利用python来进行FishSpeech模型权重进行推理,复现官方demo效果,轻松打造个人语音AI助手。下面进入我们今天的主题~

本文目录

  • FishSpeech项目介绍

    • FishSpeech项目提供在线效果demo展示
  • 实战篇: FishSpeech部署推理-环境和素材准备

    • 配置项目的环境

    • 准备音频素材

  • 实战篇: FishSpeech部署推理-声音克隆-效果展示

    • 第一步:从语音生成 prompt(会输出.npy文件)

    • 第二步:利用whisper语音识别参考音频的文本

    • 第三步:生成文本语义 token

    • 第四步:从语义 token 解码生成人声

  • 实战篇: FishSpeech部署推理-随机生成说话人-效果展示

    • 第一步:准备文本素材

    • 第二步:进行推理生成语义token

    • 第三步: 从语义 token 解码生成人声

  • 参考链接

FishSpeech项目介绍

FishSpeech 是一款由 fishaudio 开发的文本转语音(TTS)工具,具有以下特色:

  • 多语言支持:支持中文、英文和日语。

  • 逼真语音效果:生成的语音效果堪比真人。

  • 语音克隆能力:用户提供参考语音后,模型能够快速准确地进行语音克隆。

  • 训练数据丰富:使用了大约十五万小时的三语数据进行训练,在中文方面的表现尤为出色。

  • 低GPU内存需求:推模推理仅需4GB,微调仅需16GB,消费级显卡完全够用。

  • 易用性强: Fish Speech模型参数量小,效果逼真。

下图是fish-speech-1.2的在huggingface上的开源权重:

FishSpeech项目提供在线效果demo展示

在线demo效果展示:https://speech.fish.audio/samples/

英文效果展示:

中文效果展示:

其中效果展示;

面对效果这么惊艳的TTS和声音克隆技术,我决定实操部署推理FishSpeech权重代码,看是否真如官方demo宣传的那样效果好用~

实战篇: FishSpeech部署推理-环境和素材准备

配置项目的环境

from IPython.display import Video,clear_output,Audio,Image
!git clone https://github.com/fishaudio/fish-speech.git
%cd fish-speech
!apt install libsox-dev -y
!pip install -e .
!pip install  torchaudio==2.3.1 torch==2.3.1 
# 注意torch要升级到最新版本,不然后面推理是会报错
clear_output()
import warnings
warnings.filterwarnings("ignore")
import torch
import torchvision
import torchaudio
import transformers
print("transformers: ", transformers.__version__)
print("torch: ", torch.__version__)
print("torchvision: ", torchvision.__version__)
print("torchaudio: ", torchaudio.__version__)

准备音频素材

为了能够达到官方demo的效果,我决定1:1还原,使用同样的原音频来实现声音克隆。这里我采用上面的"芙宁娜 (原神)"的参考音频来复现看是否通过代码推理也能达到官网的demo里面的效果。

!wget https://demo-r2.speech.fish.audio/v1.1-sft-large/zh/2_input.wav
!git clone https://hf-mirror.com/fishaudio/fish-speech-1.2.git
!tree fish-speech-1.2

对应的fish-speech-1.2目录效果:这是官网给的"芙宁娜 (原神)"的参考音频:

实战篇: FishSpeech部署推理-声音克隆-效果展示

接下来我将开始进行对声音克隆和推理,具体步骤如下:

第一步:从语音生成 prompt(会输出.npy文件)

!python tools/vqgan/inference.py \
    -i "2_input.wav" \
    --checkpoint-path "./fish-speech-1.2/firefly-gan-vq-fsq-4x1024-42hz-generator.pth"

效果展示:注意这里的fake.npy是非常重要的。

第二步:利用whisper语音识别参考音频的文本

这里我使用openai开源的whisper模型来进行语音识别,可以参考文章【3.26M次下载,2.7k次点赞】OpenAI开源Whisper-large-v3语音识别模型权重,错误率大幅下降,效果惊艳!,下面是我的推理代码:

!pip install -U openai-whisper setuptools-rust
!sudo apt update && sudo apt install ffmpeg -y
clear_output()
!whisper 2_input.wav  --model large --output_format srt

输出的结果:输出参考音频对应的文本:

既然如此,审判的事就到此结束。
正义之神可不能冤枉了无罪之人。

可以看出识别得非常正确。

第三步:生成文本语义 token

这是我参考官网的demo对应的文本

人间灯火倒映湖中,她的渴望让静水泛起涟漪。
若代价只是孤独,那就让这份愿望肆意流淌。
流入她所注视的世间,也流入她如湖水般澄澈的目光。

这是对应的推理代码:

!python tools/llama/generate.py \
    --text "人间灯火倒映湖中,她的渴望让静水泛起涟漪。若代价只是孤独,那就让这份愿望肆意流淌。流入她所注视的世间,也流入她如湖水般澄澈的目光。" \
    --prompt-text "既然如此,审判的事就到此结束。正义之神可不能冤枉了无罪之人。" \
    --prompt-tokens "./fake.npy" \
    --checkpoint-path "./fish-speech-1.2" \
    --num-samples 2 \ # 设置输出语音样本的数量
    --half

输出的结果:可以看出模型推理过程中生成2个npy文件分别为codes_0.npy、codes_1.npy;对应2个说话人样本。

第四步:从语义 token 解码生成人声

!python tools/vqgan/inference.py \
    -i "codes_0.npy" \
    --checkpoint-path "./fish-speech-1.2/firefly-gan-vq-fsq-4x1024-42hz-generator.pth" \
    -o "codes_0.wav"

输出的效果展示:这是最终"芙宁娜 (原神)"输出的tts效果展示:

下面是官网对应的效果:

效果几乎一致,可以说是准确复现官方demo!该说不说,效果是真的惊艳!

实战篇: FishSpeech部署推理-随机生成说话人-效果展示

第一步:准备文本素材

当你压力大到快要崩溃的时候,不要跟别人讲,也不觉得自己委屈,没有人会心疼你。
要像余华说的那样:在夜深人静的时候,把心掏出来,自己缝缝补补,然后睡一觉醒来,又是信心百倍。
无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事情,而不是让烦恼和焦虑,毁掉你本就不多的热情和定力。
心可以碎,手不能停,该干什么干什么在崩溃中继续前行,这才是一个成年人的素养。

第二步:进行推理生成语义token

!python tools/llama/generate.py \
    --text """当你压力大到快要崩溃的时候,不要跟别人讲,也不觉得自己委屈,没有人会心疼你。\
    要像余华说的那样:在夜深人静的时候,把心掏出来,自己缝缝补补,然后睡一觉醒来,又是信心百倍。\
    无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事情,而不是让烦恼和焦虑,毁掉你本就不多的热情和定力。\
    心可以碎,手不能停,该干什么干什么在崩溃中继续前行,这才是一个成年人的素养。""" \
    --checkpoint-path "./fish-speech-1.2" \
    --num-samples 2 \ # 设置输出语音样本的数量
    --half

输出的效果展示:可以看出在这里是没有--prompt-text和--prompt-tokens参数输入的。

第三步:从语义token中解码成人声

!python tools/vqgan/inference.py \
    -i "codes_0.npy" \
    --checkpoint-path "./fish-speech-1.2/firefly-gan-vq-fsq-4x1024-42hz-generator.pth" \
    -o "random_codes_1.wav"

输出的效果展示:对应的音频效果展示:

参考链接

  1. fish的官网介绍文档: https://speech.fish.audio/

  2. fish的github: https://github.com/fishaudio/fish-speech

  3. fish在线demo: https://fish.audio/zh-CN/text-to-speech/

  4. fish-speech-1.2模型权重: https://hf-mirror.com/fishaudio/fish-speech-1.2

赞(4)
未经允许不得转载:工具盒子 » 4.1k star! FishSpeech1.2重磅开源,目前中文开源TTS效果最好!手把手带你进行部署推理复现官方demo!