Paraformer-large识别结果导出:TXT/JSON格式生成实战教程
1. 教程目标与适用人群
你是不是也遇到过这种情况:用语音识别工具转写了一段很长的会议录音或课程音频,结果只能在网页界面上看文字,没法保存下来做进一步整理?复制粘贴太麻烦,还容易丢内容。
本文要解决的就是这个问题——如何将 Paraformer-large 模型识别出的文字结果,自动保存为 TXT 和 JSON 文件,方便后续归档、分析或导入其他系统使用。
适合谁看:
- 正在使用 Paraformer-large 做语音转写的用户
- 想要把识别结果结构化保存的技术爱好者
- 需要批量处理录音文件的办公人员、教育工作者、内容创作者
学完你能掌握:
- 在原有 Gradio 界面基础上扩展“导出功能”
- 实现一键生成
.txt纯文本和.json结构化数据 - 自定义文件命名规则与存储路径
- 完整可运行代码,直接复制就能用
不需要你懂多深的编程,只要会改几行 Python 脚本,就能让整个流程自动化起来。
2. 功能升级思路:从展示到落地
目前默认的app.py只负责把识别结果显示在网页上。我们要做的,是在用户点击“开始转写”后,不仅显示结果,还能自动生成两个文件:
output.txt:纯文本格式,适合直接阅读或导入 Wordoutput.json:包含完整信息(原始音频名、识别时间、文本内容等),便于程序调用
这样就实现了“识别 + 输出”的闭环,真正把 AI 工具变成生产力工具。
2.1 新增功能点拆解
| 功能模块 | 实现方式 |
|---|---|
| 文件命名 | 根据上传音频名生成对应 txt/json 文件 |
| 文本写入 | 使用 Python 内置open()函数写入 txt |
| 结构化输出 | 构造字典对象并用json.dump()保存 |
| 下载链接 | Gradio 提供gr.File组件支持下载 |
我们不会改动模型本身,只是在推理完成后加几步“保存动作”,非常安全且易于维护。
3. 修改后的完整代码实现
下面是你需要替换掉原app.py的新版脚本。我已经加上了清晰注释,每一部分做什么都说清楚了。
# app.py - 支持结果导出的增强版 import gradio as gr from funasr import AutoModel import os import json from datetime import datetime # 加载模型 model_id = "iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch" model = AutoModel( model=model_id, model_revision="v2.0.4", device="cuda:0" ) # 定义保存目录 OUTPUT_DIR = "/root/workspace/output" os.makedirs(OUTPUT_DIR, exist_ok=True) def asr_process_with_export(audio_path): if audio_path is None: return "请先上传音频文件", None, None # 推理识别 res = model.generate(input=audio_path, batch_size_s=300) if len(res) > 0: text = res[0]['text'] else: return "识别失败,请检查音频格式", None, None # 获取音频文件名(不含路径) audio_filename = os.path.basename(audio_path) base_name = os.path.splitext(audio_filename)[0] # 生成时间戳 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") # 构建输出文件名 txt_file = os.path.join(OUTPUT_DIR, f"{base_name}_transcript.txt") json_file = os.path.join(OUTPUT_DIR, f"{base_name}_result.json") # 写入 TXT 文件 with open(txt_file, 'w', encoding='utf-8') as f: f.write(text) # 写入 JSON 文件(带元信息) result_data = { "audio_file": audio_filename, "transcript": text, "duration_seconds": res[0].get("duration", "unknown"), "sample_rate": res[0].get("sample_rate", "16000"), "language": "zh-cn", "generated_at": timestamp } with open(json_file, 'w', encoding='utf-8') as f: json.dump(result_data, f, ensure_ascii=False, indent=2) # 返回识别结果 + 两个可下载的文件路径 return text, txt_file, json_file # 构建界面 with gr.Blocks(title="Paraformer 语音转文字控制台") as demo: gr.Markdown("# 🎤 Paraformer 离线语音识别转写") gr.Markdown("支持长音频上传,自动添加标点符号和端点检测,并可导出 TXT/JSON 文件。") with gr.Row(): with gr.Column(): audio_input = gr.Audio(type="filepath", label="上传音频或直接录音") submit_btn = gr.Button("开始转写", variant="primary") with gr.Column(): text_output = gr.Textbox(label="识别结果", lines=10) gr.Markdown("### 下载识别结果") txt_output = gr.File(label="TXT 文件下载") json_output = gr.File(label="JSON 文件下载") # 绑定按钮事件 submit_btn.click( fn=asr_process_with_export, inputs=audio_input, outputs=[text_output, txt_output, json_output] ) # 启动服务 demo.launch(server_name="0.0.0.0", server_port=6006)3.1 关键修改说明
- 新增 OUTPUT_DIR:所有导出文件统一放在
/root/workspace/output目录下,避免混乱 - 文件名智能生成:基于原音频名 +
_transcript.txt/_result.json,防止覆盖 - JSON 包含元数据:不只是文字,还包括时间、语言、音频信息,方便后期管理
- Gradio File 组件:用户可以直接点击下载生成的文件
4. 如何部署与验证效果
4.1 替换脚本并重启服务
- 登录你的实例终端
- 编辑新脚本:
vim /root/workspace/app.py- 粘贴上面的完整代码,保存退出(
:wq) - 确保 output 目录存在:
mkdir -p /root/workspace/output- 启动服务:
source /opt/miniconda3/bin/activate torch25 && cd /root/workspace && python app.py4.2 测试流程演示
打开本地浏览器访问
http://127.0.0.1:6006上传一个
.wav或.mp3音频文件(建议先用小文件测试)点击“开始转写”
等待几秒后:
- 文字出现在上方文本框
- 下方出现两个可下载按钮:“TXT 文件下载”和“JSON 文件下载”
分别点击下载,查看内容是否正确
示例输出文件内容
meeting_01_transcript.txt:
今天召开了项目进度会议,主要讨论了下一阶段的功能开发安排。前端团队将在下周完成登录模块重构,后端预计周三前提供新的 API 接口文档。meeting_01_result.json:
{ "audio_file": "meeting_01.wav", "transcript": "今天召开了项目进度会议...", "duration_seconds": 187.5, "sample_rate": "16000", "language": "zh-cn", "generated_at": "20250405_142310" }5. 进阶技巧与实用建议
5.1 批量处理多个音频文件?
虽然 Gradio 是单文件交互式界面,但你可以写个批处理脚本,在后台自动跑一堆音频。
示例脚本batch_asr.py:
import os from funasr import AutoModel model = AutoModel(model="iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch") audio_dir = "/root/workspace/audio_files" output_dir = "/root/workspace/batch_output" for file in os.listdir(audio_dir): if file.endswith(('.wav', '.mp3')): path = os.path.join(audio_dir, file) res = model.generate(input=path) text = res[0]['text'] if res else "" with open(os.path.join(output_dir, f"{os.path.splitext(file)[0]}.txt"), 'w') as f: f.write(text)5.2 如何让导出更规范?
可以加入这些优化:
- 文件名中加入日期前缀:
20250405_meeting_summary.txt - 设置最大文件数量限制,定期清理旧文件
- 添加语音时长过滤,跳过太短的无效录音
5.3 注意事项提醒
- 磁盘空间:长时间录音转写会产生大量文本,记得定期清理
/output目录 - 编码问题:务必使用
encoding='utf-8',否则中文可能乱码 - 路径权限:确保
/root/workspace/output有写入权限,否则会报错 - GPU 利用率:4090D 上识别速度很快,但如果并发太多请求可能会卡顿
6. 总结:让语音识别真正为你所用
通过这篇教程,你应该已经成功把一个“只能看”的语音识别工具,变成了一个“能存、能用、能集成”的实用系统。
核心收获回顾:
- 学会了如何在 Paraformer-large 的 Gradio 界面中增加文件导出功能
- 掌握了 TXT 和 JSON 两种主流格式的生成方法
- 理解了如何组织输出结构,便于后期管理和程序调用
- 获得了可直接运行的完整代码模板
现在你可以:
- 把会议录音自动转成纪要文档
- 将课程音频转为学习笔记
- 批量处理客户访谈并归档
- 搭建自己的语音资料库
这才是 AI 工具该有的样子——不只是炫技,而是实实在在帮你省时间、提效率。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。