news 2026/4/18 9:56:19

语音识别结果导出Excel?Python脚本实现数据转换指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
语音识别结果导出Excel?Python脚本实现数据转换指南

语音识别结果导出Excel?Python脚本实现数据转换指南

1. 引言:从语音识别到结构化输出

随着多模态AI技术的发展,语音理解已不再局限于“语音转文字”。以阿里巴巴达摩院开源的SenseVoiceSmall模型为代表的新一代语音理解系统,不仅支持中、英、日、韩、粤语等多语言高精度识别,更具备情感识别(如开心、愤怒、悲伤)和声音事件检测(如BGM、掌声、笑声)能力。这种“富文本转录”(Rich Transcription)为客服质检、会议纪要、内容审核等场景提供了更丰富的信息维度。

然而,原始识别结果通常以带标签的文本形式输出(例如<|HAPPY|><|APPLAUSE|>),难以直接用于数据分析或报告生成。本文将介绍如何通过 Python 脚本,将 SenseVoiceSmall 的识别结果解析并导出为结构化的 Excel 文件,便于后续处理与可视化。

2. 核心功能设计思路

2.1 需求分析

在实际应用中,用户往往需要: - 将音频文件批量处理后的识别结果统一管理; - 分离出纯文本、情感标签、声音事件等字段; - 导出为 Excel 表格,供非技术人员查阅或进一步分析。

因此,我们的目标是构建一个自动化流程:

音频文件 → SenseVoiceSmall 识别 → 原始文本 → 解析标签 → 结构化数据 → Excel 输出

2.2 技术选型

我们基于以下库完成开发: -funasr: 调用 SenseVoiceSmall 模型进行推理; -pandas: 数据清洗与表格组织; -openpyxl: 支持复杂格式写入的 Excel 处理库; -os,glob: 批量遍历音频文件。

3. 实现步骤详解

3.1 环境准备

确保已安装所需依赖:

pip install funasr modelscope gradio av pandas openpyxl

注意:若使用 GPU,请确认 PyTorch 版本兼容 CUDA,并设置device="cuda:0"

3.2 定义语音识别函数

封装模型调用逻辑,支持单个音频识别:

from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocess import os # 初始化模型(全局一次即可) model_id = "iic/SenseVoiceSmall" model = AutoModel( model=model_id, trust_remote_code=True, vad_model="fsmn-vad", vad_kwargs={"max_single_segment_time": 30000}, device="cuda:0" # 使用GPU加速 ) def recognize_audio(audio_path, language="auto"): """ 对音频文件进行语音识别,返回原始和清洗后文本 """ if not os.path.exists(audio_path): return {"error": "文件不存在"} try: res = model.generate( input=audio_path, cache={}, language=language, use_itn=True, batch_size_s=60, merge_vad=True, merge_length_s=15, ) if len(res) > 0: raw_text = res[0]["text"] clean_text = rich_transcription_postprocess(raw_text) return { "raw": raw_text, "clean": clean_text } else: return {"error": "识别失败"} except Exception as e: return {"error": str(e)}

3.3 标签解析与结构化提取

关键在于从富文本中抽取出情感、事件等元信息。我们可以利用正则表达式匹配特定模式:

import re def parse_rich_text(text): """ 解析富文本中的情感与声音事件标签 返回:纯文本 + 情感列表 + 事件列表 """ # 匹配所有 <|...|> 形式的标签 tags = re.findall(r"<\|([^|]+)\|>", text) emotions = [] events = [] valid_emotions = {"HAPPY", "ANGRY", "SAD", "NEUTRAL"} valid_events = {"BGM", "APPLAUSE", "LAUGHTER", "CRY"} for tag in tags: if tag in valid_emotions: emotions.append(tag) elif tag in valid_events: events.append(tag) # 移除所有标签得到纯净文本 plain_text = re.sub(r"<\|[^|]+\|>", "", text).strip() return { "text": plain_text, "emotions": list(set(emotions)), # 去重 "events": list(set(events)) }

3.4 批量处理与 Excel 导出

遍历指定目录下的所有音频文件,逐个识别并汇总结果:

import glob import pandas as pd from datetime import datetime def batch_export_to_excel(audio_dir, output_file="speech_results.xlsx", language="auto"): """ 批量处理音频文件并导出为 Excel """ # 获取所有常见音频格式文件 audio_extensions = ["*.wav", "*.mp3", "*.flac", "*.m4a"] audio_files = [] for ext in audio_extensions: audio_files.extend(glob.glob(os.path.join(audio_dir, ext))) results = [] for file_path in audio_files: filename = os.path.basename(file_path) print(f"正在处理: {filename}") # 步骤1:语音识别 recognition_result = recognize_audio(file_path, language) if "error" in recognition_result: results.append({ "filename": filename, "status": "failed", "raw_text": "", "plain_text": "", "emotions": "", "events": "", "error": recognition_result["error"] }) continue # 步骤2:解析富文本 parsed = parse_rich_text(recognition_result["raw"]) # 步骤3:整理数据行 results.append({ "filename": filename, "status": "success", "raw_text": recognition_result["raw"], "plain_text": parsed["text"], "emotions": ", ".join(parsed["emotions"]) if parsed["emotions"] else "", "events": ", ".join(parsed["events"]) if parsed["events"] else "", "error": "" }) # 转换为 DataFrame df = pd.DataFrame(results) # 写入 Excel with pd.ExcelWriter(output_file, engine='openpyxl') as writer: df.to_excel(writer, sheet_name='识别结果', index=False) # 可选:添加样式美化 worksheet = writer.sheets['识别结果'] for col in worksheet.columns: max_length = max(len(str(cell.value)) for cell in col) adjusted_width = min(max_length + 2, 50) worksheet.column_dimensions[col[0].column_letter].width = adjusted_width print(f"✅ 批量处理完成,结果已保存至: {output_file}")

3.5 使用示例

# 示例调用 batch_export_to_excel( audio_dir="./audios/", # 音频文件夹路径 output_file="output/results.xlsx", language="auto" # 自动识别语言 )

4. 实践问题与优化建议

4.1 常见问题及解决方案

问题原因解决方法
识别速度慢CPU 推理切换至 GPU,检查device="cuda:0"是否生效
音频无法加载缺少解码器安装ffmpeg并确保av库可用
标签未正确解析正则规则不全扩展valid_emotions/events集合
内存溢出批量过大设置batch_size_s或分批次处理

4.2 性能优化建议

  1. 启用批处理机制:对于大量短音频,可合并成批次送入模型,提升吞吐效率。
  2. 缓存模型实例:避免重复初始化模型,降低启动开销。
  3. 异步并发处理:结合concurrent.futures.ThreadPoolExecutor实现多文件并行识别(适用于 I/O 密集型任务)。
  4. 结果去重策略:对连续出现的情感标签做时间窗口聚合,避免冗余记录。

5. 总结

5. 总结

本文围绕阿里开源的SenseVoiceSmall多语言语音理解模型,提出了一套完整的语音识别结果结构化导出方案。通过 Python 脚本实现了以下核心功能:

  • 调用funasr进行高精度语音识别,支持情感与声音事件检测;
  • 利用正则表达式解析富文本标签,分离出纯文本、情绪、事件等字段;
  • 批量处理多个音频文件,并将结果导出为格式清晰的 Excel 表格;
  • 提供可扩展的数据处理框架,便于集成至自动化流水线。

该方法特别适用于需要对语音内容进行定性分析的业务场景,如客户情绪追踪、课堂互动统计、直播内容标注等。未来可进一步结合时间戳信息,实现按时间段的情绪变化热力图展示,或接入 BI 工具进行可视化分析。


获取更多AI镜像

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:28:34

Hunyuan模型项目结构解析:从app.py到config.json

Hunyuan模型项目结构解析&#xff1a;从app.py到config.json 1. 引言 在当前多语言交流日益频繁的背景下&#xff0c;高质量的机器翻译模型成为企业级应用和全球化服务的核心基础设施之一。Tencent-Hunyuan团队推出的 HY-MT1.5-1.8B 模型&#xff0c;作为一款基于Transformer…

作者头像 李华
网站建设 2026/4/18 8:27:23

Qwen2.5-0.5B正则表达式:复杂模式生成工具

Qwen2.5-0.5B正则表达式&#xff1a;复杂模式生成工具 1. 技术背景与应用场景 随着大语言模型在自然语言处理、代码生成和结构化数据理解等领域的广泛应用&#xff0c;对高效、精准的文本模式匹配与生成能力的需求日益增长。正则表达式作为文本处理的核心工具之一&#xff0c…

作者头像 李华
网站建设 2026/4/18 8:36:07

气保焊节气装置 连杆焊接省气设备

在连杆焊接这一关键的工业制造环节中&#xff0c;节气装置扮演着不可或缺的角色。特别是弧焊气体节约设备&#xff0c;在连杆焊接复杂的工序中&#xff0c;凭借其精密的设计理念和工作原理&#xff0c;展现了卓越的价值。它就像一位精细的管理者&#xff0c;精准地控制焊接过程…

作者头像 李华
网站建设 2026/4/17 0:12:41

Open Interpreter教学实验室方案:50学生并发体验不卡顿

Open Interpreter教学实验室方案&#xff1a;50学生并发体验不卡顿 你是不是也遇到过这样的情况&#xff1f;作为高校教师&#xff0c;想在编程或AI课程中引入Open Interpreter——这个被誉为“本地版ChatGPT代码解释器”的强大工具&#xff0c;却发现学生的电脑配置五花八门&…

作者头像 李华