news 2026/4/15 15:02:54

语音识别结果导出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/7 15:54:28

Qwen2.5-7B-Instruct实战:多模态数据理解系统开发

Qwen2.5-7B-Instruct实战&#xff1a;多模态数据理解系统开发 1. 技术背景与应用场景 随着大语言模型在自然语言处理、代码生成和结构化数据理解等领域的广泛应用&#xff0c;构建一个高效、可扩展的智能系统成为工程实践中的关键需求。Qwen2.5-7B-Instruct作为通义千问系列中…

作者头像 李华
网站建设 2026/4/4 12:27:35

零基础玩转Z-Image-Turbo,新手也能做出高质量AI图片

零基础玩转Z-Image-Turbo&#xff0c;新手也能做出高质量AI图片 1. 实践应用类技术背景与核心价值 随着生成式AI在视觉创作领域的快速普及&#xff0c;越来越多的用户希望拥有一款既能保证图像质量、又易于上手的本地化AI绘图工具。阿里通义实验室推出的 Z-Image-Turbo 模型&…

作者头像 李华
网站建设 2026/4/4 12:27:32

IndexTTS-2-LLM更新策略:模型热升级不停机部署教程

IndexTTS-2-LLM更新策略&#xff1a;模型热升级不停机部署教程 1. 引言 1.1 业务场景描述 在智能语音合成&#xff08;Text-to-Speech, TTS&#xff09;系统中&#xff0c;模型的持续迭代是提升语音自然度、情感表达和用户体验的关键。然而&#xff0c;传统模型更新方式往往…

作者头像 李华
网站建设 2026/4/11 11:14:46

NotaGen使用手册:轻松生成ABC与MusicXML格式乐谱

NotaGen使用手册&#xff1a;轻松生成ABC与MusicXML格式乐谱 1. 快速开始指南 1.1 启动WebUI服务 NotaGen提供了一个基于Gradio的图形化界面&#xff0c;便于用户快速上手。启动服务非常简单&#xff0c;只需在终端中执行以下命令&#xff1a; cd /root/NotaGen/gradio &am…

作者头像 李华
网站建设 2026/3/28 11:53:08

麦橘超然+Gradio:简洁交互背后的强大能力

麦橘超然Gradio&#xff1a;简洁交互背后的强大能力 在AI图像生成领域&#xff0c;模型性能与用户体验之间的平衡始终是开发者关注的核心。麦橘超然&#xff08;MajicFLUX&#xff09;作为基于Flux.1架构优化的高质量图像生成模型&#xff0c;在保留强大生成能力的同时&#x…

作者头像 李华
网站建设 2026/4/12 20:30:07

亲测Qwen-Image-Layered,一张图秒变多个可编辑图层

亲测Qwen-Image-Layered&#xff0c;一张图秒变多个可编辑图层 运行环境说明 - CPU&#xff1a;Intel(R) Xeon(R) Gold 6133 CPU 2.50GHz - GPU&#xff1a;NVIDIA GeForce RTX 4090 - 系统&#xff1a;Ubuntu 24.04.2 LTS - Python 版本&#xff1a;3.12 - 显存需求&#xff…

作者头像 李华