如何导出识别结果?Fun-ASR批量处理后操作指南
本文介绍了如何在星图GPU平台上自动化部署Fun-ASR钉钉联合通义推出的语音识别大模型语音识别系统 构建by科哥镜像,高效完成会议录音、客服对话等音频的批量语音转文字任务,并支持导出结构化CSV/JSON结果,直接用于会议纪要生成、关键词分析及钉钉文档同步等典型业务场景。
如何导出识别结果?Fun-ASR批量处理后操作指南
在完成一批会议录音、客服对话或课程音频的批量识别后,你最关心的往往不是“有没有识别出来”,而是“结果怎么用”——能否快速整理成会议纪要?能否导入Excel做关键词统计?能否同步到钉钉文档或飞书多维表格?能否作为训练数据二次加工?
Fun-ASR WebUI 的批量处理功能已能稳定高效地完成语音转文字任务,但很多用户卡在最后一步:识别完成了,结果却找不到、导不出、格式不对、无法复用。这不是模型能力的问题,而是对导出机制和结果结构缺乏系统认知。
本文不讲模型原理,不调参数,不部署环境,只聚焦一个务实目标:让你在批量处理完成后,5分钟内拿到可编辑、可分析、可归档的结构化文本结果。从界面操作到文件解析,从CSV字段含义到JSON嵌套逻辑,手把手带你走通“识别→查看→导出→验证→再利用”的完整闭环。
1. 批量处理完成后的第一眼:识别历史是你的数据中心
批量处理结束后,页面不会自动跳转,也不会弹出“导出成功”提示——这是新手最容易忽略的关键前提。Fun-ASR 将所有识别结果统一沉淀至 【识别历史】模块,它不是临时缓存,而是具备搜索、筛选、回溯能力的持久化数据库。
1.1 进入识别历史的三种方式
- 方式一(推荐):点击顶部导航栏的「识别历史」标签页
- 方式二:在「批量处理」页面底部,点击绿色按钮「查看全部历史记录」
- 方式三:刷新当前页面后,直接访问
http://localhost:7860/#识别历史
注意:历史记录默认仅显示最近100条,且按时间倒序排列。如果你处理了200个文件,前100条可能已被覆盖。因此,批量处理完成后请立即进入历史页,不要关闭浏览器窗口。
1.2 快速定位你的这批结果
假设你刚上传了名为 2025_Q1_销售复盘会议_01.wav 至 2025_Q1_销售复盘会议_20.wav 的20个文件,可通过以下任一方式精准筛选:
- 按时间范围筛选:使用右上角日历控件,选择“今天”或具体时间段
- 按文件名关键词搜索:在搜索框输入
销售复盘,系统实时匹配文件名与识别内容 - 按ID范围定位:若你记得处理前最后一条记录ID是
#142,那么新结果大概率从#143开始连续编号
搜索结果列表中,每行包含5项核心信息:
- ID:唯一数字编号(如
#158),用于精确调取详情 - 时间:识别完成的精确时间(精确到秒)
- 文件名:原始上传名称(含扩展名)
- 识别结果:首句摘要(截断显示,约30字)
- 语言:识别所用语种(zh / en / ja)
小技巧:将鼠标悬停在「识别结果」列,会显示完整文本气泡;点击「文件名」可复制路径,方便后续定位音频源文件。
2. 查看单条结果详情:理解结构,才能正确导出
点击任意一条记录右侧的「查看详情」按钮(或直接在搜索框输入ID,如 158),进入详情页。这里呈现的是该音频的全量结构化输出,也是导出功能的数据源头。
2.1 详情页四大核心区块解析
| 区块 | 内容说明 | 实际用途 |
|---|---|---|
| 基础信息 | 文件路径、上传时间、处理耗时、模型版本(Fun-ASR-Nano-2512)、设备(cuda:0) | 排查性能问题、追溯处理环境 |
| 识别结果 | 原始ASR输出文本,保留口语停顿、重复、语气词(如“呃…”、“那个…”) | 用于质检、人工校对、声学模型优化 |
| 规整后文本 | 启用ITN后的标准化文本(如“二零二五年三月十二号” → “2025年3月12日”) | 直接用于文档生成、知识库录入、NLP下游任务 |
| 元数据 | 热词列表(生效的词汇)、ITN开关状态、VAD分段信息(若启用)、置信度评分(部分模型支持) | 分析识别偏差、优化热词策略、评估片段质量 |
关键观察点:对比「识别结果」与「规整后文本」。若两者差异极大(如规整后丢失关键术语),说明ITN规则与业务场景冲突,建议关闭ITN或自定义规整词典。
2.2 为什么必须先看详情页?
因为导出的CSV/JSON文件,其字段设计完全映射此处结构。例如:
- CSV中的
raw_text列 = 详情页「识别结果」内容 - JSON中的
itn_text字段 = 详情页「规整后文本」内容 - CSV中的
confidence列(如有)= 详情页「元数据」中显示的置信度均值
不理解详情页结构,就无法准确解读导出文件,更无法编写脚本做自动化清洗。
3. 两种导出方式详解:一键下载 vs 批量打包
Fun-ASR WebUI 提供两种导出路径,适用于不同规模与精度需求:
3.1 单条导出:适合抽检、校对、快速分享
在详情页右上角,有三个并列按钮:
- 复制文本:一键复制「规整后文本」到剪贴板(最常用)
- 导出为TXT:生成纯文本文件,文件名格式为
原文件名.txt(如2025_Q1_销售复盘会议_01.txt) - 导出为SRT:生成带时间轴的字幕文件,适用于视频剪辑、在线课程发布
使用场景示例:
- 给同事发一段会议要点?点「复制文本」粘贴到钉钉群
- 需要插入PPT备注?用「导出为TXT」,再复制进幻灯片
- 为培训视频配字幕?选「导出为SRT」,导入剪映或Premiere
提示:SRT文件的时间戳基于VAD检测结果,非逐字时间轴。若需毫秒级精准对齐,需调用SDK接口获取帧级输出。
3.2 批量导出:面向生产环境的核心能力
当你要处理50+文件并交付给运营、法务或数据分析团队时,单条操作效率极低。此时应返回「识别历史」页,使用顶部的批量导出功能。
操作流程(四步到位):
- 勾选目标记录:在历史列表左侧勾选框中,选择需要导出的条目(支持Ctrl多选、Shift区间选)
- 选择导出格式:下拉菜单提供两项:
CSV(逗号分隔):兼容Excel、WPS、Tableau、Python pandasJSON(标准格式):适配API对接、数据库入库、大模型微调数据准备
- 配置导出字段(CSV专属):
- 必选:
id,filename,itn_text(规整文本,业务最常用) - ⚙ 可选:
raw_text(原始文本)、language(语种)、duration_ms(音频时长)、confidence(置信度) - ❌ 不建议:
file_path(含本地绝对路径,无跨平台价值)
- 必选:
- 点击「导出选中记录」:浏览器自动下载压缩包
funasr_batch_export_YYYYMMDD_HHMMSS.zip
压缩包内容结构(以CSV为例):
funasr_batch_export_20250415_143022/
├── metadata.json # 导出时间、总条数、参数快照
├── results.csv # 主数据表(UTF-8编码,BOM头已去除)
└── samples/ # 每个文件的TXT副本(可选,勾选后生成)
├── 2025_Q1_销售复盘会议_01.txt
└── ...
验证技巧:用VS Code打开 results.csv,确认首行为字段名,且中文显示正常(无乱码)。若出现方块字符,说明编码非UTF-8,需在Excel中通过「数据→从文本/CSV」手动指定编码。
4. CSV字段深度解读:让每一列都可被业务调用
results.csv 是批量导出的主力交付物,其字段设计直指工程落地。以下是各列的业务含义与使用建议:
| 字段名 | 数据类型 | 示例值 | 业务解读 | 典型用途 |
|---|---|---|---|---|
id |
整数 | 158 |
本条记录在Fun-ASR数据库中的唯一ID | 与原始音频文件建立映射关系,用于审计追踪 |
filename |
字符串 | 2025_Q1_销售复盘会议_01.wav |
上传时的原始文件名(不含路径) | 自动关联云存储URL,构建音文双链路知识库 |
itn_text |
字符串 | 各位同事好,今天我们复盘2025年第一季度销售数据... |
ITN规整后的最终可用文本 | 直接导入CRM、写入钉钉文档、喂给大模型总结 |
raw_text |
字符串 | 呃…各位同…事好,今…天我们复盘二零二五年第一季度销售数据… |
未经处理的原始识别结果 | 语音质检、错误模式分析、热词效果评估 |
language |
字符串 | zh |
识别所用语种代码(zh/en/ja) | 多语言内容路由,自动分发至对应语种审核员 |
duration_ms |
整数 | 324500 |
音频总时长(毫秒),即5分24.5秒 | 计算人均处理时长、识别效率KPI |
processing_time_s |
浮点数 | 42.3 |
本条识别耗时(秒) | 监控GPU负载、识别服务SLA达标率 |
confidence |
浮点数 | 0.87 |
平均置信度(0~1),越高越可靠 | 设置自动过滤阈值(如<0.7的记录标红待人工复核) |
重要提醒:
itn_text是业务交付的黄金字段,90%的下游应用(如会议纪要生成、客户情绪分析)都基于此列。而raw_text更适合算法团队做bad case分析——比如发现某类专业术语(如“FSMN-VAD”)在raw_text中频繁错别为“F-S-M-N”,即可针对性补充热词。
5. JSON导出实战:为自动化流程注入结构化血液
当你的工作流涉及API集成、数据库写入或大模型预处理时,JSON格式比CSV更具表达力。Fun-ASR 的 JSON 导出采用扁平化设计,兼顾可读性与机器解析效率。
5.1 标准JSON结构示例(单条记录)
{
"id": 158,
"filename": "2025_Q1_销售复盘会议_01.wav",
"itn_text": "各位同事好,今天我们复盘2025年第一季度销售数据...",
"raw_text": "呃…各位同…事好,今…天我们复盘二零二五年第一季度销售数据...",
"language": "zh",
"duration_ms": 324500,
"processing_time_s": 42.3,
"confidence": 0.87,
"vad_segments": [
{
"start_ms": 1200,
"end_ms": 8450,
"text": "各位同事好,今天我们复盘2025年第一季度销售数据"
},
{
"start_ms": 9200,
"end_ms": 22100,
"text": "首先看整体达成率,Q1目标是1.2亿,实际完成1.35亿..."
}
],
"hotwords_used": ["Q1", "销售复盘", "达成率"]
}
5.2 关键字段价值挖掘
vad_segments数组:VAD分段后的语义单元,每段含起止时间与对应文本。这是实现「按段落生成会议纪要」、「提取发言人观点」、「计算各环节时长占比」的基础。hotwords_used数组:实际生效的热词列表。可用于反向验证热词配置是否命中,避免“写了热词却没生效”的黑盒问题。- 时间戳字段(
start_ms/end_ms):虽非逐字级,但已足够支撑「5分钟内找到某句话」的业务需求,无需额外开发时间轴对齐模块。
5.3 Python快速解析示例(10行代码搞定)
import json
import pandas as pd
# 读取导出的JSON文件
with open("funasr_batch_export_20250415_143022/results.json", "r", encoding="utf-8") as f:
data = json.load(f)
# 提取所有规整文本,生成DataFrame
df = pd.DataFrame([
{
"id": item["id"],
"filename": item["filename"],
"summary": item["itn_text"][:100] + "..." if len(item["itn_text"]) > 100 else item["itn_text"],
"segments_count": len(item["vad_segments"]),
"hotwords": ", ".join(item.get("hotwords_used", []))
}
for item in data
])
print(df.head())
# 输出:id, filename, summary, segments_count, hotwords
这段代码可直接嵌入你的日报生成脚本,5分钟内输出带摘要的会议清单。
6. 常见导出问题与解决方案:避开90%的踩坑点
即使按流程操作,仍可能遇到导出失败、格式异常或内容缺失。以下是高频问题及根因对策:
6.1 问题:导出CSV后Excel打开全是乱码(中文显示为方块)
- 根因:Windows系统默认用ANSI编码打开CSV,而Fun-ASR导出为UTF-8无BOM格式
- 解法:
- 正确方式:Excel → 「数据」选项卡 → 「从文本/CSV」→ 选择文件 → 编码选「UTF-8」
- 替代方案:用VS Code、Notepad++打开,另存为「UTF-8 with BOM」格式
- ❌ 错误方式:直接双击打开,或用记事本另存为ANSI(会破坏中文)
6.2 问题:JSON导出文件为空数组 []
- 根因:勾选了记录但未点击「导出选中记录」,或网络中断导致请求未发出
- 解法:
- 刷新「识别历史」页,重新勾选 → 检查右上角是否有「已选X条」提示 → 再次点击导出
- 查看浏览器控制台(F12 → Console)是否有
Failed to fetch报错
6.3 问题:导出的 itn_text 中仍有数字未规整(如“一千二百三十四”未转“1234”)
- 根因:ITN功能依赖内置规则库,对长数字、复合单位(如“1234.56万元”)支持有限
- 解法:
- 短期:在导出后用Python正则批量替换(
re.sub(r"([零一二三四五六七八九十百千万亿]+)", lambda m: cn2an.cn2an(m.group(1), "normal"), text)) - 长期:在Fun-ASR设置中启用「自定义ITN规则」,添加正则映射表
- 短期:在导出后用Python正则批量替换(
6.4 问题:批量导出耗时过长(>5分钟),浏览器提示“连接超时”
- 根因:导出过程需序列化大量文本,前端JavaScript内存压力大
- 解法:
- 推荐:分批导出,每次≤30条(实测响应最快)
- 进阶:使用命令行工具直接读取数据库(
webui/data/history.db),绕过WebUI层
7. 超越导出:让结果真正流动起来
导出只是起点,真正的价值在于结果的再利用。以下是三个已验证的轻量级延展方案:
7.1 方案一:自动同步至钉钉文档(免开发)
利用钉钉「宜搭」低代码平台:
- 创建「语音转写结果」数据表,字段与CSV完全一致
- 添加「文件上传」组件,绑定Fun-ASR导出的ZIP包
- 配置「解析ZIP」自动化动作,自动解压→读取CSV→写入数据表
- 成果:销售团队在钉钉内即可搜索任意会议关键词,秒级定位原文
7.2 方案二:生成会议纪要Markdown(Python脚本)
# 自动生成带标题、时间、要点的Markdown
for record in json_data:
with open(f"meeting_{record['id']}.md", "w", encoding="utf-8") as f:
f.write(f"# {record['filename'].split('_')[2]}会议纪要\n\n")
f.write(f"**时间**:{record['processing_time_s']}秒 | **时长**:{record['duration_ms']//60000}分{record['duration_ms']%60000//1000}秒\n\n")
f.write("## 核心要点\n\n")
for i, seg in enumerate(record['vad_segments'][:3], 1):
f.write(f"{i}. {seg['text'][:50]}...\n")
7.3 方案三:构建内部语音知识库(Elasticsearch)
- 将JSON数据通过Logstash写入ES
- 配置中文分词器(ik_max_word)
- 开发简单Web界面,支持「按产品名查对话」「按问题类型聚类」
- 成果:客服新人3分钟内查到历史相似问题的标准应答话术
8. 总结:导出不是终点,而是智能语音工作流的枢纽
回顾整个流程,你会发现:
- 导出操作本身只需3次点击,但背后依赖对「识别历史」数据模型、「规整文本」业务价值、「CSV/JSON」工程语义的深度理解;
- 没有所谓“最佳导出配置”,销售会议要
itn_text + vad_segments,客服质检要raw_text + confidence,技术分享要SRT + timestamps; - 真正的效率提升,来自导出后的自动化衔接——把Fun-ASR变成你现有工作流的一个无感插件,而非孤立工具。
下次当你面对一堆待处理的音频时,请记住这个检查清单:
批量处理完成,立刻进入「识别历史」
按关键词/时间筛选,确认结果完整
查看1~2条详情,验证 itn_text 质量
根据下游用途,选择CSV(通用分析)或JSON(系统集成)
导出后,用5分钟跑通一个最小闭环(如:CSV→Excel→生成摘要)
语音识别的价值,永远不在“转出来”,而在“用起来”。而导出,正是那座连接AI能力与业务落地的桥。
---
> **获取更多AI镜像**
>
> 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐
所有评论(0)