|
|
||
|---|---|---|
| .. | ||
| benchmark | ||
| docker | ||
| README.md | ||
| analyze_audio_rms.py | ||
| build_docker.sh | ||
| download-models.sh | ||
| download_models_standalone.py | ||
| package_vendor_gpu_image.sh | ||
| prepare-models.sh | ||
| sync_accel_env.sh | ||
| sync_cpu_env.sh | ||
| sync_gpu_env.sh | ||
| sync_iluvatar_env.sh | ||
| sync_metax_env.sh | ||
| sync_mthreads_env.sh | ||
| test_qwen_ws_with_asr_demo.py | ||
README.md
脚本说明
环境同步脚本
厂商 GPU 镜像融合打包
NVIDIA 镜像由项目 Dockerfile.gpu 完整构建;沐曦、天数、摩尔线程等国产 GPU 推荐先导入厂商官方 vLLM 镜像,再把本项目注入进去生成融合镜像:
docker load -i metax-vllm-official.tar
docker images | grep -i -E 'metax|maca|vllm'
./scripts/package_vendor_gpu_image.sh \
--vendor metax \
--base-image <沐曦官方vLLM镜像名> \
-v n260-3.7.0.38
docker pull registry.iluvatar.com.cn:10443/customer/sz/vllm0.17.0-4.4.0-x86:v5
./scripts/package_vendor_gpu_image.sh \
--vendor iluvatar \
--base-image registry.iluvatar.com.cn:10443/customer/sz/vllm0.17.0-4.4.0-x86:v5 \
-v vllm0.17.0-4.4.0-v5
docker pull registry.mthreads.com/presale/devtech/vllm_musa:s4000_4.3.5_d0519
./scripts/package_vendor_gpu_image.sh \
--vendor mthreads \
--base-image registry.mthreads.com/presale/devtech/vllm_musa:s4000_4.3.5_d0519 \
-v s4000_4.3.5_d0519
沐曦 GPU 的离线交付流程见 docs/metax_offline_deployment.md。
天数 GPU 的离线交付流程见 docs/iluvatar_offline_deployment.md。
摩尔线程 GPU 的离线交付流程见 docs/mthreads_offline_deployment.md。
输出形如:
build-file/qwen3-asr-metax-n260-3.7.0.38-amd64.tar.gz
这个压缩包就是可交付给客户的融合镜像。
| 脚本 | 说明 |
|---|---|
./scripts/sync_gpu_env.sh |
同步根目录 NVIDIA CUDA/vLLM 环境 |
./scripts/sync_metax_env.sh |
同步沐曦 MACA 环境;公共依赖来自 environments/metax,可选 GPU 栈默认按 --no-deps 从沐曦 PyPI 源安装 |
./scripts/sync_iluvatar_env.sh |
同步天数环境公共依赖;GPU 栈使用天数官方 vLLM 镜像或匹配安装包 |
./scripts/sync_mthreads_env.sh |
同步摩尔线程环境公共依赖;GPU 栈使用摩尔线程官方 MUSA vLLM 镜像或匹配安装包 |
./scripts/sync_cpu_env.sh |
同步 CPU Rust 环境 |
./scripts/sync_accel_env.sh |
自动识别 mx-smi / ixsmi / mthreads-gmi / nvidia-smi 并调用对应同步脚本 |
沐曦包版本可通过环境变量覆盖:
METAX_TORCH_SPEC='torch==x.y.z' \
METAX_TORCHAUDIO_SPEC='torchaudio==x.y.z' \
METAX_TORCHVISION_SPEC='torchvision==x.y.z' \
METAX_VLLM_SPEC='vllm==x.y.z' \
./scripts/sync_metax_env.sh
沐曦 GPU 栈默认使用 --no-deps 且只访问沐曦 PyPI 源,避免回退到 PyPI 后拉取 NVIDIA CUDA 包。
只有确认沐曦源中包含完整 GPU 栈依赖时,才设置:
METAX_INSTALL_GPU_DEPS=true ./scripts/sync_metax_env.sh
查看沐曦源中的包版本:
./scripts/sync_metax_env.sh --list-versions torch
RMS 音频分析工具
用于分析音频文件的 RMS 能量时序,帮助确定远场声音过滤的最佳阈值。
功能特性
- ✅ 支持多种音频格式 (WAV, MP3, FLAC 等)
- ✅ 支持立体声、左声道、右声道选择
- ✅ 生成 RMS 时序图和分布直方图
- ✅ 详细的统计分析和阈值建议
- ✅ 可自定义分块大小(默认 240ms,与流式 ASR 一致)
安装依赖
./scripts/sync_cpu_env.sh
使用方法
基础用法
# 分析立体声音频(默认)
.venv/bin/python scripts/analyze_audio_rms.py audio.wav
# 仅分析左声道
.venv/bin/python scripts/analyze_audio_rms.py audio.wav --channel left
# 仅分析右声道
.venv/bin/python scripts/analyze_audio_rms.py audio.wav --channel right
高级用法
# 自定义阈值
.venv/bin/python scripts/analyze_audio_rms.py audio.wav --threshold 0.015
# 自定义分块大小(例如 160ms)
.venv/bin/python scripts/analyze_audio_rms.py audio.wav --chunk-size 160
# 保存图表到文件
.venv/bin/python scripts/analyze_audio_rms.py audio.wav --output analysis.png
# 仅输出统计信息,不显示图表
.venv/bin/python scripts/analyze_audio_rms.py audio.wav --no-plot
完整示例
# 分析右声道,使用 0.015 阈值,保存图表
.venv/bin/python scripts/analyze_audio_rms.py recording.wav \
--channel right \
--threshold 0.015 \
--output rms_analysis.png
参数说明
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
audio_file |
必需 | - | 音频文件路径 |
--channel |
可选 | stereo |
声道选择: stereo, left, right |
--threshold |
可选 | 0.01 |
RMS 能量阈值 |
--chunk-size |
可选 | 240 |
分块大小(毫秒) |
--output |
可选 | - | 保存图表的路径 |
--no-plot |
标志 | - | 不显示图表,仅输出统计 |
输出说明
统计信息
脚本会输出以下统计信息:
-
基础统计
- 最小值、最大值、平均值、中位数、标准差
-
百分位数
- P10, P25, P50, P75, P90, P95, P99
-
阈值分析
- 超过/低于阈值的帧数和百分比
-
建议的阈值
- 保守模式(高灵敏度):P10
- 宽松模式(推荐):P25
- 严格模式(低误触):平均值的 50%
可视化图表
生成两个图表:
-
RMS 时序图
- 显示整个音频的 RMS 能量变化
- 绿色区域:近场音频(>= 阈值)
- 红色区域:远场音频(< 阈值)
- 红色虚线:当前阈值
-
RMS 分布直方图
- 显示 RMS 值的分布情况
- 红色虚线:当前阈值
- 橙色虚线:平均值
- 绿色虚线:中位数
使用场景
1. 确定初始阈值
录制一段包含近场说话和远场环境音的测试音频,然后:
.venv/bin/python scripts/analyze_audio_rms.py test_audio.wav
查看建议的阈值,选择合适的模式。
2. 对比不同声道
如果使用立体声麦克风,可以对比左右声道:
.venv/bin/python scripts/analyze_audio_rms.py audio.wav --channel left --output left.png
.venv/bin/python scripts/analyze_audio_rms.py audio.wav --channel right --output right.png
3. 验证阈值效果
使用自定义阈值查看过滤效果:
# 测试宽松模式
.venv/bin/python scripts/analyze_audio_rms.py audio.wav --threshold 0.01
# 测试严格模式
.venv/bin/python scripts/analyze_audio_rms.py audio.wav --threshold 0.015
# 测试保守模式
.venv/bin/python scripts/analyze_audio_rms.py audio.wav --threshold 0.005
4. 批量分析
如需批量分析多个文件,可以使用简单的循环:
#!/bin/bash
for file in recordings/*.wav; do
echo "Analyzing: $file"
.venv/bin/python scripts/analyze_audio_rms.py "$file" \
--threshold 0.01 \
--no-plot \
--output "analysis/$(basename "$file" .wav).png"
done
输出示例
==============================================================
音频 RMS 时序分析工具
==============================================================
📁 文件: test_audio.wav
🎚️ 声道: stereo
📊 分块大小: 240ms
🎯 阈值: 0.010000
正在加载音频...
✓ 使用立体声(双声道平均)
✓ 采样率: 16000 Hz
✓ 时长: 30.50 秒
✓ 样本数: 488000
正在分析 RMS 时序 (分块大小: 240ms)...
✓ 分析了 127 个音频块
==============================================================
RMS 统计分析
==============================================================
📊 基础统计:
- 最小值: 0.000234
- 最大值: 0.085432
- 平均值: 0.012567
- 中位数: 0.009234
- 标准差: 0.015678
📈 百分位数:
- P10: 0.002345
- P25: 0.005678
- P50: 0.009234
- P75: 0.015432
- P90: 0.035678
- P95: 0.045678
- P99: 0.075432
🎯 阈值分析 (当前阈值: 0.010000):
- 超过阈值的帧数: 65 (51.2%)
- 低于阈值的帧数: 62 (48.8%)
💡 建议的阈值范围:
- 保守模式 (高灵敏度): 0.002345 (P10)
- 宽松模式 (推荐): 0.005678 (P25)
- 严格模式 (低误触): 0.006284 (平均值的50%)
==============================================================
调优建议
-
录制测试音频
- 包含正常说话(近场)
- 包含远处说话或电视声音(远场)
- 包含安静时刻(环境音)
-
分析并选择阈值
- 查看时序图,观察近场和远场的 RMS 差异
- 查看分布直方图,找到明显的分界点
- 参考建议的阈值范围
-
验证效果
- 在实际应用中测试选定的阈值
- 如果误触发过多,提高阈值
- 如果正常说话被过滤,降低阈值
-
微调
- 宽松模式(0.01)适合大多数场景
- 嘈杂环境使用严格模式(0.015)
- 安静环境使用保守模式(0.005)
故障排查
问题:无法加载音频文件
# 安装必要的库
./scripts/sync_cpu_env.sh
# 对于 MP3 文件,可能还需要
./scripts/sync_cpu_env.sh
问题:中文显示乱码
脚本已配置中文字体,但如果仍然显示乱码:
- macOS: 会自动使用 'Arial Unicode MS'
- Windows: 会自动使用 'SimHei'
- Linux: 需要安装中文字体
问题:图表不显示
# 后台运行或 SSH 连接时使用
python scripts/analyze_audio_rms.py audio.wav --no-plot --output analysis.png
与远场过滤功能的关系
此工具使用与 app/utils/audio_filter.py 相同的 RMS 计算方法,确保分析结果与实际运行时的行为一致。
确定阈值后,在配置文件中设置:
# docker-compose.yml
environment:
- ASR_NEARFIELD_RMS_THRESHOLD=0.01 # 使用分析得出的阈值
或在 .env 文件中:
ASR_NEARFIELD_RMS_THRESHOLD=0.01