面向噪声场景的视听语音理解框架 —— 把唇部视觉与音频融合起来,做鲁棒的 视听语音识别(AV-ASR)、说话人分离与声学事件理解。
avhark = audio-visual + hark(聆听):既听,也看。
纯音频语音识别在嘈杂环境下会迅速崩溃:地铁、餐厅、多人交谈里,信噪比一旦 下降,声学线索就不再可靠。而人在嘈杂中依然能听懂,很大程度上靠看嘴唇。 avhark 把这一直觉工程化:用一个 SNR 自适应门控,在安静时多信任音频、 嘈杂时多信任唇动,从而在低信噪比下保持稳健。
- 🗣️ AV-ASR:对数梅尔声学特征 + 唇动视觉特征 → SNR 自适应融合 → CTC 贪心 / beam search 解码。
- 👥 说话人理解:能量 + 谱平坦度 VAD、视听融合 VAD、基于嵌入聚类的 「谁在何时说话」分离。
- 🔔 事件理解:原型式多标签声学事件标注,输出时间轴上的事件片段。
外加一套噪声鲁棒性工具(定信噪比加噪、babble、混响、SpecAugment)与 评测指标(WER / CER / DER)。
- 纯 NumPy 核心:所有 DSP / 特征 / 融合 / 解码 / 聚类都是 NumPy,
import avhark不引入任何重型依赖,无 GPU 也能完整跑通。 - torch 可选:深度视听编码器放在
avhark.models,惰性加载,pip install "avhark[torch]"才需要。 - 诚实基线:手工通路让每一个深度组件的收益都能与可复现的基线对照。
pip install avhark # 纯 NumPy 核心
pip install "avhark[torch]" # 追加 PyTorch 编码器与训练工具从源码:
git clone https://github.com/HuggingNobody/avhark.git
cd avhark
pip install -e ".[dev]"import numpy as np
from avhark import AVUnderstandingPipeline, PipelineConfig
pipe = AVUnderstandingPipeline(PipelineConfig(vocab=["", "你", "好"]))
wav = np.random.randn(16000) * 0.1 # 1 秒 16 kHz 音频
frames = np.random.rand(30, 32, 32) # 30 帧唇部 ROI
log_probs = ... # 来自声学 / 视听模型的 (T, V) CTC 后验
result = pipe.understand(wav, frames, log_probs, speaker_embeddings=emb)
print(result.transcript) # 识别文本
print(result.num_speakers()) # 说话人数
print(result.speaker_segments) # [(start, end, speaker), ...]
print(result.estimated_snr_db) # 估计信噪比SNR 自适应融合本身也可单独使用:
from avhark.fusion import gated_fusion
fused = gated_fusion(audio_feats, visual_feats, estimated_snr_db=-5.0) # 低 SNR -> 偏向视觉avhark info features.npz # 打印信号统计
avhark understand features.npz --decoder beam # 视听理解
avhark understand features.npz --json # JSON 输出| 模块 | 能力 |
|---|---|
audio |
分帧 / STFT / 梅尔滤波器组 / 对数梅尔 / MFCC / delta |
video |
灰度化 / 归一化 / 时间差分 / DCT 外观 / 唇动描述子 |
noise |
定信噪比加噪 / 白噪 / babble / 混响 / SpecAugment |
fusion |
时间对齐 / 早期 / 加权 / SNR 自适应门控融合 |
decode |
CTC 折叠 / 贪心 / beam search |
vad |
能量 VAD / 谱平坦度 / 视听融合 VAD |
diarize |
变化点检测 / 凝聚聚类 / 说话人分离 |
events |
原型式多标签事件标注 / 事件片段抽取 |
metrics |
WER / CER / 对齐分解 / DER |
models |
可选 PyTorch 视听编码器与 CTC 训练(avhark[torch]) |
见 examples/:AV-ASR、说话人分离、事件标注三个可直接运行的脚本。
ruff check . && ruff format --check .
mypy
pytest --cov=avharkMIT © You Tao