Paraformer-large Gradio集成指南:添加下载按钮导出TXT结果
1. 背景与目标
随着语音识别技术在会议记录、访谈转写、教育辅助等场景中的广泛应用,用户不仅希望获得高精度的文本输出,还期望能够便捷地保存和分享识别结果。Paraformer-large 是由阿里达摩院开源的一款高性能非自回归语音识别模型,结合 FunASR 框架可实现工业级的离线语音转文字能力。
当前大多数 Gradio 可视化界面仅支持展示识别结果,缺乏将文本导出为本地文件的功能。本文旨在扩展原始 Paraformer-large + Gradio 应用,在现有 Web 界面中新增“下载 TXT”功能,使用户可以一键将识别结果保存为.txt文件,提升使用体验和实用性。
本教程适用于已部署 Paraformer-large 模型并运行 Gradio 服务的环境,重点解决“结果导出”这一关键交互闭环。
2. 功能扩展设计思路
2.1 核心需求分析
原始应用流程如下: 1. 用户上传音频 2. 后端调用 Paraformer-large 进行 ASR 推理 3. 返回识别文本至gr.Textbox
新增功能需满足: - 识别完成后生成纯文本.txt文件 - 提供显式下载按钮 - 下载内容与显示文本一致 - 支持中文字符编码(UTF-8) - 不影响原有识别性能
2.2 技术选型与实现路径
Gradio 原生支持gr.File组件用于文件下载。我们可以通过以下方式实现:
- 在推理函数中同步生成临时
.txt文件 - 将文件路径作为
gr.File的输入返回 - 利用
submit_btn.click()多输出机制同时更新文本框和文件链接
该方案无需额外依赖,完全基于 Gradio 内建能力,工程成本低且稳定性高。
3. 完整代码实现
3.1 修改后的 app.py 全量代码
import gradio as gr from funasr import AutoModel import os import tempfile # 加载模型 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" ) def asr_process(audio_path): if audio_path is None: return "请先上传音频文件", None # 执行语音识别 res = model.generate( input=audio_path, batch_size_s=300, ) # 提取识别文本 if len(res) > 0: text = res[0]['text'] else: text = "识别失败,请检查音频格式" # 创建临时 txt 文件 temp_dir = tempfile.mkdtemp() output_path = os.path.join(temp_dir, "transcription.txt") with open(output_path, "w", encoding="utf-8") as f: f.write(text) return text, output_path # 构建增强型 Web 界面 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") with gr.Column(): text_output = gr.Textbox(label="识别结果", lines=15) file_output = gr.File(label="下载识别结果 (TXT)", interactive=False) # 绑定事件:点击按钮后同时输出文本和文件 submit_btn.click( fn=asr_process, inputs=audio_input, outputs=[text_output, file_output] ) # 启动服务 demo.launch(server_name="0.0.0.0", server_port=6006)3.2 关键修改点解析
| 原始功能 | 扩展功能 | 说明 |
|---|---|---|
outputs=text_output | outputs=[text_output, file_output] | 支持多输出 |
| 无文件生成 | 使用tempfile.mkdtemp()创建临时目录 | 避免路径冲突 |
| 仅返回字符串 | 返回(text, output_path)元组 | 符合 Gradio 文件组件要求 |
| 无下载入口 | 新增gr.File(interactive=False) | 显示为可点击下载链接 |
3.3 编码与兼容性处理
- UTF-8 编码写入:确保中文标点和字符正确保存
- 临时目录管理:使用系统级临时目录,避免权限问题
- 文件名固定为
transcription.txt:便于用户识别内容来源 interactive=False:防止用户误操作上传文件
4. 部署与访问说明
4.1 服务启动步骤
- 将上述
app.py保存至工作目录(如/root/workspace/app.py)
vim /root/workspace/app.py- 确保 Conda 环境激活命令正确:
source /opt/miniconda3/bin/activate torch25 && cd /root/workspace && python app.py注意:请确认
torch25环境中已安装funasr>=1.0.0和gradio>=4.0.0
4.2 本地访问配置
由于云平台限制,需通过 SSH 隧道映射端口:
ssh -L 6006:127.0.0.1:6006 -p [SSH端口] root@[实例IP]连接成功后,在本地浏览器打开:
👉http://127.0.0.1:6006
4.3 使用流程演示
- 上传一段
.wav或.mp3音频文件 - 点击【开始转写】
- 等待识别完成,文本自动填充
- 点击下方【下载识别结果 (TXT)】按钮即可保存
5. 常见问题与优化建议
5.1 常见问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 下载按钮无反应 | 返回路径无效 | 检查output_path是否真实存在 |
| 中文乱码 | 编码未指定 | 确保open(..., encoding="utf-8") |
| 文件无法生成 | 权限不足 | 检查/tmp目录写权限 |
| 多次识别覆盖文件 | 未隔离临时空间 | tempfile.mkdtemp()已解决此问题 |
5.2 性能与用户体验优化
- 缓存清理机制:定期清理
/tmp下过期临时目录,避免磁盘占用 - 自定义文件名:可根据音频原名生成对应
.txt名称,例如audio_01.txt - 批量导出支持:未来可扩展为 ZIP 打包多个转写结果
- 前端提示优化:增加加载动画和成功提示,提升反馈感
5.3 安全性考虑
- 所有文件操作限定在临时目录内
- 不暴露服务器真实路径
- 输入音频路径由 Gradio 自动管理,防止路径穿越攻击
6. 总结
本文详细介绍了如何在 Paraformer-large + Gradio 构建的语音识别系统中,集成“下载 TXT 结果”功能,补全了从“输入→处理→输出→导出”的完整用户链路。
核心要点包括: 1. 利用gr.File实现安全文件下载 2. 通过tempfile模块管理临时资源 3. 多输出绑定机制实现一体化响应 4. UTF-8 编码保障中文兼容性
该方案简洁高效,无需引入外部依赖,适合各类语音识别项目的生产环境部署。通过这一小步改进,显著提升了系统的实用性和专业度。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。