news 2026/1/19 1:09:36

语音识别结果导出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/1/19 3:26:55

DamoFD模型微调教程:让检测器认识你的特殊人脸类型

DamoFD模型微调教程&#xff1a;让检测器认识你的特殊人脸类型 你是不是也遇到过这种情况&#xff1a;团队做的是动画项目&#xff0c;角色都是卡通风格的&#xff0c;结果用现成的人脸检测模型一跑&#xff0c;根本识别不出这些“非真实”的人脸&#xff1f;明明图里有脸&…

作者头像 李华
网站建设 2026/1/19 0:24:59

阿里开源万物识别模型卡顿?GPU算力优化实战案例详解

阿里开源万物识别模型卡顿&#xff1f;GPU算力优化实战案例详解 1. 业务场景与性能痛点 在当前多模态AI快速发展的背景下&#xff0c;图像识别技术已广泛应用于内容审核、智能搜索、自动化标注等场景。阿里近期开源的“万物识别-中文-通用领域”模型&#xff0c;凭借其对中文…

作者头像 李华
网站建设 2026/1/19 3:07:29

零基础教程:手把手教你用vLLM启动DeepSeek-R1轻量化大模型

零基础教程&#xff1a;手把手教你用vLLM启动DeepSeek-R1轻量化大模型 本教程将带你从零开始&#xff0c;在本地环境中使用 vLLM 成功部署并运行 DeepSeek-R1-Distill-Qwen-1.5B 轻量化大模型。无论你是AI初学者还是希望快速搭建推理服务的开发者&#xff0c;本文都提供了完整…

作者头像 李华
网站建设 2026/1/17 9:25:42

亲测DeepSeek-R1 1.5B:CPU推理效果超预期

亲测DeepSeek-R1 1.5B&#xff1a;CPU推理效果超预期 在当前大模型普遍依赖高性能GPU进行推理的背景下&#xff0c;一款能够在纯CPU环境流畅运行、同时保留强大逻辑推理能力的小参数模型——DeepSeek-R1 (1.5B)&#xff0c;无疑为本地化AI应用带来了新的可能性。本文基于实际部…

作者头像 李华
网站建设 2026/1/19 10:11:02

Qwen3-4B-Instruct保姆级教程:模型微调与定制

Qwen3-4B-Instruct保姆级教程&#xff1a;模型微调与定制 1. 引言 1.1 学习目标 本文旨在为开发者提供一份完整、可落地的 Qwen3-4B-Instruct 模型微调与定制化部署 实践指南。通过本教程&#xff0c;您将掌握&#xff1a; 如何基于 Hugging Face 和 Transformers 框架加载…

作者头像 李华
网站建设 2026/1/18 17:52:56

wl_arm入门必看:零基础快速理解嵌入式开发核心要点

从点亮一个LED开始&#xff1a;零基础吃透wl_arm嵌入式开发你有没有过这样的经历&#xff1f;手握一块写着“wl_arm”的开发板&#xff0c;电脑上装好了Keil或STM32CubeIDE&#xff0c;看着示例工程里那串HAL_GPIO_TogglePin()代码&#xff0c;心里却在发问&#xff1a;“这行代…

作者头像 李华