在本地跑一个AI模型(4) - 会说话的模型

大家好,好久不见。前三篇教程我们聊了如何在本地搭建一个大语言模型,它能够理解和生成文本,这确实是一个非常有趣且有前景的应用领域。今天,我们将更进一步,让你的AI模型具备实际的语音输出能力。

让AI模型将文字转化为语音我们通常称之为语音合成,也就是我们常说的文本转语音(Text-to-Speech, TTS)。在AI高速发展的今天,人们已经可以使用神经网络训练模型。我们今天介绍的XTTS v2 即是由 coqui-ai 开源的一种基于神经网络的模型,可以从多种语言的文本生成语音。XTTS v2 以其高质量、自然的声音以及克隆声音的能力而闻名。

虽然coqui-ai公司正在关闭过程中,但我们仍能从其开源的TTS代码中获益。感谢开源,让我们有机会在本地运行它。

安装TTS

截止目前,TTS项目尚不支持python 3.12版本,因此本文使用venv虚拟环境进行安装。

shell 复制代码
# 使用3.10版本的python创建venv
/opt/homebrew/opt/python@3.10/libexec/bin/python3 -m venv .venv
# 激活venv
source .venv/bin/activate 

我们不需要进行二次开发和调试,因此直接使用pip进行安装:

shell 复制代码
pip install TTS

下载XTTS v2模型

Ollama一样,TTS支持很多种模型。使用该命令查看一下所有支持的模型:

shell 复制代码
tts --list_models

虽然TTS会自动下载模型,但我相信大部分人还是喜欢自己下载模型,因为这样更快速和直接。

huggingface下载所有文件,放至~/Library/Application Support/tts/tts_models--multilingual--multi-dataset--xtts_v2目录下(MAC用户)或C:\users\你的用户名\AppData\Local\tts\tts_models--multilingual--multi-dataset--xtts_v2(Windows用户)。

运行该命令进行验证:

shell 复制代码
tts --model_name tts_models/multilingual/multi-dataset/xtts_v2 --list_speaker_idxs

如果出现以下内容则说明模型下载正确:

shell 复制代码
 > tts_models/multilingual/multi-dataset/xtts_v2 is already downloaded.
 > Using model: xtts
 > Available speaker ids: 
 .....

Available speaker ids列出来的是该模型内置的语音样板,有男有女。普通用户只要选择其中一个使用就可以了。

制作语音样板

前面已经提到过声音克隆,也就是说它可以根据你提供的一个样本语音文件生成与样本文件中声音相似的语音。简单来说,就好像是样本中的那个人在说话一样。

如果你想AI克隆你的声音,那你可以自己制作一个语音样板。你可以朗读并录制一个大约30秒的音频文件,做成.wav格式即可。你也可以使用这个示例样板,是杨澜在TED上演讲的片段。

python代码

让我们编写一段最简单的代码测试一下功能:

python 复制代码
import torch
from TTS.api import TTS


text = """
随着 AI 智能浪潮到来,AI 编码助手成为越来越多开发者的必备工具,将开发者从繁重的编码工作中解放出来,极大地提高了编程效率,帮助开发者实现更快、更好的代码编写。

如今,国内有一位 AI 程序员,已经在某互联网大厂上岗一段时间了。

它就是阿里云数万名工程师最近频繁打交道的新同事 ------「通义灵码」,专属工号「AI001」。

通义灵码在正式入职之前,先是在阿里云内部和外部「实习」了几个月。大家的评价都很不错,真实好评率超 80%。

而且,通义灵码的工作节奏比 996 还要极致:7x24 小时随叫随到......

以 API 开发测试工作为例,通义灵码可将数分钟甚至十几分钟的人工编写测试耗时缩短到秒级,节省了人类程序员 70% 以上的测试代码工作量。

通义灵码免费向全民开放,所有人可以随时随地在手机上写代码、读代码、学习编程技能。所有人可以前往下方链接写代码、读代码、学习编程技能!
"""


device = "cuda" if torch.cuda.is_available() else "cpu"
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to(device)

# generate speech by cloning a voice using default settings
tts.tts_to_file(text=text,
                file_path="output.wav",
                speaker_wav="yanglan.wav",
                # speaker='Sofia Hellen',
                language="zh-cn"
                )

注意这里的speaker_wavspeaker参数,如果你想让AI克隆语音,那就使用speaker_wav,并指定语音样板。如果你没有这方面的需求,可以直接使用speaker指定一个内置的语音样板。

等待代码执行的时间可能有些漫长,跟你的电脑配置有关。最后生成的语音文件为output.wav

总结

最后试听一下output.wav吧,是不是跟你预期的有点差距?我特意挑选了一段比较复杂的文字来做实验,比如出现了AI996、和7x24等等词汇。这些词汇模型确实不太好把握,而且还存在一个老生常谈的问题:所有模型对中文的支持都不太好。但也不用太悲观,我们现在还都是使用的默认配置不是吗?经过一番调教后模型是不是能更智能呢?

本文首发于:babyno.top/posts/2024/...

公众号:机器人小不

相关推荐
桃花键神33 分钟前
AI可信论坛亮点:合合信息分享视觉内容安全技术前沿
人工智能
野蛮的大西瓜1 小时前
开源呼叫中心中,如何将ASR与IVR菜单结合,实现动态的IVR交互
人工智能·机器人·自动化·音视频·信息与通信
CountingStars6191 小时前
目标检测常用评估指标(metrics)
人工智能·目标检测·目标跟踪
tangjunjun-owen1 小时前
第四节:GLM-4v-9b模型的tokenizer源码解读
人工智能·glm-4v-9b·多模态大模型教程
冰蓝蓝2 小时前
深度学习中的注意力机制:解锁智能模型的新视角
人工智能·深度学习
橙子小哥的代码世界2 小时前
【计算机视觉基础CV-图像分类】01- 从历史源头到深度时代:一文读懂计算机视觉的进化脉络、核心任务与产业蓝图
人工智能·计算机视觉
新加坡内哥谈技术2 小时前
苏黎世联邦理工学院与加州大学伯克利分校推出MaxInfoRL:平衡内在与外在探索的全新强化学习框架
大数据·人工智能·语言模型
fanstuck3 小时前
Prompt提示工程上手指南(七)Prompt编写实战-基于智能客服问答系统下的Prompt编写
人工智能·数据挖掘·openai
lovelin+v175030409663 小时前
安全性升级:API接口在零信任架构下的安全防护策略
大数据·数据库·人工智能·爬虫·数据分析
唐小旭3 小时前
python3.6搭建pytorch环境
人工智能·pytorch·python