当前位置: 首页 > news >正文

语音识别结果导出: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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

http://www.jsqmd.com/news/279544/

相关文章:

  • 2025年度精选:本地检定器厂家前十强,采购指南在此,微型十字板仪/楼板测厚仪/一体式钢筋扫描仪/钢筋位置测定仪/裂缝测宽仪检定器厂家哪个好
  • 1000元百联OK卡回收价格新鲜出炉,三大优势平台推荐
  • Dify工作流触发飞书审批失败?这份含Wireshark抓包分析、HTTP状态码归因、飞书ISV白名单配置的终极排障手册请收好
  • 目前银座购物卡回收三家合规正规平台推荐
  • 目前京东e卡回收正规级线上平台推荐
  • 2026新加坡 EOR 服务商怎么选, Safeguard Global 名义雇主优势全梳理
  • Paraformer-large语音识别流水线:从上传到输出完整链路
  • 如何在MCP Server中启用CORS并保障API安全?,架构师亲授核心技巧
  • stdio mcp
  • 2026年1月力量型健身器材行业竞争格局深度分析报告
  • 多任务并行无干扰,MonkeyCode 独立环境解锁高效研发
  • Glyph自动驾驶应用:道路标识识别系统部署案例
  • _LazyAutoMapping
  • 多喝水真的伤肾吗?这篇文让你告别饮水焦虑,轻松养肾!
  • 1月21日-2026海外人力资源与EOR服务商推荐,解锁全球雇佣新方案
  • 国内评价高的钣金加工产品推荐排行榜单,钣金加工口碑推荐榜精选优质厂家
  • FSMN-VAD能否检测关键词?结合ASR的联动方案探讨
  • 物美超市购物卡经典版高效回收的三种基础版方式
  • 物美超市购物卡经典版高效回收的三种基础版方式
  • 语音克隆适合短文本?CosyVoice2内容长度优化策略
  • Qwen-Image-2512教育应用案例:课件插图自动生成部署方案
  • Google Earth Engine 非商业版引入计算配额制度,开发者需在 4 月 27 日前完成分级申请
  • Dify接入飞书审批流的5个关键决策点,第3个被90%技术负责人忽略(含飞书开放平台v2.11+Dify v1.12兼容矩阵)
  • 2026年1月家用健身器材公司深度测评与合作推荐报告
  • 高精度、耐磨损、安全性高:国产微型磁力齿轮泵的医疗领域通关之路
  • 金融票据识别案例:cv_resnet18_ocr-detection企业级部署实践
  • 出海电商选择海外云服务器有何技巧
  • 丽水市莲都青田缙云遂昌松阳区英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜
  • YARN(Yet Another Resource Negotiator)是 Hadoop 生态系统的核心资源调度框架,负责集群资源管理和任务调度
  • MCP Server API KEY配置全攻略(从入门到生产级防护)