中国红客联盟 首页 资讯 科技前沿 查看内容

【人工智能】Transformers之Pipeline:文本转音频(text-to-audio/text-to-speech) ...

2025-3-5 18:51| 发布者: Honkers| 查看: 254| 评论: 0

摘要: ​​​​​​​ 一、引言   pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理(NLP ...

​​​​​​​

一、引言 

 pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理(NLP)、多模态(Multimodal)等4大类,28小类任务(tasks),共计覆盖32万个模型。

今天介绍Audio的第三篇,文本转音频(text-to-audio/text-to-speech),在huggingface库内共有1978个音频分类模型,其中1141个是由facebook生成的不同语言版本,其他公司发布的仅有837个。

二、文本转音频(text-to-audio/text-to-speech)

2.1 概述

文本转音频(TTS),与上一篇音频转文本(STT)是对称技术,给定文本生成语音,实际使用上,更多与语音克隆技术相结合:先通过一段音频(few-show)进行声音克隆,再基于克隆的音色和文本生成语音。应用场景极多,也是人工智能领域最易看到成果的技术,主要应用场景有读文章音乐生成、短视频智能配音、游戏角色智能配音等。

2.2 技术原理

2.2.1 原理概述

当前比较流行的做法还是基于transformer对文本编码与声音编码进行对齐,声音方面先产生一个对数梅尔频谱图,再使用一个额外的神经网络(声码器)转换为波形。

模型类别上,以suno/bark为代表的语音生成和以xtts为代表的声音克隆+语音生成各占据半壁江山,使用比较多的模型如下

2.2.2 语音生成(zero-shot)

  • suno/bark:suno出品,天花板,支持笑容、男女声设定、音乐设定等。支持pipeline
  • 2noise/ChatTTS:国产品牌,突破天花板。不支持pipeline,需要下载项目包
  • BytedanceSpeech/seed-tts-eval:字节出品。不支持pipeline,需要下载项目包

2.2.3 声音克隆+语音生成(few-shot)

  • coqui/XTTS-v2:酷趣青蛙,几秒的语音样本即可完成克隆。支持pipeline生成,但克隆需要使用pypi的TTS包
  • fishaudio/fish-speech-1.2:鱼语,国产,同样几秒的语音样本即可完成克隆。支持pipeline生成,但克隆需要下载项目。

2.3 pipeline参数

2.3.1 pipeline对象实例化参数​​​​​​​

( *args, vocoder = None, sampling_rate = None, **kwargs )

2.3.2 pipeline对象使用参数 ​​​​​​​

  • text_inputs(str或List[str])——要生成的文本。
  • forward_params(dict,可选)— 传递给模型生成/转发方法的参数。forward_params始终传递给底层模型。
  • generate_kwargs(dict,可选generate_config)—用于生成调用的临时参数化字典。

2.3.3 pipeline对象返回参数

  • audio(np.ndarray形状(nb_channels, audio_length))——生成的音频波形。
  • samples_rate (int) — 生成的音频波形的采样率。

2.4 pipeline实战

2.4.1 suno/bark-small(默认模型)

pipeline对于text-to-audio/text-to-speech的默认模型是suno/bark-small,使用pipeline时,如果仅设置task=text-to-audio或task=text-to-speech,不设置模型,则下载并使用默认模型。

[code]import os os.environ["HF_ENDPOINT"] = "https://hf-mirror.com" os.environ["CUDA_VISIBLE_DEVICES"] = "2" import scipy from IPython.display import Audio from transformers import pipeline pipe = pipeline("text-to-speech") result = pipe("Hello, my dog is cooler than you!") sampling_rate=result["sampling_rate"] audio=result["audio"] print(sampling_rate,audio) scipy.io.wavfile.write("bark_out.wav", rate=sampling_rate, data=audio) Audio(audio, rate=sampling_rate)[/code]

 可以将文本转换为语音bark_out.wav。

bark支持对笑声、男女、歌词、强调语气等进行设定,直接在文本添加:

  • [laughter]
  • [laughs]
  • [sighs]
  • [music]
  • [gasps]
  • [clears throat]
  • —或...犹豫
  • ♪歌词
  • 大写以强调单词
  • [MAN]并[WOMAN]分别使 Bark 偏向男性和女性说话者

同时,pipeline可以指定任意的模型,模型列表参考TTS模型库。 

 2.4.2 coqui/XTTS-v2语音克隆

参考官方文档:可以使用python或命令行2种方式轻松使用model_list内的模型,优先要安装TTS的pypi包:

[code]pip install TTS -i https://mirrors.cloud.tencent.com/pypi/simple[/code]

2.4.2.1 语音转换(参考语音,将语音生成语音)

python版本:

[code]import torch from TTS.api import TTS # Get device device = "cuda" if torch.cuda.is_available() else "cpu" # List available 🐸TTS models print(TTS().list_models()) # Init TTS tts = TTS(model_name="voice_conversion_models/multilingual/vctk/freevc24", progress_bar=False).to("cuda") tts.voice_conversion_to_file(source_wav="my/source.wav", target_wav="my/target.wav", file_path="output.wav")[/code]

命令行版本:

[code]tts --out_path ./speech.wav --model_name "tts_models/multilingual/multi-dataset/xtts_v2" --source_wav "./source_wav.wav" --target_wav "./target_wav.wav"[/code]

2.4.2.2 文字转语音(参考语音,将文字生成语音)

python版本:

[code]import torch from TTS.api import TTS # Get device device = "cuda" if torch.cuda.is_available() else "cpu" # List available 🐸TTS models print(TTS().list_models()) # Init TTS tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to(device) # Run TTS # ❗ Since this model is multi-lingual voice cloning model, we must set the target speaker_wav and language # Text to speech list of amplitude values as output wav = tts.tts(text="Hello world!", speaker_wav="my/cloning/audio.wav", language="en") # Text to speech to a file tts.tts_to_file(text="Hello world!", speaker_wav="my/cloning/audio.wav", language="en", file_path="output.wav") tts = TTS("tts_models/de/thorsten/tacotron2-DDC") tts.tts_with_vc_to_file( "Wie sage ich auf Italienisch, dass ich dich liebe?", speaker_wav="target/speaker.wav", file_path="output.wav" )[/code]

命令行版本:

[code]$ tts --text "Text for TTS" --model_name "///" --target_wav --out_path output/path/speech.wav[/code]

2.5 模型排名

在huggingface上,我们筛选自动语音识别模型,并按近期热度从高到低排序:

看起来有1978个,实际上有1141是由facebook生成的不同语言版本,其他公司发布的仅有837个:

三、总结

本文对transformers之pipeline的文本生成语音(text-to-audio/text-to-speech)从概述、技术原理、pipeline参数、pipeline实战、模型排名等方面进行介绍,读者可以基于pipeline以及tts的python和命令行工具完成文字生成语音、文字参考语音生成语音、语音参考语音生成语音,应用于有声小说、音乐创作、变音等非常广泛的场景。


1

路过
1

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (2 人)

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行