SpeechRecognition/BATCH_USAGE.md

281 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 并发批量处理使用指南
## 功能特性
**运行时自动清空 temp 目录**
**并发批处理** - 根据 GPU 显存/CPU 核心数自动调整并发数
**预提取 WAV** - 每个视频在处理前提取音频到 temp
**结果合并** - 使用 map_speaker 合并 ASR 和说话人分离结果
**独立输出** - 每个视频结果分别存入 output 目录
## 使用方法
### 1. 配置视频文件夹
编辑 `main.py` 中的 `VIDEO_FOLDER` 变量:
```python
# 视频文件夹路径(全局变量)
VIDEO_FOLDER = r"D:\Userfile\Projects\AnzezxianxHazardInspectAI\Code\audio"
```
**程序会自动:**
- ✅ 扫描文件夹中的所有视频文件
- ✅ 支持格式mp4, avi, mkv, mov, flv, wmv, m4v
- ✅ 按文件名自动排序(时间戳格式的文件名会按时间顺序排列)
**文件名格式示例:**
```
VID_20251031_132320_019.mp4 → 2025-10-31 13:23:20
VID_20251031_140530_020.mp4 → 2025-10-31 14:05:30
VID_20251101_090000_021.mp4 → 2025-11-01 09:00:00
```
### 2. 运行批处理
```bash
# 激活虚拟环境
funasr_env\Scripts\activate
# 运行批处理
python main.py
```
## 工作流程
```
开始
清空 temp/ 目录
创建 output/ 目录
并发处理每个视频:
1. 提取 WAV 到 temp/
2. 加载 ASR 模型
3. 执行语音识别
4. 加载说话人分离模型
5. 执行说话人分离
6. 合并结果map_speaker
7. 保存结果到 output/
8. 清理临时 WAV
生成汇总报告 output/batch_summary.json
清空 temp/ 目录
完成
```
## 输出文件
### 单个视频结果
`output/{video_name}_result.json`
```json
{
"total_sentences": 50,
"sentences": [
{
"speaker": "speaker_0",
"text": "你好,请问这里是哪里?",
"begin_time": 0.50,
"end_time": 2.30,
"duration": 1.80
}
]
}
```
### 汇总报告
`output/batch_summary.json`
```json
{
"total_videos": 3,
"success_count": 3,
"failed_count": 0,
"total_time_seconds": 245.67,
"results": [
{
"video": "VID_20251031_132320_019.mp4",
"success": true,
"output": "output/VID_20251031_132320_019_result.json",
"total_sentences": 50,
"speaker_counts": {
"speaker_0": 25,
"speaker_1": 25
}
}
]
}
```
## 并发策略
### GPU 模式
- 根据显存自动调整并发数
- 每个视频约需 2-3GB 显存
- 公式:`并发数 = max(1, 显存总量 / 3GB)`
### CPU 模式
- 使用 CPU 核心数作为并发数
- 使用 `multiprocessing.cpu_count()` 获取
## 性能优化建议
### 1. GPU 用户
- 确保安装 CUDA 版本 PyTorch
- 8GB 显存:建议并发 2-3
- 12GB 显存:建议并发 4
- 24GB 显存:建议并发 8
### 2. CPU 用户
- 减少并发数避免内存不足
- 建议:`并发数 = CPU 核心数 / 2`
### 3. 内存优化
每个进程约需:
- ASR 模型2-3GB
- 说话人分离模型1-2GB
- 总计3-5GB/进程
确保系统内存充足:`并发数 × 5GB < 可用内存`
## 自定义配置
### 调整并发数
编辑 `main.py` `main()` 函数
```python
# 固定并发数为 2
results = process_batch_concurrent(video_paths, max_workers=2)
```
### 修改说话人分离参数
编辑 `process_single_video()` 函数
```python
diar_service = DiarizationService(
embedding_model="eres2netv2", # campplus/eres2net/eres2netv2
device="auto",
cluster_threshold=0.5, # 0.0-1.0,越高越严格
min_cluster_size=10 # 每个说话人最少片段数
)
```
### 修改 ASR 模型
编辑 `process_single_video()` 函数
```python
asr_service = ASRService(
model_name="paraformer-zh", # 或 "SenseVoice"
device="auto"
)
```
## 常见问题
### Q: 如何添加更多视频?
**A:** 只需将视频文件放入 `VIDEO_FOLDER` 指定的文件夹即可程序会自动扫描
### Q: 如何跳过某些视频?
**A:** 将这些视频移到其他文件夹或修改 `SUPPORTED_VIDEO_FORMATS` 排除特定格式
### Q: 处理中断了怎么办?
**A:** 重新运行即可会自动清空 temp 目录已完成的视频不会重复处理
### Q: 如何查看处理进度?
**A:** 控制台会实时显示
- 每个视频的处理状态
- 进度百分比
- 预计剩余时间
- 最终汇总报告
## 目录结构
```
audio2/
├── main.py # 主程序
├── asr_service.py # ASR 服务
├── diarization_service.py # 说话人分离服务
├── map_speaker.py # 结果合并逻辑
├── temp/ # 临时目录(运行时清空)
└── output/ # 输出目录
├── video1_result.json
├── video2_result.json
└── batch_summary.json
```
## 依赖要求
- Python 3.10+
- FunASR 1.3+
- PyTorch 2.0+
- ffmpeg用于提取音频
- 3D-Speaker说话人分离
## 运行示例
```
============================================================
并发批量语音识别处理系统
============================================================
============================================================
清空临时目录...
============================================================
✓ 已删除D:\...\audio2\temp
✓ 已创建D:\...\audio2\temp
✓ 输出目录D:\...\audio2\output
找到 1 个视频文件
- VID_20251031_132320_019.mp4
============================================================
并发批处理配置
============================================================
视频数量1
最大并发2
CPU 核心数8
GPU: NVIDIA GeForce RTX 3060
[VID_20251031_132320_019.mp4] 加载 ASR 模型...
[VID_20251031_132320_019.mp4] 执行语音识别...
[VID_20251031_132320_019.mp4] 加载说话人分离模型...
[VID_20251031_132320_019.mp4] 执行说话人分离...
[VID_20251031_132320_019.mp4] 合并结果...
[VID_20251031_132320_019.mp4] ✓ 处理完成
- 句子数50
- 说话人:{'speaker_0': 25, 'speaker_1': 25}
============================================================
处理完成汇总
============================================================
总耗时123.4s
平均每个视频123.4s
成功1/1
失败0
汇总报告output\batch_summary.json
============================================================
清理临时文件...
============================================================
清空临时目录...
============================================================
✓ 全部完成!
输出目录D:\...\audio2\output
```