news 2026/4/16 17:21:23

语音识别结果导出:SenseVoiceSmall JSON格式生成实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
语音识别结果导出:SenseVoiceSmall JSON格式生成实战

语音识别结果导出:SenseVoiceSmall JSON格式生成实战

1. 引言:为什么需要结构化语音识别输出?

你有没有遇到过这种情况:用语音识别工具转写了一段会议录音,结果只得到一长串文字,根本分不清谁在什么时候说了什么,更别说判断说话人的情绪或背景里的掌声、笑声了?传统ASR(自动语音识别)只能解决“说了什么”,但真实场景中我们更关心“怎么说得”、“当时什么氛围”。

今天要讲的SenseVoiceSmall,正是为了解决这个问题而生。它不只是把声音变文字,还能告诉你这段话是开心地说的,还是愤怒地反驳,背景里有没有音乐或掌声——这些信息,对内容分析、客服质检、视频剪辑都至关重要。

本文将带你从零开始,部署 SenseVoiceSmall 模型,并重点实现一个关键功能:将识别结果以结构化的 JSON 格式导出,方便后续程序处理、存储或集成到其他系统中。


2. 模型简介:SenseVoiceSmall 能做什么?

SenseVoiceSmall 是阿里巴巴达摩院开源的一款多语言语音理解模型,属于 FunASR 项目的一部分。相比传统语音识别模型,它的核心优势在于支持“富文本转录”(Rich Transcription),即在转写文字的同时,标注出情感和声音事件。

2.1 多语言高精度识别

支持以下语种:

  • 中文(zh)
  • 英文(en)
  • 粤语(yue)
  • 日语(ja)
  • 韩语(ko)

无需切换模型,一句话里夹杂多种语言也能准确识别。

2.2 情感与声音事件识别

这是 SenseVoice 的杀手级功能:

类型支持标签
情感`<
声音事件`<

这些标签会直接嵌入到识别结果中,比如:

<|HAPPY|>今天天气真好啊!<|LAUGHTER|><|BGM|>

这意味着你不仅能知道“说了什么”,还能感知“说话时的情绪”和“环境音变化”。

2.3 极致推理速度

采用非自回归架构,在 NVIDIA 4090D 上可实现秒级转写,适合实时或批量处理长音频。


3. 环境准备与快速部署

3.1 基础依赖

确保你的环境满足以下条件:

# Python 版本 python --version # 推荐 3.11 # 安装核心库 pip install torch==2.5.0 funasr modelscope gradio av -U

其中:

  • funasr:阿里开源的语音识别工具包
  • av:用于高效音频解码(比 librosa 快得多)
  • gradio:构建 Web 可视化界面
  • ffmpeg:系统级音频处理工具(需提前安装)

提示:如果你使用的是预置镜像,通常这些依赖已安装完毕。

3.2 下载并运行 WebUI 脚本

创建文件app_sensevoice.py,内容如下:

import gradio as gr from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocess import json import os # 初始化模型 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 加速 )

这个脚本初始化了 SenseVoiceSmall 模型,并启用了 VAD(语音活动检测),能自动切分静音段,提升长音频处理效率。


4. 实现 JSON 结果导出功能

默认的rich_transcription_postprocess函数只会返回清洗后的纯文本。但我们希望保留原始结构信息,便于后续分析。因此,我们需要绕过后处理函数,直接解析原始输出,并构造成标准 JSON 格式

4.1 修改识别函数,返回结构化数据

替换原来的sensevoice_process函数:

def sensevoice_to_json(audio_path, language): if audio_path is None: return {"error": "请上传音频文件"} # 调用模型 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: return {"error": "识别失败"} raw_text = res[0]["text"] # 手动解析带标签的文本,生成结构化 JSON segments = parse_rich_text(raw_text) return { "success": True, "total_segments": len(segments), "transcription": segments } def parse_rich_text(text): """ 将 <|TAG|> 形式的富文本解析成结构化列表 """ segments = [] current_segment = {"text": "", "emotion": None, "event": None} i = 0 while i < len(text): if text[i] == '<' and i + 3 < len(text) and text[i:i+2] == '<|': # 找到标签结束 end = text.find('|>', i) if end == -1: break tag = text[i+2:end] i = end + 2 # 分类标签 if tag in ["HAPPY", "ANGRY", "SAD", "NEUTRAL"]: current_segment["emotion"] = tag.lower() elif tag in ["BGM", "APPLAUSE", "LAUGHTER", "CRY"]: current_segment["event"] = tag.lower() else: # 遇到新标签前先保存当前段落 if current_segment["text"].strip(): segments.append(current_segment) current_segment = {"text": "", "emotion": None, "event": None} else: current_segment["text"] += text[i] i += 1 # 添加最后一段 if current_segment["text"].strip(): segments.append(current_segment) return segments

4.2 更新 Gradio 界面,支持 JSON 输出

修改 WebUI,增加一个“导出 JSON”按钮:

with gr.Blocks(title="SenseVoice 智能语音识别") as demo: gr.Markdown("# 🎙️ SenseVoice 富文本语音识别与导出") with gr.Row(): with gr.Column(scale=2): audio_input = gr.Audio(type="filepath", label="上传音频") lang_dropdown = gr.Dropdown( choices=["auto", "zh", "en", "yue", "ja", "ko"], value="auto", label="语言选择" ) submit_btn = gr.Button("开始识别", variant="primary") with gr.Column(scale=3): result_text = gr.Textbox(label="纯文本结果", lines=8) json_output = gr.JSON(label="结构化 JSON 输出", collapsible=True) submit_btn.click( fn=sensevoice_to_json, inputs=[audio_input, lang_dropdown], outputs=[result_text, json_output] )

这样,用户点击识别后,不仅能看见清洗后的文字,还能看到完整的 JSON 数据结构。


5. JSON 输出示例与应用场景

5.1 实际输出样例

假设输入一段包含情绪和背景音的中文语音,JSON 输出可能如下:

{ "success": true, "total_segments": 3, "transcription": [ { "text": "今天项目终于上线了,", "emotion": "happy", "event": null }, { "text": "大家辛苦了!", "emotion": "happy", "event": "applause" }, { "text": "接下来我们继续加油。", "emotion": "neutral", "event": null } ] }

5.2 这个 JSON 能用来做什么?

  • 客服质检系统:自动标记客户是否愤怒,辅助判定投诉等级。
  • 视频字幕生成:根据情感调整字幕颜色(如愤怒用红色),增强表现力。
  • 会议纪要分析:统计发言情绪分布,识别关键讨论节点(如掌声处可能是决策点)。
  • AI 视频剪辑:自动剪辑“笑声密集”片段用于短视频推广。
  • 教育评估:分析教师授课情绪变化,优化教学方式。

6. 本地访问与调试技巧

6.1 启动服务

python app_sensevoice.py

如果一切正常,你会看到类似输出:

Running on local URL: http://0.0.0.0:6006

6.2 外部访问配置

由于云服务器通常不开放公网端口,需通过 SSH 隧道转发:

ssh -L 6006:127.0.0.1:6006 -p [SSH_PORT] root@[SERVER_IP]

连接成功后,在本地浏览器打开: 👉 http://127.0.0.1:6006

即可访问 Web 界面。

6.3 调试建议

  • 音频格式问题:优先使用.wav.mp3,采样率 16kHz 最佳。
  • GPU 内存不足:可尝试降低batch_size_s参数(如设为 30)。
  • 识别不准:检查是否开启了use_itn=True(数字规范化),避免“138”读成“一百三十八”。

7. 总结:让语音识别真正“懂”人类表达

SenseVoiceSmall 不只是一个语音转文字工具,它是通往“理解声音背后含义”的桥梁。通过本文的实践,你已经掌握了如何:

  • 部署支持多语言、情感识别的先进语音模型;
  • 解析富文本标签,构建结构化 JSON 输出;
  • 将识别结果集成到实际业务系统中,发挥更大价值。

未来你可以进一步扩展功能:

  • 添加时间戳,实现逐句对齐;
  • 支持批量音频导入,一键生成多个 JSON 文件;
  • 将结果存入数据库,构建语音分析平台。

技术的价值不在于炫技,而在于解决问题。当你能从一段录音中提取出情绪波动、掌声节奏、背景音乐的变化时,你就不再只是“听到了声音”,而是真正“读懂了现场”。


获取更多AI镜像

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

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

MySQL Page Cleaner 进程执行缓慢与 OOM Killer 的关联分析

&#x1f50d; Page Cleaner 进程与 OOM Killer 的关联分析 &#x1f4ca; Page Cleaner 进程的作用和影响 1. InnoDB Page Cleaner 角色 # 查看 Page Cleaner 状态 mysql -e "SHOW ENGINE INNODB STATUS\G" | grep -A 10 -i "page cleaner"# 关键指标监…

作者头像 李华
网站建设 2026/4/16 10:14:43

护网(HVV)到底是什么?必备的技术能力有哪些?

一、什么是护网行动&#xff1f; 护网行动是以公安部牵头的&#xff0c;用以评估企事业单位的网络安全的活动。 具体实践中。公安部会组织攻防两方&#xff0c;进攻方会在一个月内对防守方发动网络攻击&#xff0c;检测出防守方&#xff08;企事业单位&#xff09;存在的安全…

作者头像 李华
网站建设 2026/4/15 21:59:26

紧急通知:超过70%的MCP服务因错误配置环境变量导致API KEY泄露

第一章&#xff1a;MCP服务中API KEY泄露事件的警示 近期&#xff0c;某企业在使用MCP&#xff08;Microservice Control Platform&#xff09;服务过程中发生一起严重的API KEY泄露事件&#xff0c;导致其后端服务遭到未授权访问&#xff0c;大量敏感数据被批量抓取。该事件暴…

作者头像 李华
网站建设 2026/4/16 10:13:31

MCP Server API KEY配置全攻略(从入门到生产级防护)

第一章&#xff1a;MCP Server API KEY配置全攻略&#xff08;从入门到生产级防护&#xff09; 在构建现代微服务架构时&#xff0c;MCP Server&#xff08;Microservice Control Plane Server&#xff09;的API KEY配置是保障系统安全通信的核心环节。合理的密钥管理机制不仅能…

作者头像 李华
网站建设 2026/4/15 22:02:19

对话历史丢失太可怕?Dify聊天记录导出为文本的4大安全方案

第一章&#xff1a;对话历史丢失太可怕&#xff1f;Dify聊天记录导出为文本的4大安全方案 在使用 Dify 构建 AI 聊天应用时&#xff0c;对话历史是用户交互的核心资产。一旦因系统故障、配置错误或误操作导致数据丢失&#xff0c;将严重影响用户体验与业务连续性。为防止此类风…

作者头像 李华