新手必看!手把手教你跑通SenseVoiceSmall语音识别
1. 认识SenseVoiceSmall:不只是语音转文字
1.1 什么是SenseVoiceSmall?
SenseVoiceSmall 是由阿里巴巴达摩院(iic)开源的一款多语言音频理解模型,属于 FunAudioLLM 项目的一部分。与传统语音识别(ASR)仅将声音转换为文本不同,SenseVoiceSmall 的核心优势在于其富文本转录能力(Rich Transcription),即在识别语音内容的同时,还能感知说话人的情绪状态和背景环境中的声音事件。
该模型基于数十万小时的工业级标注数据训练而成,在中文、英文、粤语、日语、韩语等语种上均表现出高精度识别性能。更重要的是,它能输出带有情感标签(如<|HAPPY|>、<|ANGRY|>)和声音事件标记(如<|BGM|>、<|APPLAUSE|>)的结构化文本,极大提升了语音信息的理解深度。
这种“听得懂情绪、看得见场景”的能力,使其特别适用于智能客服质检、会议纪要生成、视频内容分析、情感计算研究等高级应用场景。
1.2 核心技术亮点解析
- 多语言通用性:支持中、英、日、韩、粤五种主流语言,且可通过
language="auto"实现自动语种检测。 - 非自回归架构:采用高效的端到端建模方式,显著降低推理延迟。在 NVIDIA 4090D 等消费级 GPU 上可实现秒级长音频转写。
- 一体化富文本处理:无需额外部署标点恢复或情感分类模块,模型原生支持 ITN(逆文本正则化)、情感识别与事件检测。
- Gradio 可视化集成:镜像预装 WebUI,用户无需编写代码即可通过浏览器上传音频并查看带标签的识别结果。
2. 环境准备与依赖说明
2.1 镜像环境概览
本镜像已预先配置好运行 SenseVoiceSmall 所需的完整环境,主要依赖如下:
| 组件 | 版本/说明 |
|---|---|
| Python | 3.11 |
| PyTorch | 2.5 |
| funasr | 官方 ASR 推理框架 |
| modelscope | 模型下载与管理工具 |
| gradio | Web 交互界面库 |
| ffmpeg | 音频解码支持 |
| av | Python 音频处理库 |
所有组件均已安装并验证可用,开箱即用。
2.2 关键库作用说明
- funasr:阿里巴巴推出的端到端语音识别工具包,提供统一 API 调用各类 ASR 模型。
- modelscope:魔搭平台 SDK,用于从云端拉取模型权重。
- gradio:轻量级 Web UI 框架,便于快速构建可视化应用。
- av:基于 FFmpeg 的 Python 封装,负责音频格式解码与重采样(推荐使用 16kHz 单声道输入)。
3. 快速启动 WebUI 服务
3.1 启动前检查
若镜像未自动启动服务,请按以下步骤手动执行:
# 安装必要依赖(通常已预装) pip install av gradio --quiet然后创建主程序文件:
# app_sensevoice.py import gradio as gr from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocess import os # 初始化 SenseVoiceSmall 模型 model_id = "iic/SenseVoiceSmall" model = AutoModel( model=model_id, trust_remote_code=True, vad_model="fsmn-vad", vad_kwargs={"max_single_segment_time": 30000}, device="cuda:0", # 使用 GPU 加速 )3.2 构建 Web 交互逻辑
定义处理函数,接收音频路径和语言参数,返回清洗后的富文本结果:
def sensevoice_process(audio_path, language): if audio_path is None: return "请先上传音频文件" res = model.generate( input=audio_path, cache={}, language=language, use_itn=True, batch_size_s=60, merge_vad=True, merge_length_s=15, ) if len(res) > 0: raw_text = res[0]["text"] clean_text = rich_transcription_postprocess(raw_text) return clean_text else: return "识别失败"3.3 创建 Gradio 界面
构建直观的网页布局,包含音频上传区、语言选择下拉框和结果展示框:
with gr.Blocks(title="SenseVoice 多语言语音识别") as demo: gr.Markdown("# 🎙️ SenseVoice 智能语音识别控制台") gr.Markdown(""" **功能特色:** - 🚀 **多语言支持**:中、英、日、韩、粤语自动识别。 - 🎭 **情感识别**:自动检测音频中的开心、愤怒、悲伤等情绪。 - 🎸 **声音事件**:自动标注 BGM、掌声、笑声、哭声等。 """) with gr.Row(): with gr.Column(): audio_input = gr.Audio(type="filepath", label="上传音频或直接录音") lang_dropdown = gr.Dropdown( choices=["auto", "zh", "en", "yue", "ja", "ko"], value="auto", label="语言选择 (auto 为自动识别)" ) submit_btn = gr.Button("开始 AI 识别", variant="primary") with gr.Column(): text_output = gr.Textbox(label="识别结果 (含情感与事件标签)", lines=15) submit_btn.click( fn=sensevoice_process, inputs=[audio_input, lang_dropdown], outputs=text_output )3.4 启动服务
保存文件后运行:
python app_sensevoice.py默认服务将在0.0.0.0:6006启动。
4. 本地访问 WebUI 的正确方式
由于云平台安全组限制,无法直接暴露公网端口。需通过 SSH 隧道进行本地转发。
4.1 建立 SSH 隧道
在本地电脑终端执行以下命令(替换实际 IP 和端口):
ssh -L 6006:127.0.0.1:6006 -p [SSH端口号] root@[服务器IP地址]例如:
ssh -L 6006:127.0.0.1:6006 -p 2222 root@123.45.67.89成功连接后,远程服务的 6006 端口将映射到本地127.0.0.1:6006。
4.2 浏览器访问
打开本地浏览器,访问:
👉 http://127.0.0.1:6006
即可看到 Gradio 界面,支持拖拽上传.wav、.mp3等常见音频格式,点击按钮即可实时查看识别结果。
5. 结果解读与后处理技巧
5.1 富文本标签含义说明
识别结果中会包含多种特殊标记,代表情感或声音事件:
| 标签 | 含义 |
|---|---|
<|HAPPY|> | 开心 |
<|SAD|> | 悲伤 |
<|ANGRY|> | 愤怒 |
<|BGM|> | 背景音乐 |
<|APPLAUSE|> | 掌声 |
<|LAUGHTER|> | 笑声 |
<|CRY|> | 哭声 |
示例输出:
今天天气真好!<|HAPPY|> 刚才大家鼓掌了。<|APPLAUSE|>5.2 使用内置工具清洗结果
FunASR 提供了rich_transcription_postprocess工具函数,可将原始标签转换为更友好的表达形式:
from funasr.utils.postprocess_utils import rich_transcription_postprocess raw_text = "<|HAPPY|>太棒了!<|LAUGHTER|><|BGM|>" clean_text = rich_transcription_postprocess(raw_text) print(clean_text) # 输出:[开心]太棒了![笑声][背景音乐]你也可以根据业务需求自定义替换规则,例如导出为 JSON 或 HTML 格式用于后续分析。
6. 进阶实践建议
6.1 批量处理音频文件
若需对多个音频批量识别,可编写脚本遍历目录:
import os from pathlib import Path audio_dir = Path("./audios") results = [] for audio_file in audio_dir.glob("*.wav"): res = model.generate(input=str(audio_file), language="auto") text = rich_transcription_postprocess(res[0]["text"]) results.append(f"{audio_file.name}: {text}") with open("transcripts.txt", "w", encoding="utf-8") as f: f.write("\n".join(results))6.2 实时麦克风流式识别(可选)
对于实时语音分析场景,可结合sounddevice实现流式输入:
pip install sounddevice注意 Linux 用户需先安装 PortAudio:
sudo apt-get install -y portaudio19-dev libportaudio2再使用回调机制持续捕获音频块并送入模型缓存处理。
7. 总结
本文详细介绍了如何在预置镜像环境中快速部署并使用 SenseVoiceSmall 多语言语音理解模型。通过 Gradio WebUI,即使是零代码基础的新手也能轻松完成语音识别任务,并获取包含情感与声音事件的富文本输出。
关键要点回顾:
- 模型能力全面:不仅限于语音转文字,还具备情绪感知与环境理解能力。
- 部署简单高效:镜像已集成全部依赖,只需启动脚本即可运行。
- 交互友好直观:Gradio 提供图形化界面,支持上传、录音、多语言切换。
- 扩展性强:可通过 Python API 集成到自有系统,支持批量处理与流式识别。
掌握这套流程后,你可以将其应用于会议记录自动化、客户对话分析、短视频内容打标等多种实际场景,大幅提升语音数据的价值挖掘效率。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。