SenseVoice-Small ONNX识别结果导出Markdown/PDF/Word多格式支持教程你是不是经常遇到这样的烦恼用语音识别工具把会议录音、采访内容转成文字后还得手动复制粘贴到文档里再费劲地调整格式。如果想把识别结果分享给同事或者整理成正式报告这个过程就更麻烦了。今天我要分享一个超级实用的技巧如何让SenseVoice-Small ONNX语音识别工具不仅能准确地把语音转成文字还能一键把结果导出成Markdown、PDF或者Word文档。这样一来你得到的就不是一段干巴巴的文本而是一份可以直接使用、格式规整的文档。这个功能是基于我们之前介绍过的那个轻量化本地语音识别工具实现的。它本身已经很强大了——支持多种音频格式、自动识别语种、还能给文本加上标点。现在我们给它装上“文档导出”的翅膀让它变得更加高效和实用。接下来我就手把手教你如何实现这个功能让你彻底告别繁琐的复制粘贴和格式调整。1. 为什么需要多格式导出在开始动手之前我们先聊聊为什么这个功能如此重要。理解了“为什么”你才会更清楚“怎么做”。1.1 从文本到文档的鸿沟语音识别工具的核心任务是“听写”把声音变成文字。但我们的工作流往往不止于此。一段会议纪要可能需要整理成带标题和要点的Markdown笔记一份采访稿可能需要生成格式规范的Word文档用于校对一个培训录音可能需要转换成结构清晰的PDF讲义。传统的流程是识别 → 复制文本 → 粘贴到文档编辑器 → 手动调整格式。这个过程不仅耗时还容易出错特别是当处理大量音频时效率极其低下。1.2 不同格式不同用途Markdown非常适合技术文档、笔记、博客草稿。它轻便、易读并且能轻松转换为HTML或其他格式。对于程序员、写作者或需要快速整理思路的人来说是首选。PDF格式固定在任何设备上看起来都一样非常适合用于正式分享、存档或打印。比如将客户会议记录导出为PDF后直接通过邮件发送。Word (.docx)仍然是办公场景中最通用的文档格式。方便后续的协作编辑、批注和复杂的格式调整。让识别工具直接输出这些格式相当于把“转录”和“初步排版”两个步骤合并了能为你节省大量时间。1.3 增强的工具链价值为SenseVoice-Small ONNX工具添加导出功能极大地扩展了它的应用场景内容创作者快速将口述内容转为可直接发布的博客草稿Markdown。学生与研究者将讲座录音整理成带章节的笔记PDF/Word。办公行政将会议录音生成标准的会议纪要文档Word。自媒体从业者为视频配音生成字幕文稿多种格式。接下来我们就进入实战环节看看如何为这个强大的识别工具赋能。2. 环境准备与代码增强我们的目标是在原有的Streamlit Web界面基础上增加几个导出按钮并编写相应的后端处理函数。你不需要重新部署整个工具只需在现有代码基础上进行一些增强。2.1 确保基础工具运行正常首先你需要确保基础的SenseVoice-Small ONNX语音识别工具已经能够正常运行。如果还没部署可以参考之前的教程核心步骤很简单准备好Python环境建议3.8。安装核心依赖pip install funasr-onnx streamlit下载Int8量化模型并放到指定目录。运行主程序脚本。假设你的主程序文件叫app.py并且已经实现了音频上传、识别和展示基础文本的功能。我们的改造将围绕这个文件进行。2.2 安装额外的文档处理库要实现导出功能我们需要给Python环境安装几个专门处理文档的库。打开终端执行以下命令pip install markdown pdfkit python-docx这里简单解释一下markdown 将Markdown文本转换为HTML的核心库。pdfkit 一个将HTML转换为PDF的包装库它背后需要wkhtmltopdf这个软件。python-docx 创建和修改Word (.docx) 文档的强大库。特别注意pdfkit需要系统安装wkhtmltopdf。在Ubuntu/Debian上sudo apt-get install wkhtmltopdf在macOS上brew install wkhtmltopdf在Windows上请从 wkhtmltopdf官网 下载安装程序并安装。安装后你可能需要在代码中指定其路径例如config pdfkit.configuration(wkhtmltopdfr‘C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe’)2.3 改造前端界面Streamlit我们需要在结果显示区域的下方增加几个导出按钮。找到你app.py中展示识别结果的部分通常是一个st.text_area或st.code区块在它后面添加以下代码# 假设你的识别结果存储在变量 result_text 中 if result_text: st.success(识别完成) st.text_area(识别结果, result_text, height300) # --- 新增的导出按钮区域 --- st.markdown(---) st.subheader(导出识别结果) col1, col2, col3 st.columns(3) with col1: if st.button( 导出为 Markdown): # 触发Markdown导出逻辑 export_md(result_text) with col2: if st.button( 导出为 Word): # 触发Word导出逻辑 export_docx(result_text) with col3: if st.button(️ 导出为 PDF): # 触发PDF导出逻辑 export_pdf(result_text) # --- 新增结束 ---这段代码创建了三个并排的按钮分别对应三种导出格式。按钮点击后会调用相应的导出函数我们接下来就实现它们。3. 实现核心导出功能现在我们来逐一实现export_md,export_docx和export_pdf这三个函数。我们将它们添加到app.py文件的开头或某个逻辑部分。3.1 导出为Markdown (.md)Markdown导出是最简单的因为识别结果本身就是纯文本。我们只需要将其写入一个.md文件并提供给用户下载。import streamlit as st import os import datetime def export_md(text): 将文本导出为Markdown文件 if not text: st.warning(没有可导出的文本内容。) return # 生成一个带时间戳的文件名避免重复 timestamp datetime.datetime.now().strftime(%Y%m%d_%H%M%S) filename f语音识别结果_{timestamp}.md # 创建文件内容可以简单地为文本添加一个标题 md_content f# 语音识别记录\n\n**生成时间** {datetime.datetime.now().strftime(‘%Y-%m-%d %H:%M:%S‘)}\n\n---\n\n{text} # 使用Streamlit的下载按钮 st.download_button( label点击下载 Markdown 文件, datamd_content, file_namefilename, mimetext/markdown )这个函数做了几件事检查是否有文本内容。生成一个唯一的文件名包含时间戳。为纯文本内容添加了一个简单的Markdown标题和元数据生成时间使其更像一个完整的文档。利用Streamlit的st.download_button功能直接在浏览器中触发文件下载。3.2 导出为Word文档 (.docx)Word文档的生成稍微复杂一些但python-docx库让这一切变得很直观。我们可以设置字体、段落样式甚至添加页眉页脚。from docx import Document from docx.shared import Pt, Inches from docx.enum.text import WD_ALIGN_PARAGRAPH import io def export_docx(text): 将文本导出为Word文档 if not text: st.warning(没有可导出的文本内容。) return # 创建一个新的Word文档对象 doc Document() # 1. 添加标题 title doc.add_heading(‘语音识别记录‘, 0) # 0级标题是最大的 title.alignment WD_ALIGN_PARAGRAPH.CENTER # 2. 添加副标题时间 time_str datetime.datetime.now().strftime(‘%Y年%m月%d日 %H:%M:%S‘) subtitle doc.add_paragraph(f‘生成时间{time_str}‘) subtitle.alignment WD_ALIGN_PARAGRAPH.CENTER # 添加一个分页符或分隔线这里用空行和边框模拟 doc.add_paragraph().add_run().add_break() # 3. 添加正文 # 先添加一个段落 content_para doc.add_paragraph() # 设置正文字体可选 run content_para.add_run(text) # run.font.name ‘宋体‘ # 设置中文字体 # run.font.size Pt(12) # 4. 将文档保存到内存字节流 doc_io io.BytesIO() doc.save(doc_io) doc_io.seek(0) # 将指针移回文件开头 # 5. 提供下载 timestamp datetime.datetime.now().strftime(%Y%m%d_%H%M%S) filename f语音识别结果_{timestamp}.docx st.download_button( label点击下载 Word 文档, datadoc_io, file_namefilename, mimeapplication/vnd.openxmlformats-officedocument.wordprocessingml.document )这个函数创建了一个结构清晰的Word文档包含居中的标题、生成时间以及正文。你可以根据需要轻松扩展比如添加页眉页脚、设置不同的段落样式、插入表格等。3.3 导出为PDF文档PDF导出通常需要一个中间格式我们选择HTML。流程是先将文本和样式转换成HTML再用pdfkit将HTML渲染成PDF。import pdfkit import tempfile import base64 def export_pdf(text): 将文本导出为PDF文档 if not text: st.warning(没有可导出的文本内容。) return # 1. 构建HTML内容 time_str datetime.datetime.now().strftime(‘%Y年%m月%d日 %H:%M:%S‘) html_content f“““ !DOCTYPE html html head meta charsetutf-8 title语音识别记录/title style body {{ font-family: ‘SimSun‘, ‘Microsoft YaHei‘, sans-serif; line-height: 1.6; padding: 2cm; }} h1 {{ text-align: center; color: #333; }} .meta {{ text-align: center; color: #666; margin-bottom: 2em; }} .content {{ text-align: justify; }} hr {{ border: none; border-top: 1px solid #eee; margin: 2em 0; }} /style /head body h1语音识别记录/h1 div classmeta生成时间{time_str}/div hr div classcontent {text.replace(‘\n‘, ‘br‘)} /div /body /html “““ # 2. 配置pdfkit如果wkhtmltopdf不在系统PATH需指定路径 # 例如在Windows上config pdfkit.configuration(wkhtmltopdfr‘C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe‘) # 在Linux/macOS上如果已正确安装通常不需要指定。 try: config None # 如果需要在此处取消注释并修改config # config pdfkit.configuration(wkhtmltopdf‘/path/to/wkhtmltopdf‘) # 3. 使用临时文件保存PDF with tempfile.NamedTemporaryFile(suffix‘.pdf‘, deleteFalse) as tmp_file: pdf_path tmp_file.name # 将HTML转换为PDF pdfkit.from_string(html_content, pdf_path, configurationconfig) # 4. 读取PDF文件并提供下载 with open(pdf_path, ‘rb‘) as f: pdf_bytes f.read() # 5. 清理临时文件 os.unlink(pdf_path) # 6. 提供下载 timestamp datetime.datetime.now().strftime(%Y%m%d_%H%M%S) filename f语音识别结果_{timestamp}.pdf st.download_button( label点击下载 PDF 文档, datapdf_bytes, file_namefilename, mimeapplication/pdf ) except Exception as e: st.error(f“生成PDF时出错{e}“) st.info(“请确保系统已正确安装 ‘wkhtmltopdf‘。具体安装方法请参考教程中的说明。”)这个函数是三个中最复杂的因为它涉及外部工具。它创建了一个带有基本样式字体、边距、对齐方式的HTML模板将识别结果填充进去然后调用pdfkit生成PDF。wkhtmltopdf的安装是关键请务必根据上面的提示完成系统级的安装。4. 完整流程与使用技巧将上述代码块整合到你的app.py中之后一个支持多格式导出的增强版语音识别工具就诞生了。让我们回顾一下完整的使用流程并分享一些让体验更好的小技巧。4.1 端到端操作流程启动工具在终端运行streamlit run app.py在浏览器中打开界面。上传音频点击上传按钮选择你的会议录音、采访音频等文件。执行识别点击“开始识别”按钮等待处理完成。带有标点的文本会显示在结果框中。导出文档点击“导出为 Markdown”你会立即下载一个.md文件可以用Typora、VS Code等编辑器打开。点击“导出为 Word”会下载一个.docx文件可以直接用Microsoft Word或WPS打开编辑。点击“导出为 PDF”会下载一个.pdf文件适合直接发送或打印。后续处理拿到格式规整的文档后你可以继续在相应的软件中进行深度编辑、格式美化或分享。4.2 提升体验的实用技巧批量处理思路虽然当前界面是针对单个文件的但你可以在代码层面进行改造遍历一个文件夹内的所有音频文件识别后自动批量导出为指定格式的文档实现自动化流水线。自定义模板你觉得生成的Word或PDF样式太简单没问题修改export_docx和export_pdf函数中的样式部分即可。比如在Word里添加公司Logo在PDF里更改页眉页脚。python-docx和HTML/CSS给了你极大的定制空间。结果分段与标题识别进阶目前我们将整段识别文本作为正文。一个更智能的做法是结合语音识别中的时间戳信息或者使用简单的文本分析如检测长时间停顿、关键词尝试自动将文本分割成段落并为它们添加Markdown的##标题或Word的标题样式。这能让生成的文档结构瞬间清晰很多。错误处理在实际使用中务必确保代码有良好的错误处理如上文PDF导出中的try-catch并给用户清晰的提示比如“PDF生成失败请检查wkhtmltopdf是否安装”。5. 总结通过为SenseVoice-Small ONNX语音识别工具添加Markdown、Word、PDF导出功能我们完成了一次从“语音转文本工具”到“语音转文档工作流”的升级。这个改造并不复杂核心就是利用了几个强大的Python文档处理库并在Streamlit界面上增加了几个按钮。回顾一下我们实现的核心价值效率提升一键完成从语音到规整文档的转换节省大量手动操作时间。格式就绪产出物不再是原始文本而是可直接使用、分享或进一步编辑的正式文档。灵活性高三种格式覆盖了技术记录、办公协作和正式归档等主要场景。本地隐私所有处理识别、格式转换均在本地完成敏感音频和文本内容无需上传至任何服务器。你可以根据自己的需求在这个基础上继续扩展比如增加导出为纯文本TXT、导出为带字幕的SRT文件等功能。希望这个教程能帮你打造出更称手的本地语音处理工具让工作和学习效率再上一个台阶。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。