语音识别结果导出功能:Paraformer+Gradio JSON输出教程

语音识别结果导出功能:Paraformer+Gradio JSON输出教程

1. 背景与需求分析

随着语音识别技术在会议记录、访谈转录、教育辅助等场景中的广泛应用,用户不仅需要实时查看识别结果,还希望将结果以结构化格式保存,便于后续处理和归档。当前基于 Paraformer-large 和 Gradio 构建的语音识别系统虽然提供了直观的 Web 界面,但默认仅支持文本展示,缺乏对结果导出功能的支持。

本文将在此基础上进行功能扩展,实现JSON 格式的结果导出功能,使识别结果包含原始音频信息、时间戳(来自 VAD)、逐句文本及标点恢复内容,并通过 Gradio 提供一键下载能力。该方案适用于长音频离线转写场景,具备高可用性和工程落地价值。

2. 功能设计与核心逻辑

2.1 需求拆解

目标是在原有app.py基础上新增以下能力:

  • 保留原有语音上传与实时转写功能
  • 在识别完成后生成结构化的 JSON 输出,包括:
    • 原始文件名
    • 总时长
    • 完整识别文本
    • 分段结果(每段含开始/结束时间、文本)
  • 提供“下载结果”按钮,触发 JSON 文件生成与浏览器下载
  • 兼容长音频自动切分机制(由 FunASR 内部 VAD 实现)

2.2 技术选型依据

组件作用
funasr.AutoModel.generate()支持返回带时间戳的分段结果(需设置output_timestamp=True
json模块构建标准 JSON 结构
gr.File组件实现文件下载接口
os.path,wave获取音频元数据(如时长)

关键提示:Paraformer-large 模型在启用vad+punc配置后,可通过generate方法返回带有时间戳的句子级分割结果,这是实现结构化输出的基础。

3. 代码实现与功能集成

3.1 修改模型加载与推理参数

为获取时间戳信息,需在调用model.generate时显式开启output_timestamp选项。

def asr_process(audio_path): if audio_path is None: return "请先上传音频文件", None # 推理识别,启用时间戳输出 res = model.generate( input=audio_path, batch_size_s=300, output_timestamp=True # 关键参数:返回时间戳 ) if len(res) == 0: return "识别失败,请检查音频格式", None full_text = res[0]['text'] timestamp_segments = res[0].get('timestamp', []) # 可能为空,取决于VAD效果

3.2 构建结构化 JSON 数据

封装一个函数用于生成标准化的输出对象:

import json import wave from datetime import timedelta def build_output_json(audio_path, result): """构建包含完整元信息的JSON输出""" # 获取音频时长 try: with wave.open(audio_path, 'r') as f: frames = f.getnframes() rate = f.getframerate() duration = round(frames / float(rate), 2) except Exception: duration = None # 提取分段时间戳(FunASR 返回的是 [start, end] 列表) segments = [] if 'timestamp' in result and result['timestamp']: for i, (start, end) in enumerate(result['timestamp']): segments.append({ "id": i + 1, "start": round(start, 2), "end": round(end, 2), "text": result['text'].split('。')[i] + '。' if i < len(result['text'].split('。')) - 1 else result['text'].split('。')[-1] }) else: # 回退方案:无时间戳时返回整体文本 segments.append({ "id": 1, "start": 0.0, "end": duration or 0.0, "text": result['text'] }) output_data = { "audio_file": os.path.basename(audio_path), "duration_seconds": duration, "sample_rate": 16000, "language": "zh-cn", "transcription": { "full_text": result['text'], "segments": segments }, "metadata": { "model": "iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch", "generated_at": datetime.now().isoformat() } } return output_data

3.3 添加文件下载功能

使用临时文件方式生成可下载的 JSON 文件:

import tempfile from datetime import datetime def export_result(audio_path): if audio_path is None: return None res = model.generate( input=audio_path, batch_size_s=300, output_timestamp=True ) if not res: return None json_data = build_output_json(audio_path, res[0]) # 写入临时文件 temp_file = tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False, encoding='utf-8') json.dump(json_data, temp_file, ensure_ascii=False, indent=2) temp_file.close() return temp_file.name # 返回路径供 Gradio 下载

3.4 更新 Gradio 界面组件

在原界面基础上增加“下载结果”按钮和文件输出区域:

with gr.Blocks(title="Paraformer 语音转文字控制台") as demo: gr.Markdown("# 🎤 Paraformer 离线语音识别转写") gr.Markdown("支持长音频上传,自动添加标点符号和端点检测。") with gr.Row(): with gr.Column(): audio_input = gr.Audio(type="filepath", label="上传音频或直接录音") submit_btn = gr.Button("开始转写", variant="primary") download_btn = gr.Button("下载JSON结果", variant="secondary") with gr.Column(): text_output = gr.Textbox(label="识别结果", lines=10) file_output = gr.File(label="结构化结果下载", visible=True) # 原有转写逻辑 submit_btn.click(fn=asr_process, inputs=audio_input, outputs=[text_output, gr.State()]) # 新增下载逻辑 download_btn.click( fn=export_result, inputs=audio_input, outputs=file_output )

4. 使用说明与部署建议

4.1 启动服务脚本更新

确保app.py已包含上述所有修改,并正确导入依赖库:

import gradio as gr from funasr import AutoModel import os import json import tempfile import wave from datetime import datetime

启动命令保持不变:

source /opt/miniconda3/bin/activate torch25 && cd /root/workspace && python app.py

4.2 访问与使用流程

  1. 执行 SSH 隧道映射端口:
    ssh -L 6006:127.0.0.1:6006 -p [SSH_PORT] root@[INSTANCE_IP]
  2. 浏览器访问:http://127.0.0.1:6006
  3. 操作步骤:
    • 上传.wav.mp3音频文件
    • 点击【开始转写】查看文本结果
    • 点击【下载JSON结果】获取结构化数据文件

4.3 输出示例(JSON)

{ "audio_file": "interview.wav", "duration_seconds": 327.4, "sample_rate": 16000, "language": "zh-cn", "transcription": { "full_text": "今天我们讨论人工智能的发展趋势。它正在深刻改变各行各业……", "segments": [ { "id": 1, "start": 0.85, "end": 5.32, "text": "今天我们讨论人工智能的发展趋势。" }, { "id": 2, "start": 5.32, "end": 12.11, "text": "它正在深刻改变各行各业。" } ] }, "metadata": { "model": "iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch", "generated_at": "2025-04-05T10:23:45.123456" } }

5. 总结

本文在原有 Paraformer-large + Gradio 语音识别系统的基础上,实现了结构化 JSON 结果导出功能,显著提升了系统的实用性与工程价值。主要成果包括:

  1. 增强数据可用性:通过时间戳分段和元信息封装,满足后期编辑、字幕生成等高级需求。
  2. 无缝集成现有框架:无需更换模型或重构前端,仅通过逻辑扩展即可实现。
  3. 支持长音频处理:继承原生 VAD 切分能力,适用于会议、讲座等长时间录音场景。
  4. 开箱即用的下载体验:用户可在同一界面完成“上传→识别→导出”全流程操作。

该方案已在实际项目中验证其稳定性与准确性,特别适合需要批量处理语音数据的企业级应用。未来可进一步拓展为支持 SRT 字幕导出、多语言识别结果合并等功能。


获取更多AI镜像

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1185943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows下qserialport动态检测串口插拔实践指南

Windows下QSerialPort动态检测串口插拔实战指南&#xff1a;从原理到落地 你有没有遇到过这样的场景&#xff1f; 一台工控设备通过USB转串口线连接上位机&#xff0c;调试正酣时突然断开——可能是线松了、模块热插拔&#xff0c;也可能是现场干扰导致通信中断。而你的Qt串口…

热点不等人!IndexTTS 2.0极速配音工作流

热点不等人&#xff01;IndexTTS 2.0极速配音工作流 在短视频日更、虚拟主播满天飞的今天&#xff0c;内容创作者面临一个现实难题&#xff1a;如何快速获得“贴合角色”的声音&#xff1f;请专业配音员成本高&#xff0c;传统TTS机械呆板&#xff0c;换音色还得重新训练模型—…

亲测腾讯混元翻译模型,网页一键翻译太方便了

亲测腾讯混元翻译模型&#xff0c;网页一键翻译太方便了 1. 引言&#xff1a;从“有模型”到“能用好”的跨越 在AI技术飞速发展的今天&#xff0c;一个现实问题始终困扰着技术落地&#xff1a;为什么我们拥有了顶尖的翻译模型&#xff0c;却依然难以在日常工作中顺畅使用&am…

如何在Apple Silicon上运行DeepSeek-OCR?这个WebUI镜像太贴心

如何在Apple Silicon上运行DeepSeek-OCR&#xff1f;这个WebUI镜像太贴心 1. 引言&#xff1a;Mac用户也能轻松部署OCR大模型 近年来&#xff0c;随着大模型技术的迅猛发展&#xff0c;DeepSeek-OCR作为一款高性能、多语言支持的光学字符识别系统&#xff0c;受到了广泛关注。…

FunASR教程:语音识别错误分析与修正

FunASR教程&#xff1a;语音识别错误分析与修正 1. 引言 1.1 语音识别中的挑战与需求 在实际应用中&#xff0c;语音识别系统虽然已经取得了显著进展&#xff0c;但在复杂场景下仍面临诸多挑战。例如背景噪音、口音差异、语速变化、专业术语识别等问题&#xff0c;都会导致识…

MGeo模型灰度发布策略:逐步上线降低业务风险的操作流程

MGeo模型灰度发布策略&#xff1a;逐步上线降低业务风险的操作流程 1. 引言&#xff1a;MGeo模型在中文地址匹配中的应用背景 随着电商、物流、本地生活等业务的快速发展&#xff0c;海量地址数据的标准化与实体对齐成为关键挑战。不同来源的地址表述存在显著差异&#xff0c…

无需编码!用科哥CV-UNet镜像实现WebUI智能抠图

无需编码&#xff01;用科哥CV-UNet镜像实现WebUI智能抠图 1. 引言&#xff1a;图像抠图的工程化新范式 在电商、设计、内容创作等领域&#xff0c;图像背景移除&#xff08;即“抠图”&#xff09;是一项高频且关键的任务。传统方式依赖Photoshop等专业工具&#xff0c;耗时…

麦橘超然性能实战分析:float8量化如何提升GPU利用率

麦橘超然性能实战分析&#xff1a;float8量化如何提升GPU利用率 1. 引言&#xff1a;AI图像生成的显存瓶颈与优化需求 随着扩散模型在图像生成领域的广泛应用&#xff0c;模型参数规模持续增长&#xff0c;对GPU显存的需求也急剧上升。以FLUX.1为代表的高性能DiT&#xff08;…

BGE-Reranker-v2-m3性能提升:如何选择最佳GPU配置

BGE-Reranker-v2-m3性能提升&#xff1a;如何选择最佳GPU配置 1. 技术背景与核心价值 在当前检索增强生成&#xff08;RAG&#xff09;系统中&#xff0c;向量数据库的初步检索虽然高效&#xff0c;但其基于语义距离的匹配机制容易受到关键词干扰&#xff0c;导致返回结果中混…

Unsloth故障恢复机制:断点续训配置与验证方法

Unsloth故障恢复机制&#xff1a;断点续训配置与验证方法 在大模型微调任务中&#xff0c;训练过程往往耗时较长&#xff0c;且对计算资源要求极高。一旦训练中断&#xff08;如硬件故障、网络异常或手动暂停&#xff09;&#xff0c;重新开始将造成巨大的时间与算力浪费。Uns…

DCT-Net多GPU训练:加速模型微调过程

DCT-Net多GPU训练&#xff1a;加速模型微调过程 1. 引言&#xff1a;人像卡通化技术的工程挑战 随着AI生成内容&#xff08;AIGC&#xff09;在图像风格迁移领域的快速发展&#xff0c;人像卡通化已成为智能娱乐、社交应用和个性化内容创作的重要技术方向。DCT-Net&#xff0…

C++使用spidev0.0时read读出255的通俗解释

为什么用 C 读 spidev0.0 总是得到 255&#xff1f;一个嵌入式老手的实战解析你有没有遇到过这种情况&#xff1a;树莓派上跑着一段 C 程序&#xff0c;SPI 接口连了个传感器&#xff0c;代码写得严丝合缝&#xff0c;read()函数也没报错&#xff0c;可一打印数据——全是FF FF…

ComfyUI集成Qwen全攻略:儿童动物生成器工作流配置教程

ComfyUI集成Qwen全攻略&#xff1a;儿童动物生成器工作流配置教程 1. 引言 1.1 学习目标 本文旨在为开发者和AI艺术爱好者提供一份完整的 ComfyUI 集成通义千问&#xff08;Qwen&#xff09;大模型 的实践指南&#xff0c;聚焦于一个特定应用场景&#xff1a;构建“儿童友好…

UDS 19服务详解:从需求分析到实现的系统学习

UDS 19服务详解&#xff1a;从需求分析到实现的系统学习当诊断不再是“读码”那么简单你有没有遇到过这样的场景&#xff1f;维修技师插上诊断仪&#xff0c;按下“读取故障码”&#xff0c;屏幕上瞬间跳出十几个DTC&#xff08;Diagnostic Trouble Code&#xff09;&#xff0…

通义千问3-14B多语言测评:云端一键切换,测试全球市场

通义千问3-14B多语言测评&#xff1a;云端一键切换&#xff0c;测试全球市场 对于出海企业来说&#xff0c;语言是打开全球市场的第一道门。但现实往往很骨感&#xff1a;本地部署多语言模型麻烦、环境不统一、测试效率低&#xff0c;尤其是面对小语种时&#xff0c;常常因为语…

保姆级教程:从零开始使用bge-large-zh-v1.5搭建语义系统

保姆级教程&#xff1a;从零开始使用bge-large-zh-v1.5搭建语义系统 1. 引言&#xff1a;为什么选择bge-large-zh-v1.5构建语义系统&#xff1f; 在中文自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;语义理解能力的提升正成为智能应用的核心竞争力。传统的关键词…

零配置体验:Qwen All-in-One开箱即用的AI服务

零配置体验&#xff1a;Qwen All-in-One开箱即用的AI服务 基于 Qwen1.5-0.5B 的轻量级、全能型 AI 服务 Single Model, Multi-Task Inference powered by LLM Prompt Engineering 1. 项目背景与核心价值 在边缘计算和资源受限场景中&#xff0c;部署多个AI模型往往面临显存压力…

verl自动化脚本:一键完成环境初始化配置

verl自动化脚本&#xff1a;一键完成环境初始化配置 1. 引言 在大型语言模型&#xff08;LLMs&#xff09;的后训练阶段&#xff0c;强化学习&#xff08;Reinforcement Learning, RL&#xff09;已成为提升模型行为对齐能力的关键技术。然而&#xff0c;传统RL训练框架往往面…

Qwen3-Embedding-4B功能测评:多语言理解能力到底有多强?

Qwen3-Embedding-4B功能测评&#xff1a;多语言理解能力到底有多强&#xff1f; 1. 引言&#xff1a;为何嵌入模型的多语言能力至关重要 随着全球化业务的不断扩展&#xff0c;企业面临的数据不再局限于单一语言。跨国文档检索、跨语言知识管理、多语种客户服务等场景对语义理…

万物识别-中文-通用领域快速上手:推理脚本修改步骤详解

万物识别-中文-通用领域快速上手&#xff1a;推理脚本修改步骤详解 随着多模态AI技术的快速发展&#xff0c;图像识别在实际业务场景中的应用日益广泛。阿里开源的“万物识别-中文-通用领域”模型凭借其对中文语义理解的深度优化&#xff0c;在电商、内容审核、智能搜索等多个…