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

Paraformer-large邮件通知功能:完成转写后自动发送报告

Paraformer-large邮件通知功能:完成转写后自动发送报告

1. 实现目标:让语音转写更智能、更省心

你有没有遇到过这种情况:上传了一个长达两小时的会议录音,点击“开始转写”后就去忙别的事了,结果等了半天也不知道识别完成了没有?来回刷新页面太麻烦,一直挂着又浪费时间。

今天我们要解决的就是这个问题——给 Paraformer-large 语音识别系统加上“邮件通知”功能。当音频转写完成后,系统会自动把识别结果通过邮件发送到你的邮箱,真正做到“提交即忘”,大幅提升使用体验。

这个功能特别适合以下场景:

  • 长时间批量处理录音文件
  • 远程服务器上运行任务无法实时查看
  • 团队协作中需要及时同步转录内容

接下来,我会手把手教你如何在原有 Gradio 界面基础上,轻松集成自动发邮件功能。

2. 功能扩展思路与技术选型

2.1 整体流程设计

我们希望实现这样一个闭环流程:

用户上传音频 → 后台开始转写 → 转写完成 → 自动生成文本报告 → 自动发送邮件 → 返回提示信息

关键点在于:不能阻塞主界面响应,否则用户就得一直等着邮件发完才能操作下一步。所以我们采用同步逻辑中的简单延时处理方式(对于轻量级应用足够实用)。

2.2 邮件发送方案选择

Python 中常用的邮件库是smtplib+email组合,无需额外依赖,稳定性高,适合嵌入现有项目。

支持主流邮箱服务(QQ、163、Gmail、Outlook等),只需要开启 SMTP 功能并获取授权码即可。

为什么不选第三方服务?

像 SendGrid、阿里云邮件推送虽然更专业,但需要注册账号、配置密钥、可能涉及费用。而我们只是想做个简单的结果通知,本地 SMTP 完全够用,部署也快。

3. 修改 app.py:添加邮件发送功能

我们现在要修改原来的app.py文件,在识别完成后加入邮件发送逻辑。

3.1 新增邮件配置参数

首先,在代码顶部附近添加你的邮箱配置信息(请替换成自己的):

# === 邮件通知配置 === SMTP_SERVER = "smtp.qq.com" # QQ邮箱SMTP服务器 SMTP_PORT = 587 # TLS端口 SENDER_EMAIL = "your_email@qq.com" # 发件人邮箱 SENDER_PASSWORD = "your_auth_code" # 授权码(非登录密码!) RECEIVER_EMAIL = "your_email@qq.com" # 收件人邮箱(可设为不同地址)

📌注意:QQ邮箱需手动开启“POP3/SMTP服务”,并在设置中获取“授权码”。不要使用登录密码!

3.2 编写 send_email 函数

asr_process函数之前定义一个通用的邮件发送函数:

import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from datetime import datetime def send_email(transcribed_text, audio_filename="unknown"): """发送转写结果邮件""" try: # 创建带主题和发件人信息的邮件对象 msg = MIMEMultipart() msg['From'] = SENDER_EMAIL msg['To'] = RECEIVER_EMAIL msg['Subject'] = f"【Paraformer转写完成】 - {audio_filename} | {datetime.now().strftime('%H:%M')}" # 构建邮件正文 body = f""" <h3>🎤 语音转写已完成</h3> <p><strong>音频文件:</strong>{audio_filename}</p> <p><strong>转写时间:</strong>{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}</p> <hr> <h4>📝 识别结果:</h4> <pre style="font-family: Arial, sans-serif; font-size: 14px; background-color: #f5f5f5; padding: 10px; border-radius: 5px;"> {transcribed_text} </pre> <hr> <small style="color: #888;">本邮件由 Paraformer-large 离线语音识别系统自动发出。</small> """ msg.attach(MIMEText(body, 'html', 'utf-8')) # 连接SMTP服务器并发送 server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) server.starttls() # 启用TLS加密 server.login(SENDER_EMAIL, SENDER_PASSWORD) server.send_message(msg) server.quit() print("✅ 邮件发送成功!") return True except Exception as e: print(f"❌ 邮件发送失败: {str(e)}") return False

3.3 更新 asr_process 函数以触发邮件

现在我们将原来的asr_process函数升级一下,让它在识别完成后尝试发送邮件:

import os import gradio as gr from funasr import AutoModel # 加载模型 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 "请先上传音频文件" # 获取文件名用于邮件标题 filename = os.path.basename(audio_path) if audio_path else "unknown_audio" # 开始识别 res = model.generate( input=audio_path, batch_size_s=300, ) # 提取结果 if len(res) > 0: text_result = res[0]['text'] else: return "识别失败,请检查音频格式" # 尝试发送邮件 success = send_email(text_result, filename) # 返回结果 + 邮件状态提示 status_msg = "📧 邮件已发送至您的邮箱" if success else "⚠️ 转写完成,但邮件发送失败" return f"{text_result}\n\n---\n{status_msg}"

3.4 完整更新后的 app.py 结构概览

你现在完整的app.py应该包含以下几个部分:

  1. 导包(gradio, funasr, smtplib, email 相关)
  2. 模型加载
  3. 邮件配置常量
  4. send_email()函数
  5. 增强版asr_process()函数
  6. Gradio 界面构建与启动

确保所有缩进正确,保存后重启服务即可生效。

4. 测试与验证步骤

4.1 第一步:检查依赖是否齐全

大多数情况下,Python 内置了smtplibemail模块,无需安装。但如果你遇到导入错误,可以运行:

pip install smtplib email

不过通常不需要。

4.2 第二步:测试邮件功能独立运行

你可以先写一个测试脚本验证邮件能否正常发出:

# test_email.py from send_email import send_email # 假设你把函数单独提取出来了 if __name__ == "__main__": sample_text = "这是一条来自 Paraformer 的测试转录内容。\n时间:" + str(datetime.now()) send_email(sample_text, "test_audio.wav")

运行它看是否能收到邮件。

4.3 第三步:完整流程测试

  1. 启动服务:python app.py
  2. 打开本地映射地址:http://127.0.0.1:6006
  3. 上传一段短音频(建议1分钟以内)
  4. 点击“开始转写”
  5. 观察终端输出是否有 ✅ 邮件发送成功
  6. 查看邮箱是否收到带格式的结果邮件

如果一切顺利,你会看到类似这样的效果:

📧 主题:【Paraformer转写完成】 - meeting_01.mp3 | 14:23
正文包含时间戳、原始音频名、识别文字和样式化排版

5. 使用技巧与常见问题解决

5.1 如何提升邮件送达率?

  • 使用企业邮箱或 Gmail 更稳定
  • QQ邮箱建议使用.com后缀而非.cn
  • 不要频繁发送,避免被判定为垃圾邮件
  • 可将发件人添加到收件箱联系人列表

5.2 如何自定义收件人?

目前是固定收件人,如果你想让用户输入邮箱,可以在界面上加一个输入框:

with gr.Row(): audio_input = gr.Audio(type="filepath", label="上传音频") email_input = gr.Textbox(label="接收邮箱", value="your_email@qq.com") submit_btn = gr.Button("开始转写") # 修改 click 绑定时传入 email_input submit_btn.click( fn=lambda audio, email: asr_process_with_custom_email(audio, email), inputs=[audio_input, email_input], outputs=text_output )

然后修改函数接收email参数并动态赋值RECEIVER_EMAIL

5.3 长音频处理期间界面卡住怎么办?

Gradio 默认是同步执行的,所以长音频会导致界面“假死”。解决方案有两个:

方案一:前端提示优化

在按钮点击后立即显示“正在转写,请耐心等待……”提示,减少焦虑感。

方案二:异步处理(进阶)

使用queue()开启异步模式:

demo.queue().launch(server_name="0.0.0.0", server_port=6006)

并配合gr.Progress()显示进度条(FunASR 目前不直接支持回调,需自行封装)。

6. 总结:打造真正可用的自动化语音处理系统


获取更多AI镜像

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

http://www.cnnetsun.cn/news/735304.html

相关文章:

  • 还在用传统模糊方法?:探索OpenCV 4.x中新增可编程模糊算法的惊人性能提升
  • 一看就懂的网络安全核心要点:零基础快速上手指南
  • 网络安全全栈指南:万字长文带您从零基础入门到系统精通
  • 网络安全入行血泪总结:这10个新手必踩的坑,我帮你先填上了
  • 基于STM32单片机智能消防小车灭火机器人寻找火源锂电池蓝牙无线APP/WiFi无线APP/摄像头视频监控设计S378
  • Open-AutoGLM日志查看技巧:问题定位与调试实战
  • 阿里开源FSMN VAD模型实战:WebUI界面快速上手保姆级教程
  • AI元人文:反思之反思——作为可能性文明操作系统的思想实验
  • 《寒窑赋》
  • Z-Image-Turbo与ComfyUI集成?可视化工作流部署教程
  • 别卷了,AI还没学会“背锅”呢
  • 【市净率PB】【市盈率PE】【市盈增长比 PEG】
  • GPEN显存溢出怎么办?低显存GPU优化部署实战解决方案
  • AI创作趋势前瞻:Qwen开源图像模型落地实战指南
  • 2026必备!10个AI论文写作软件,自考毕业论文轻松搞定!
  • YOLOv11预测结果后处理:NMS优化部署技巧详解
  • Emotion2Vec+ Large与DeepSpeech情感分析对比:企业选型评测
  • 基于深度学习YOLOv10的道路坑洼损坏检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • 基于深度学习YOLOv10的铁路轨道缺陷检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • 基于深度学习的道路交通信号检测系统(YOLOv8+YOLO数据集+UI界面+Python项目源码+模型)
  • 为什么顶尖公司都在用Boost?:解密C++高性能服务端开发的底层利器
  • Qwen3-Embedding-8B vs 0.6B成本效益对比:企业落地评测
  • 揭秘高斯模糊背后的数学原理:C++结合OpenCV实现高效图像平滑处理
  • C# LINQ多表联合查询深度解析(从入门到精通必读)
  • 【C++高级编程必修课】:掌握模板类头文件与源文件分离的3种实战方案
  • 如何做AB测试?CAM++不同版本性能对比方法
  • Paraformer-large模型加载慢?缓存机制优化部署教程
  • FSMN VAD实战案例:客服录音自动分割系统搭建
  • GPT-OSS显存不足?20B模型48GB显存适配解决方案详解
  • 说说什么是Redis缓存击穿、缓存穿透、缓存雪崩?