ASR+TTS - 实践

news/2025/11/26 20:42:25/文章来源:https://www.cnblogs.com/tlnshuju/p/19274613

ASR+TTS - 实践

2025-11-26 20:40  tlnshuju  阅读(0)  评论(0)    收藏  举报

概述

关于ASR和TTS模型,之前汇总过:

Chatterbox

Resemble AI推出的开源(GitHub,14K Star,1.8K Fork)项目Chatterbox,摘下首个支持情感夸张控制的开源TTS桂冠,更在盲测中击败ElevenLabs等商业系统,重新定义开源语音合成的技术天花板。HF Demo,Demo。

从阿拉伯语的喉音到斯瓦希里语的节奏,从韩语的语调起伏到中文的四声变化,基于0.5B Llama架构的模型展现出惊人的跨语言能力。不同于传统多语言模型需要为每种语言单独微调,采用一次训练全语言覆盖策略,通过对齐训练技术让不同语言共享底层语音特征。实测显示,在无参考音频时,模型生成的日语发音自然度达到母语者可接受水平;切换至阿拉伯语时,能自动适配从右至左的语言特性带来的韵律变化。这种能力源自其独特的"对齐感知推理"机制,可动态调整音素时长与语调曲线。

零样本语音克隆:只需3-5秒的参考音频,就能捕捉说话人的声纹特征、语速习惯甚至微表情带来的语调变化。在对比测试中,78%的听众无法区分克隆语音与真人原声。技术实现上,模型通过Perceiver模块提取参考音频的深层特征,结合S3 Tokenizer的音素解析,在保持内容清晰度的同时,完美复刻说话人的个性特质。这种克隆能力可无缝迁移到23种语言,既能保持原语言的声线,又符合新语言的发音规则。

引入情感夸张控制为语音合成带来新维度,通过简单调整参数:

这种可控性源自模型独特的双路径架构:文本编码器负责语义准确性,语音风格编码器则处理情感表达,两者通过交叉注意力机制动态融合。

作为生产级开源项目,内置多项企业级特性:

安装:pip install chatterbox-tts

VibeVoice

技术报告,微软开源,9.8K Star,1.2K Fork,专注于生成长时、多说话人、高表现力的对话式音频,支持长达90分钟、包含4名说话人的复杂对话场景。VibeVoice-1.5B TTS。

特性:

TEN

官网,开源(GitHub,8.4K Star,972 Fork)、支持实时对话、多模态输入与输出、ASR+TTS、多模型支持(远端+本地)、Dify+Coze+OceanBase PowerRAG集成、MCP集成、多平台、多语言SDK。体验。

体验

在这里插入图片描述
模型切换
在这里插入图片描述
可和第三方平台集成:
在这里插入图片描述
体验下来的几个问题:

  • 需提前设置好待识别语音
  • ASR识别不太准确
  • 未提供submit提交按钮,导致一句话没说完自动发起Query
  • TTS表现不太行,如断句,中英文混杂发音

如下图,系统默认语言为英文,中文语言强制识别为英文,错误百出:
在这里插入图片描述
支持本地部署:

docker
# 源码
git clone
cd TEN-framework
cp .env.example .env
vim .env
# 构建
task use
# 启动
task run

WhisperLiveKit

基于OpenAI Whisper的开源(GitHub,8K Star,730 Fork)实时语音转录框架,WhisperLiveKit完美诠释现代语音处理系统的三大核心要素:

  1. 算法先进性
    • 集成2025年最新SOTA算法SimulStreaming
    • 支持WhisperStreaming (2023 SOTA)实时处理
    • 融合Streaming Sortformer说话人识别技术
  2. 工程实用性
    • 支持多种Whisper后端:原版、faster-whisper、MLX-whisper
    • WebSocket实时通信架构
    • 企业级并发处理能力
  3. 商业应用价值
    • 会议转录、客服系统、教育平台
    • 多语言支持,全球化部署就绪
    • 开源免费,降低企业成本

架构
在这里插入图片描述

实战

实时流式处理架构

from whisperlivekit import TranscriptionEngine, AudioProcessor
import asyncio
class RealTimeTranscriber:
def __init__(self):
self.engine = TranscriptionEngine(
model="medium",
diarization=True, # 说话人识别
language="auto" # 自动语言检测
)
async def process_stream(self, audio_stream):
"""实时处理音频流的核心逻辑"""
processor = AudioProcessor(transcription_engine=self.engine)
async for result in processor.stream_transcribe(audio_stream):
yield {
"text": result.text,
"confidence": result.confidence,
"speaker": result.speaker_id,
"timestamp": result.timestamp
}

WebSocket全双工通信实现

from fastapi import FastAPI, WebSocket
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# 应用启动时初始化AI引擎
global transcription_engine
transcription_engine = TranscriptionEngine(model="large-v3")
yield
# 应用关闭时清理资源
app = FastAPI(lifespan=lifespan)
@app.websocket("/realtime-asr")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
audio_processor = AudioProcessor(transcription_engine)
try:
while True:
# 接收音频数据
audio_data = await websocket.receive_bytes()
# 实时转录
result = await audio_processor.transcribe_chunk(audio_data)
# 立即返回结果
await websocket.send_json({
"type": "transcription",
"data": result
})
except WebSocketDisconnect:
print("客户端断开连接")

多模型性能优化策略

# 1. 开发测试环境 - 追求速度
whisperlivekit-server --model tiny --language en
# 2. 生产环境 - 平衡性能
whisperlivekit-server --model medium --diarization --warmup-file warmup.wav
# 3. 高精度场景 - 追求准确度
whisperlivekit-server --model large-v3 --language auto --ssl-certfile cert.pem

前端集成

// 现代化的前端实现
class MeetingAssistant {
constructor() {
this.websocket = new WebSocket('ws://localhost:8000/asr');
this.mediaRecorder = null;
this.transcripts = [];
}
async startRecording() {
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
this.mediaRecorder = new MediaRecorder(stream);
this.mediaRecorder.ondataavailable = (event) => {
if (event.data.size > 0) {
this.websocket.send(event.data);
}
};
this.websocket.onmessage = (event) => {
const result = JSON.parse(event.data);
this.displayTranscript(result);
};
this.mediaRecorder.start(1000); // 每秒发送一次数据
}
displayTranscript(result) {
const transcriptDiv = document.getElementById('transcripts');
transcriptDiv.innerHTML += `
<div class="transcript-item">
<span class="speaker">${result.speaker_id || '未知说话人'}</span>
<span class="text">${result.text}</span>
<span class="time">${new Date(result.timestamp).toLocaleTimeString()}</span>
</div>`;
}
}
// 使用
const assistant = new MeetingAssistant();
document.getElementById('start-btn').onclick = () => assistant.startRecording();

会议纪要生成

# 添加会议纪要生成功能
import openai
from datetime import datetime
class MeetingSummarizer:
def __init__(self):
self.transcripts = []
self.client = openai.OpenAI()
def add_transcript(self, text, speaker, timestamp):
self.transcripts.append({
'speaker': speaker,
'text': text,
'timestamp': timestamp
})
def generate_summary(self):
meeting_text = "\n".join([f"{t['speaker']}: {t['text']}" for t in self.transcripts
])
response = self.client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{
"role": "user",
"content": f"请为以下会议内容生成结构化纪要:\n{meeting_text}"
}]
)
return response.choices[0].message.content

NeuTTS Air

HF,开源(GitHub,3.7K Star,352 Fork),Neuphonic发布的NeuTTS Air,基于Qwen 0.5B构建,CPU可运行、具备即时语音克隆能力,只支持英文?

特性:

用户只需要提供两类输入:一段参考语音(即样本音频)与目标文本。模型从参考语音中提取音色、语调特征,再将输入文本合成出与之匹配的语音。

技术:

实战

安装:

git clone https://github.com/neuphonic/neutts-air.git
cd neuttsair
pip install -r requirements.txt
# 安装espeak
https://github.com/espeak-ng/espeak-ng/blob/master/docs/guide.md

命令行示例:

python -m examples.basic_example --input_text "..." --ref_audio samples/dave.wav --ref_text samples/dave.txt

SDK

from neuttsair.neutts import NeuTTSAir
import soundfile as sf
tts = NeuTTSAir( backbone_repo="neuphonic/neutts-air-q4-gguf", backbone_device="cpu", codec_repo="neuphonic/neucodec", codec_device="cpu")
input_text = "..."
ref_text = "samples/dave.txt"
ref_audio_path = "samples/dave.wav"
ref_text = open(ref_text, "r").read().strip()
ref_codes = tts.encode_reference(ref_audio_path)
wav = tts.infer(input_text, ref_codes, ref_text)
sf.write("test.wav", wav, 24000)

最佳实践:

  • 参考音频样本:单声道,16-44 kHz采样率,时长3至15秒,.wav格式,干净(无背景噪音极小甚至没有),自然连续的语音——就像独白或对话一样,几乎没有停顿,因此模型可有效地捕捉语调。

Step-Audio-2

阶跃星辰开源(GitHub,1.2K Star,83 Fork),论文。

系列包括两款模型

可处理从语音输入到语音输出的完整交互链,包括语义理解、副语言信息捕捉、工具调用等。能力包括:语音识别、语音翻译(文本输出和语音输出)、语音理解、多轮语音问答(文本输出和语音输出)等。

Paralinguistic information understanding,副语言信息理解,包括:Gender、Age、Timbre、Scenario、Event、Emotion、Pitch、Rhythm、Speed、Style、Vocal。

URO-Bench,understanding, reasoning, and oral conversation。

Sayathing

KanthorLabs开源(GitHub,68 Star)的TTS平台,使用先进的AI模型,结合Kokoro TTS引擎。

核心模块:

功能说明
RESTful API提供清晰的API接口,方便调用
异步处理支持后台任务队列,高效处理多个请求
多种音色提供多种语音风格和语言选择
Web控制台可视化监控任务状态和系统运行情况
Docker支持支持容器化部署,易于上线
依赖注入架构清晰,模块化设计
高并发支持多worker架构,轻松应对高并发
稳定性强内置重试机制和错误处理

实战

支持多种安装方式:

git clone https://github.com/kanthorlabs/sayathing.git
cd sayathing
# 基于uv
uv sync
uv run python main.py
# 基于pip
python -m venv venv
source venv/bin/activate
pip install -e .
python main.py
# 基于Docker
docker build -t sayathing .
docker run -p 8000:8000 sayathing

浏览器打开http://localhost:8000/ui/dashboard查看Web UI,打开http://localhost:8000/docs查看REST API文档。

curl命令:

# 获取支持的语音列表
curl "http://localhost:8000/api/voices"
# tts
curl -X POST "http://localhost:8000/api/tts" \
-H "Content-Type: application/json" \
-d '{
"text": "Hello, world! This is SayAThing speaking.",
"voice_id": "kokoro.af_heart"
}'

其他命令

# 测试
make test              # 运行所有测试
make test-coverage     # 带覆盖率的测试
make test-integration  # 集成测试
make check             # 代码检查 + 测试
# 开发
uv run python main-dev.py  # 自动重载的开发服务器
# 参数
uv run python main.py --primary-workers 2 --retry-workers 1  # 指定 worker 数量
uv run python main.py --no-http  # 只运行后台任务
uv run python main.py --help   # 查看帮助信息

LFM2-Audio

Liquid AI推出LFM2-Audio-1.5B,一款紧凑的音频-语言基础模型,能够通过单一的端到端架构理解和生成语音与文本。旨在为资源受限的设备提供低延迟、实时助手功能,同时将LFM2家族扩展到音频领域,保持小巧的体积。

将1.2B参数的LFM2语言骨干网络扩展到音频和文本,将它们视为一级序列标记。该模型分离音频表示:输入是直接从原始波形块(约80毫秒)投影的连续嵌入,而输出是离散的音频代码。避免输入路径上的离散化伪影,同时保持输出路径上两种模态的自回归训练和生成。

大多数全能堆栈将ASR→LLM→TTS耦合在一起,会增加延迟,导致接口脆弱。LFM2-Audio的单一骨干设计,具有连续的输入嵌入和离散的输出代码,减少粘合逻辑,并允许交错解码以提前发出音频。对于开发者来说,更简单的管道和更快的感知响应时间,同时仍然支持ASR、TTS、分类和对话代理,所有这些功能都来自一个模型。

组件和特性:

两种生成模式用于实时代理

VoiceBench:九项音频助手评估,包括AlpacaEval、CommonEval、WildVoice、AMI、LibriSpeech-clean、ASR WER、

安装:pip install liquid-audio

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/977641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1. 密码学基础

1. 常见对称加密算法DES  ECB,CBC3DES AES RC(2,4,5)

AI写论文不用愁!9个AI工具为你保驾护航!

校园论坛上毕业生毕业论文写作困难的帖子引发共鸣,大家在选题、查文献、内容深度等方面问题频发。其实当下不少 AI 工具能助力论文写作,本文分享了 9 个实测靠谱的 AI 论文工具,如 PaperTan、图灵论文 AI 写作助手等…

谁告你只有中元节能见祖宗了?

在任意需要开long long的题目不开long long数组开小数组开大在CSP/NOIP/NOI等比赛中文件输入输出使用错误/代码文件名错误/子文件夹错误看错输入/输出格式(空格/换行)int mian()多测不清空多测并且对 ∑n 有限制时不精…

[论文笔记] Boomerang: Demand-Driven Flow- and Context-Sensitive Pointer Analysis for Java

这篇文章来自 ECOOP16,是 SPDS 的作者的先前工作,Boomerang 也有一个 SPDS 实现。 Introduction 超大规模的软件催生了按需分析的需求,比如按需指针分析。指针分析可以被划分为计算 points-to 信息的指向分析和计算…

2025年设计师与程序员专属:高级感简历模板 TOP5 排行榜

对于设计师和程序员这类技术与审美并重的专业人才而言,一份“高级感”十足的简历已经不再是可选项,而是必备品。它不仅是个人能力的门面,更是专业素养和未来潜力的展现。 本文将针对当前市场上较优秀的简历模板和制…

笔记分享 : 一文读懂3个概念 : RoI, RoI pooling, RoI Align

原文链接:https://cloud.tencent.com/developer/article/1829792 RoI pooling在fast RCNN算法中得到应用,由于该算法用一个卷积网络对原图进行feature extraction,因而共享feature map(特征图,特征提取后得到的中…

木棍分割-dp,前缀和优化

木棍分割-dp,前缀和优化 P2511 木棍分割 题意 有 \(n\) 根木棍,给出长度,要分成 \(m\) 段,问总长度最大的一段最小长度是多少,并求出其方案数对 \(10007\) 取模的结果。 思路 第一问很容易想到用二分,第二问也比…

yolo入门的一些环境配置记录

anaconda # 查看 Conda 版本:conda --version# 更新 Conda 到最新版本:conda update conda# 设置国内镜像以加速安装: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ con…

LLM提示注入攻击深度解析:从原理到防御的完整应对方案

如果你再维护线上的聊天系统,那么提示注入(Prompt Injection)是绕不开的话题。这不是一个普通漏洞而是OWASP LLM Top 10榜单上的头号风险,它的影响范围覆盖所有部署大语言模型的组织。 本文会详细介绍什么是提示注入…

Go语言的应用场景有哪些?

Go 语言(Golang)凭借其高并发支持、简洁语法、高效编译和部署便捷性,在多个领域展现出强大优势,以下是其主要应用场景及典型案例: 1. 后端服务与微服务架构核心优势:原生并发模型(Goroutine+Channel)、高性能、…

Ceres Solver优化库学习笔记

1. Ceres Solver 1.1 简介定位:一个功能强大、通用的非线性最小二乘问题求解器。 哲学:提供一套丰富的API,让用户能够轻松地定义和构建残差项,并自动或手动指定微分方式,最终求解这些残差的平方和的最小值。它更像…

Flash动画制作总结

对于下周要进行验收的Flash动画大作业,我一开始并没有接触过这个,在进行询问AI和这个项目制作的步骤 从一开始的,AI建议使用HTML,因为现在大部分主流的浏览器已经不适配Flash插件了,导致一开始没有思路 后来在进行…

什么是Go语言

Go 语言(也称为 Golang)是由 Google 公司开发的静态类型、编译型编程语言,于 2009 年正式发布。它由 Robert Griesemer、Rob Pike 和 Ken Thompson(C 语言创始人之一)主导设计,旨在解决大型软件工程中的效率、复…

人工智能之数据分析 Matplotlib:第一章 简介和安装

人工智能之数据分析 Matplotlib:第一章 简介和安装人工智能之数据分析 Matplotlib 第一章 简介和安装@目录人工智能之数据分析 Matplotlib前言一、Matplotlib 简介二、安装 Matplotlib1. 使用 pip 安装(推荐)2. 使…

在C#中操作Word文档时,如何处理表格中的数据?

在 C# 中操作 Word 表格数据时,需结合使用的库(如Microsoft.Office.Interop.Word或DocX)进行数据填充、读取、修改、验证等操作。以下分场景详细说明处理方法: 一、数据填充(写入表格) 1. 使用 Interop.Word 填充…

第四十九篇

今天是11月26号,上了离散,两节马原

如何使用DocX库在C#中创建和格式化Word表格?

使用 DocX 库在 C# 中创建和格式化 Word 表格无需安装 Microsoft Office,且操作轻量、跨平台。以下是详细的实现步骤、示例代码及关键格式化技巧: 一、准备工作:安装 DocX 库 通过 NuGet 包管理器安装 DocX(由 Xce…

feature map是什么

特征图(Feature Map) 是卷积神经网络(CNN)对输入图像进行特征提取后得到的中间表示,可以理解为一组压缩但语义丰富的“特征图像”。在目标检测中,它是连接主干网络与检测头的核心桥梁。 一、直观形象:特征图长什…

10-数据格式转换

WKT数据格式处理 概述 WKT(Well-Known Text)是一种用于表示几何对象的标准文本格式。作为一种通用的几何数据表示方法,WKT可以作为不同GIS数据格式之间转换的桥梁。本章介绍WKT格式的特点、使用方法以及基于WKT进行…