SenseVoiceSmall快速上手:Python调用API详细步骤
1. 什么是SenseVoiceSmall?
你有没有遇到过这样的问题:语音转文字只能输出干巴巴的文字,却不知道说话人是开心还是生气?或者一段视频里有背景音乐、掌声,但转录结果完全没体现?现在,这些问题有了更智能的解决方案。
SenseVoiceSmall是阿里巴巴达摩院开源的一款多语言语音理解模型,它不只是“听清”你说什么,更能“听懂”你的情绪和环境。相比传统ASR(自动语音识别),它的核心优势在于支持富文本识别(Rich Transcription)——不仅能高精度转写语音内容,还能识别出说话人的情感状态(如开心、愤怒、悲伤)以及音频中的声音事件(如BGM、掌声、笑声、哭声等)。
这个模型特别适合用于客服质检、情感分析、视频内容理解、智能助手等场景。比如你在做短视频分析时,不仅可以知道视频里说了什么,还能知道观众在哪个时间点笑了、鼓掌了,极大提升了内容洞察力。
目前该模型已集成在CSDN星图镜像中,预装了Gradio可视化界面,支持GPU加速推理,开箱即用。本文将带你一步步通过Python调用其API,实现本地或远程的高效语音理解。
2. 环境准备与依赖安装
在开始使用之前,确保你的运行环境满足以下基本要求:
- 操作系统:Linux(推荐Ubuntu 20.04+)
- Python版本:3.11
- PyTorch版本:2.5(需支持CUDA)
- 硬件建议:至少配备NVIDIA GPU(如RTX 4090D),以获得秒级推理速度
2.1 安装核心依赖库
首先,我们需要安装几个关键的Python包。打开终端执行以下命令:
pip install torch==2.5.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install funasr modelscope gradio av其中:
funasr是阿里推出的语音识别工具包,SenseVoiceSmall基于此框架构建。modelscope是模型开放平台SDK,用于自动下载模型权重。av是PyAV库,用于高效解码各类音频格式(如MP3、WAV、M4A等)。gradio提供Web交互界面支持。
2.2 安装系统级音频处理工具
某些音频格式(如MP3)需要底层ffmpeg支持才能正确解码。如果你的系统尚未安装,请运行:
# Ubuntu/Debian sudo apt-get update && sudo apt-get install ffmpeg -y # CentOS/RHEL sudo yum install ffmpeg -y安装完成后,可通过ffmpeg -version验证是否成功。
3. WebUI快速体验:无需代码也能玩转
如果你只是想先试试效果,可以直接启动内置的Gradio Web界面,上传音频即可看到识别结果。
3.1 创建并运行Web服务脚本
创建一个名为app_sensevoice.py的文件,并填入以下代码:
import gradio as gr from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocess # 初始化模型 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加速 ) 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 "识别失败" 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 ) demo.launch(server_name="0.0.0.0", server_port=6006)保存后,在终端运行:
python app_sensevoice.py3.2 本地访问Web界面
由于服务器通常不直接暴露端口,你需要通过SSH隧道将远程服务映射到本地浏览器。
在你自己的电脑终端执行:
ssh -L 6006:127.0.0.1:6006 -p [实际端口号] root@[服务器IP地址]连接成功后,打开浏览器访问:
👉 http://127.0.0.1:6006
你会看到一个简洁的网页界面,点击“上传音频”,选择一段包含对话、背景音或情绪变化的录音,点击“开始AI识别”,几秒钟内就能看到带情感和事件标签的富文本输出。
例如,一段带有笑声的中文对话可能返回如下结果:
你好啊 <|HAPPY|>,今天过得怎么样?<|LAUGHTER|> 哈哈哈,真有趣!这些标签清晰地标记了情绪和声音事件,极大增强了文本的信息密度。
4. Python API调用实战:集成到你的项目中
如果你想把SenseVoiceSmall集成进自己的应用系统(如客服平台、内容审核系统),下面这段代码就是你需要的核心逻辑。
4.1 最简API调用示例
from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocess # 加载模型(只需加载一次,可复用) model = AutoModel( model="iic/SenseVoiceSmall", trust_remote_code=True, device="cuda:0" ) # 单次识别调用 res = model.generate( input="test_audio.wav", language="auto", use_itn=True ) # 后处理,美化输出 if res: raw_text = res[0]["text"] final_text = rich_transcription_postprocess(raw_text) print(final_text)输出可能是:
大家好,欢迎来到今天的直播 <|HAPPY|>,感谢各位的支持 <|APPLAUSE|>!4.2 批量处理多个音频文件
如果你有一批音频需要批量处理,可以这样写:
import os audio_dir = "./audios/" results = [] for file_name in os.listdir(audio_dir): if file_name.endswith((".wav", ".mp3", ".m4a")): file_path = os.path.join(audio_dir, file_name) print(f"正在处理: {file_name}") res = model.generate(input=file_path, language="auto") if res: clean_text = rich_transcription_postprocess(res[0]["text"]) results.append({"file": file_name, "text": clean_text}) # 保存为JSON或CSV import json with open("transcripts.json", "w", encoding="utf-8") as f: json.dump(results, f, ensure_ascii=False, indent=2)4.3 自定义语言与参数优化
你可以根据具体需求调整参数提升识别质量:
| 参数 | 说明 |
|---|---|
language | 可设为zh,en,yue,ja,ko,auto |
batch_size_s | 控制每批次处理的音频时长(秒),越大越快但占显存 |
merge_vad | 是否合并语音活动检测片段 |
use_itn | 是否启用文本正规化(如数字转汉字) |
例如,处理长音频时建议设置:
res = model.generate( input="long_audio.mp3", language="zh", batch_size_s=60, merge_vad=True, merge_length_s=15 )5. 实际使用技巧与常见问题
5.1 音频格式建议
虽然模型支持多种格式(WAV、MP3、M4A等),但为了最佳性能,建议:
- 使用16kHz采样率的单声道音频
- 如果原始音频是44.1kHz或更高,模型会自动重采样,但提前转换可减少计算开销
- 避免使用压缩严重的低比特率音频(如8kbps AMR)
5.2 如何清洗情感标签?
默认输出包含<|HAPPY|>这类标签。如果只想保留纯文本,可以用正则去除:
import re def remove_tags(text): return re.sub(r"<\|.*?\|>", "", text).strip() clean = remove_tags("<|SAD|> 我今天心情不太好 <|CRY|>") print(clean) # 输出:我今天心情不太好但建议保留这些标签用于后续分析,它们才是SenseVoice的价值所在。
5.3 常见问题排查
| 问题 | 解决方法 |
|---|---|
报错No module named 'av' | 运行pip install av |
| 音频无法解码 | 检查是否安装ffmpeg |
| GPU显存不足 | 将device="cpu"或降低batch_size_s |
| 模型下载慢 | 可尝试配置国内镜像源或手动下载模型 |
6. 总结
SenseVoiceSmall不仅仅是一个语音识别模型,更是一个能听懂情绪、感知环境的“耳朵”。通过本文介绍的方法,你可以:
- 快速部署Gradio Web界面,零代码体验强大功能
- 使用Python API将其集成到业务系统中
- 批量处理音频,提取富含情感与事件信息的富文本
无论是做用户反馈分析、视频内容打标,还是构建更具同理心的AI助手,SenseVoiceSmall都能为你提供远超传统ASR的洞察力。
下一步,你可以尝试结合 Whisper 的翻译能力,将多语言语音先转写再翻译;也可以接入实时流式输入,打造情感感知型对话机器人。
技术正在从“听见”走向“听懂”,而你现在,已经站在了这条路上。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。