VoiceLabel 是一个专业的音频转录与标注工具,主要用于安全事件分析和音频内容的文字化处理。本工具提供了友好的用户界面,支持音频文件的上传、播放、区域选择、自动转写以及数据导出等功能。
- 音频文件管理:支持上传、播放和管理音频文件
- 音频区域选择:可视化波形界面,支持选择特定区域进行处理
- 自动语音识别:集成 ASR (自动语音识别) 系统,将选定音频区域自动转写为文字
- 静音检测:支持自动检测音频文件中的静音区域,并进行批量转写处理
- 数据标注:可为每段转写内容添加来源、时间等标签信息
- 内容编辑:支持对转写文本进行编辑、删除、标记等操作
- 区域管理:可对音频区域进行裁剪、合并等操作
- 内容导出:支持以简单或详细格式导出转写内容
- 训练数据生成:可生成用于训练语音识别模型的标准格式数据
- 工程管理:多工程支持,便于分类管理不同场景的音频资料
VoiceLabel 采用前后端分离架构:
- 前端:基于 Vue.js 开发的单页应用,提供直观的用户界面
- 后端:基于 Node.js 和 Express 框架开发的服务端,处理文件管理、音频处理和数据存储
- Node.js v16+
- FFmpeg(用于音频处理)
cd VoiceLabel/client
npm install
npm run build
cd VoiceLabel/server
npm install
node index.js
前端环境配置 (.env):
VITE_SERVER_URL=http://localhost:6080
后端环境配置 (.env):
SERVER_PORT=6080
ASR_PORT=6081
- 点击右上角下拉菜单中的"创建新工程"
- 输入工程名称和描述
- 点击创建按钮完成工程创建
- 在右侧区域拖放或选择音频文件上传
- 上传完成后,文件将显示在右侧列表中
- 从右侧列表选择音频文件进行播放
- 在波形图上选择需要转写的区域
- 点击"将选定区域音频转文字"按钮
- 系统会自动将该区域的音频转为文字
- 可编辑转写结果并添加标注信息(如发言者)
- 点击"添加"或"更新"按钮保存信息
- 选择音频文件后点击"静音检测批量转换文字"
- 系统会自动检测音频中的非静音区域并进行转写
- 转写结果将自动添加到信息列表中
- 点击信息列表中的条目可进行编辑
- 使用操作按钮可进行删除、标记、上下移动等操作
- 可通过"往前插入"和"往前融合"功能管理条目顺序和内容
- 点击"导出内容"可导出当前工程的所有转写内容
- 简单模式:仅导出来源和文本
- 详细模式:包含时间戳和时长等完整信息
- 点击"导出训练数据"可导出用于语音识别模型训练的数据
工程数据存储在 server/projects
目录下,每个工程以唯一 ID 为名创建单独的目录,包含以下子目录:
uploads/
:存储上传的原始音频文件data/
:存储工程数据文件info.jsonl
:主要信息数据文件,每行一条 JSON 格式记录mp3/
:存储处理后的音频片段train.jsonl
:训练数据格式文件(生成时创建)val.jsonl
:验证数据格式文件(生成时创建)
annotations/
:存储音频区域标注信息temp/
:临时文件存储区域
{
"uuid": "唯一标识符",
"datetime": "时间戳",
"from": "发言人/来源",
"text": "转写文本内容",
"timelen": "时长",
"audioUrl": "音频文件URL",
"startTime": "开始时间(秒)",
"endTime": "结束时间(秒)",
"mark": "是否标记"
}
{
"key": "唯一标识符",
"text_language": "<|zh|>",
"emo_target": "<|NEUTRAL|>",
"event_target": "<|Speech|>",
"with_or_wo_itn": "<|withitn|>",
"target": "文本内容",
"source": "音频文件路径",
"target_len": "文本长度",
"source_len": "特征长度"
}
- 使用 FFmpeg 处理音频文件(裁剪、格式转换等)
- 波形显示基于 wavesurfer.js 库
- 支持 MP3, WAV, M4A 等常见音频格式
- 通过 HTTP API 调用外部 ASR 服务
- 支持中文语音识别
- 可配置识别语言和其他参数
- 使用基于文件的轻量级数据存储(JSONL格式)
- 工程配置信息存储在 projects.json 文件中
- 音频区域信息存储在对应的标注文件中
- 会议记录转写
- 安全事件分析与记录
- 语音内容归档
- 语音识别模型训练数据准备
- 音频内容标注与分类
- 确保系统有足够的存储空间处理音频文件
- 为获得最佳转写效果,建议使用噪音较少的录音
- ASR 服务需单独部署或配置
- 频繁导出大量数据可能影响系统性能
监控命令 watch -n 5 rocm-smi radeontop
python3 -c "import torch; print('CUDA是否可用:', torch.cuda.is_available(), '\n设备数量:', torch.cuda.device_count() if torch.cuda.is_available() else 0, '\n当前设备:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else '无GPU')"