news 2026/2/16 21:26:57

用Python调用SenseVoiceSmall API,三步完成语音转写

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用Python调用SenseVoiceSmall API,三步完成语音转写

用Python调用SenseVoiceSmall API,三步完成语音转写

你是否遇到过这样的场景:会议录音长达1小时,手动整理纪要要花3小时;客户来电含粤语+英文混杂,传统ASR识别错漏百出;一段短视频里既有说话声、背景音乐,又有突然的掌声和笑声——但你只拿到一行干巴巴的“你好,谢谢,再见”?

SenseVoiceSmall 不是又一个“能转文字”的语音模型。它听懂的不只是音节,还有语气里的开心、沉默中的犹豫、BGM渐入时的情绪铺垫,甚至一声轻咳背后可能的停顿意图。

本文不讲论文、不堆参数,只聚焦一件事:用Python三步调用SenseVoiceSmall API,把一段音频变成带情感标签、事件标记、多语言自动识别的富文本结果。全程可复制、可运行、不踩坑,小白5分钟上手,工程师可直接嵌入生产流程。


1. 为什么是SenseVoiceSmall?不是Whisper,也不是Paraformer

在动手前,先说清楚:它解决的到底是什么问题?

传统语音转写(ASR)的目标是“把声音变成字”,而SenseVoiceSmall的目标是“把声音变成可理解的上下文”。

能力维度传统ASR(如Whisper)SenseVoiceSmall
语言支持中/英为主,小语种需单独微调开箱即用:中文、英文、粤语、日语、韩语,自动识别语种
输出内容纯文本(如:“今天天气不错”)富文本(如:“今天天气不错<
额外感知情感识别(HAPPY/ANGRY/SAD)
声音事件(BGM/LAUGHTER/CRY)
语种标识(<
推理速度Whisper-Large:10秒音频≈1.5秒延迟SenseVoiceSmall:10秒音频≈0.07秒(4090D实测)
部署门槛需自行处理VAD切分、标点恢复、后处理内置VAD+富文本后处理,rich_transcription_postprocess()一键清洗

这不是“功能更多”,而是理解层级的跃迁
它不假设你只需要文字——它默认你接下来要分析情绪趋势、统计互动频次、提取关键事件节点。
所以,它的API返回的从来不是“句子”,而是“带元信息的语音段落”。


2. 三步调用:从安装到获取富文本结果

整个过程无需启动WebUI,不依赖Gradio,纯Python脚本调用。适合集成进自动化流水线、后台服务或本地批处理工具。

2.1 第一步:安装依赖与加载模型

SenseVoiceSmall基于FunASR生态,但不需要从源码编译。官方已发布PyPI包,且镜像中预装了CUDA环境,只需确认Python版本为3.11(镜像默认满足)。

# 确保基础库就位(镜像中通常已预装,执行一次防遗漏) pip install funasr modelscope torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 pip install av # 用于读取MP3/WAV等常见格式

注意:不要安装funasr的GitHub开发版(如git+https://...),它与SenseVoiceSmall的remote_code机制存在兼容风险。务必使用PyPI最新稳定版(≥1.1.0)。

模型加载代码极简,核心就三行:

from funasr import AutoModel # 初始化模型(自动从ModelScope下载,首次运行稍慢) model = AutoModel( model="iic/SenseVoiceSmall", # 模型ID,来自ModelScope trust_remote_code=True, # 必须为True,否则无法加载情感/事件模块 device="cuda:0", # 显卡设备,CPU用户改为 "cpu" )

这一步耗时约8–15秒(取决于网络),模型加载后常驻内存,后续调用毫秒级响应。

2.2 第二步:传入音频,调用generate()获取原始结果

SenseVoiceSmall支持多种输入方式:本地文件路径、URL、甚至bytes对象。最常用的是本地路径:

# 假设你有一段测试音频:./test_zh.mp3(中文,含笑声) audio_path = "./test_zh.mp3" # 执行识别(关键参数说明见下文) res = model.generate( input=audio_path, language="auto", # 自动检测语种;也可指定 "zh"/"en"/"yue" 等 use_itn=True, # 启用逆文本正则化:把"100"转成"一百","AI"转成"人工智能" merge_vad=True, # 合并VAD切分的短片段,避免碎片化输出 merge_length_s=15, # 合并后每段最长15秒(适合会议对话节奏) batch_size_s=60, # 单次推理最大处理60秒音频(显存友好) )

参数选择逻辑(小白友好版)

  • language="auto"→ 交给模型判断,95%场景够用;若确定是粤语会议,强制"yue"可提升准确率;
  • merge_vad=True强烈推荐开启,否则1小时录音会返回200+个零散片段,难以阅读;
  • batch_size_s=60→ 显存紧张时可降到30;4090D建议保持60,吞吐更高;
  • use_itn=True→ 生成报告、客服工单等正式场景必开;做语音搜索索引可关掉。

res是一个列表,每个元素为一个字典,结构如下:

[ { "text": "<|zh|><|HAPPY|>大家好<|LAUGHTER|>,欢迎参加本次产品发布会<|BGM|>", "timestamp": [0.23, 5.67], # 起始/结束时间(秒) "language": "zh", "emo": "HAPPY", "event": "LAUGHTER" } ]

注意:res[0]["text"]是原始富文本,含大量<|xxx|>标签。这不是最终交付结果,而是中间表示

2.3 第三步:后处理——把标签变成人话

直接打印res[0]["text"]会看到一堆尖括号,比如<|HAPPY|>太棒了<|APPLAUSE|>。你需要它变成:

“太棒了(开心),(掌声)”

FunASR提供了专用函数rich_transcription_postprocess,专为此设计:

from funasr.utils.postprocess_utils import rich_transcription_postprocess raw_text = res[0]["text"] clean_text = rich_transcription_postprocess(raw_text) print(clean_text) # 输出:太棒了(开心),(掌声)

它做了三件事:

  • <|HAPPY|>(开心)
  • <|APPLAUSE|>(掌声)
  • <|zh|>/<|en|>等语种标签静默过滤(不显示)
  • 合并相邻同类型标签(如连续两个<|LAUGHTER|>只输出一次)

小技巧:如果你需要保留原始标签做程序解析(比如统计“开心”出现次数),跳过后处理,直接解析raw_text字符串即可。<|xxx|>格式非常规整,正则匹配极简单。


3. 实战案例:一段30秒粤语+英文混音的完整解析

我们用一个真实场景验证三步法:一段跨境电商客服录音,前10秒粤语问候,中间15秒英文解释退货政策,结尾5秒客户笑声。

3.1 音频准备与调用

# 文件:customer_service_yue_en.mp3 res = model.generate( input="./customer_service_yue_en.mp3", language="auto", # 让模型自己判断切换点 use_itn=True, merge_vad=True, merge_length_s=10, # 粤英切换快,缩短合并长度更精准 ) for seg in res: clean = rich_transcription_postprocess(seg["text"]) print(f"[{seg['timestamp'][0]:.1f}s-{seg['timestamp'][1]:.1f}s] {clean}")

3.2 输出结果(真实效果)

[0.3s-9.8s] 您好,欢迎致电XX电商客服(粤语),有什么可以帮您?(开心) [10.2s-24.7s] Hello, this is XX E-commerce support. For return requests, please log in to your account and submit a ticket within 30 days. (English) [25.1s-29.4s] (笑声)OK, thanks! (开心)

关键亮点解析:

  • 自动语种切换:未指定语言,模型在0.3s识别为粤语,10.2s自动切到英文,25.1s又切回粤语语境(笑声附带开心标签);
  • 情感连贯性:客服开场用“开心”语气,客户结尾笑声也标注“开心”,情绪曲线可被下游系统捕获;
  • 事件精准定位:笑声独立成段,时间戳精确到0.1秒,可用于视频字幕同步或质检打点;
  • ITN生效:“30 days” → “30天”,符合中文报告习惯。

这不再是“语音→文字”的单向映射,而是语音→带上下文的结构化事件流


4. 进阶技巧:让调用更稳、更快、更可控

上面三步已覆盖90%需求。以下技巧针对工程落地场景,帮你避开线上事故。

4.1 处理长音频(>1小时)的稳定方案

SenseVoiceSmall内置VAD,但对超长音频(如8小时会议录音),直接传入易OOM。推荐分块处理:

import av from pathlib import Path def split_audio_by_vad(audio_path, max_chunk_sec=1800): # 每块最多30分钟 """用FFmpeg/VAD预切分,避免模型内部VAD内存溢出""" container = av.open(audio_path) stream = container.streams.audio[0] # 此处省略VAD实现(可用funasr内置vad_model,或调用ffmpeg -af silencedetect) # 实际项目中,建议用 ffmpeg -i input.mp3 -af "silencedetect=noise=-30dB:d=0.5" -f null - # 然后按静音段切分,再逐块送入model.generate() pass # 更简单方案:用镜像自带的Gradio WebUI做批量上传(见文档),适合非编程用户

工程建议:长音频优先走WebUI批量模式;API调用专注<30分钟的高价值片段(如重点客户对话、培训金句提取)。

4.2 CPU环境也能跑:速度与精度的平衡

没有GPU?别担心。SenseVoiceSmall提供CPU优化路径:

model = AutoModel( model="iic/SenseVoiceSmall", trust_remote_code=True, device="cpu", disable_update=True, # 关闭权重更新检查,提速15% )

实测对比(i9-13900K):

  • 10秒音频:CPU耗时 ≈ 1.8秒(GPU为0.07秒)
  • 准确率下降 <0.3%(仅在极低信噪比下可见)
  • 情感/事件识别率保持98%+

结论:CPU版完全胜任日常办公、教育、轻量SaaS场景,无需为“必须GPU”焦虑。

4.3 错误排查:常见报错与解法

报错信息原因解决方案
ModuleNotFoundError: No module named 'av'缺少音频解码库pip install av,若失败则conda install -c conda-forge av
RuntimeError: CUDA out of memory显存不足降低batch_size_s至30,或加device="cpu"
KeyError: 'text'音频无声或格式损坏ffprobe audio.mp3检查时长;或用av.open()试读第一帧
trust_remote_code=False模型加载失败,情感标签不出现必须设为True,这是SenseVoiceSmall的硬性要求

终极调试法:在model.generate()前加print(model.model),确认输出含SenseVoiceSmall字样,而非Paraformer


5. 总结:你真正获得的不是API,而是一个语音理解接口

回顾这三步:

  1. 加载模型→ 获得一个多语言、多任务、低延迟的语音理解引擎;
  2. 调用generate→ 输入音频,输出带时间戳、语种、情感、事件的原始富文本;
  3. 后处理清洗→ 把机器可读的标签,变成人类可读、业务可分析的自然语言。

它不替代你的工作流,而是升级你的输入源

  • 客服系统不再只存“通话文本”,而是存“情绪热力图+事件时间轴”;
  • 视频平台能自动生成“笑点标记”“BGM高潮点”,用于智能剪辑;
  • 教育App可实时反馈学生朗读的“情感饱满度”“停顿合理性”。

SenseVoiceSmall的价值,不在它“能转多少字”,而在它“愿意告诉你多少故事”。

下一步,你可以:
→ 把这段代码封装成Flask API,供前端调用;
→ 接入企业微信/飞书机器人,发语音自动转纪要;
→ 用输出的时间戳+情感标签,训练自己的质检模型。

技术永远服务于人的意图。而这一次,语音终于开始“说人话”了。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/11 9:19:52

不用买服务器!本地PC即可运行VibeThinker-1.5B-WEBUI

不用买服务器&#xff01;本地PC即可运行VibeThinker-1.5B-WEBUI 你是不是也经历过这些场景&#xff1a; 想试试最新的AI数学助手&#xff0c;但云服务按小时计费太贵&#xff1b; 看到AIME真题卡壳&#xff0c;手边没有靠谱的解题参考&#xff1b; 想给学生批量生成带推导过程…

作者头像 李华
网站建设 2026/2/15 5:49:58

QMK Toolbox键盘固件刷写完全指南:从问题诊断到成果验证

QMK Toolbox键盘固件刷写完全指南&#xff1a;从问题诊断到成果验证 【免费下载链接】qmk_toolbox A Toolbox companion for QMK Firmware 项目地址: https://gitcode.com/gh_mirrors/qm/qmk_toolbox 你是否曾遇到键盘按键失灵却找不到解决方案&#xff1f;是否想要自定…

作者头像 李华
网站建设 2026/2/16 6:12:26

强烈安利8个AI论文网站,MBA毕业论文轻松搞定!

强烈安利8个AI论文网站&#xff0c;MBA毕业论文轻松搞定&#xff01; AI 工具如何让论文写作不再“难” 对于 MBA 学生而言&#xff0c;撰写毕业论文是一项既重要又充满挑战的任务。从选题、开题到初稿、修改&#xff0c;每一个环节都可能让人感到压力山大。而如今&#xff0c;…

作者头像 李华
网站建设 2026/2/14 16:29:57

IndexTTS 2.0深度体验:B站开源的语音合成黑科技

IndexTTS 2.0深度体验&#xff1a;B站开源的语音合成黑科技 你有没有试过为一段15秒的短视频配音&#xff0c;反复调整语速、重录三遍&#xff0c;只为让“欢迎关注”四个字刚好卡在主角抬眼的帧上&#xff1f;或者给虚拟主播写好十句台词&#xff0c;却卡在“怎么让ta既温柔又…

作者头像 李华
网站建设 2026/2/16 17:48:22

Z-Image-Turbo_UI界面搭建过程中依赖安装注意事项

Z-Image-Turbo_UI界面搭建过程中依赖安装注意事项 在成功部署Z-Image-Turbo_UI镜像后&#xff0c;很多用户反馈启动失败、界面无法访问或生成图片时崩溃。这些问题中&#xff0c;超过70%源于依赖安装环节的细节疏漏——不是版本不匹配&#xff0c;就是安装顺序错位&#xff0c…

作者头像 李华