Skip to main content

FireRedVAD for fasr (bundled fireredvad inference)

Project description

fasr-vad-firered

英文文档地址: README_EN.md

FireRedVAD 语音活动检测插件。插件内置 FireRedVAD 的 Python 推理代码,加载官方 FireRedVAD checkpoint 后输出 fasr 的 AudioSpan 或流式 AudioChunk

安装

pip install fasr-vad-firered

开发环境中可以在仓库根目录使用:

uv sync --group dev

注册模型

注册名 能力 适用场景
firered FireRedForVAD batch/offline 离线文件切分、transcribe pipeline
firered_online FireRedStreamForVAD streaming + batch realtime 服务;输出语义对齐官方 Stream-VAD

默认 checkpoint 是 FireRedTeam/FireRedVAD,默认使用 ModelScope 下载。官方模型目录通常包含 VAD/Stream-VAD/ 两个子目录;插件会按注册名自动选择对应子目录。

配置示例

离线 VAD:

[vad_model]
@vad_models = "firered"
use_gpu = false
speech_threshold = 0.4
min_speech_frame = 20
min_silence_frame = 50

流式 VAD:

[service.vad_model]
@vad_models = "firered_online"
use_gpu = false
chunk_size_ms = 100
speech_threshold = 0.5
pad_start_frame = 5
min_speech_frame = 8
min_silence_frame = 50

realtime 快速启动示例:

fasr-service-realtime serve --vad firered_online --stream-asr paraformer_online

Python 使用

离线检测:

from fasr.config import registry
from fasr.data import AudioSpan, Waveform

model = registry.vad_models.get("firered")(speech_threshold=0.4)
segments = model.detect(
    AudioSpan(start_ms=0, waveform=Waveform.from_file("example.wav"))
)
for segment in segments:
    print(segment.start_ms, segment.end_ms)

流式检测:

from fasr.config import registry
from fasr.data import AudioChunk

vad = registry.vad_models.get("firered_online")(chunk_size_ms=100)
for audio_chunk in realtime_chunks:
    for emitted in vad.push_chunk(audio_chunk):
        print(emitted.vad_state, emitted.start_ms, emitted.end_ms)

firered_online 也实现了 detect()。它直接调用官方 Stream-VAD 的 detect_full(),因此 batch 输出会和官方 Stream-VAD 完整音频模式一致。 实时 push_chunk() 也按官方 chunkwise 方式切块:当 chunk_size_ms = 100 时,内部实际送入模型的是 115ms 窗口、100ms 步长,相邻窗口保留 15ms 重叠,以避免 fbank 边界帧丢失。

参数

FireRedVAD 的帧移约为 10ms,所以 *_frame 参数都可以粗略理解为 帧数 * 10ms。例如 min_silence_frame = 50 约等于需要连续 500ms 静音才判定说话结束。

离线和流式共有参数:

参数 默认值 含义 调大 / 开启后 调小 / 关闭后 建议场景
use_gpu false 是否把 FireRedVAD 模型放到 CUDA 上推理。 有 CUDA 时通常吞吐更好,长音频或高并发更快,但会占用显存。 使用 CPU,部署更简单,不占显存,但长音频处理会更慢。 GPU 资源宽裕且 VAD 成为瓶颈时开启;显存紧张或只跑轻量实时 VAD 时关闭。
smooth_window_size 5 对逐帧语音概率做滑动平均的窗口大小,用来抑制概率抖动。 输出更平滑,短促噪声更不容易触发语音,但起止点会更钝,可能多一点延迟。 响应更灵敏,语音起止更贴近原始概率,但容易受瞬时噪声影响。 背景噪声多、误触发多时调大;想降低端点延迟或保留短促语音时调小。
speech_threshold 离线 0.4,流式 0.5 判断一帧是否为语音的概率阈值。 判定更严格,噪声、背景人声、弱音乐更不容易被当成语音,但轻声/远场语音可能漏掉。 判定更敏感,弱语音更容易保留,但噪声和背景声误检会增加。 噪声误检多时调大到 0.55/0.6;漏检轻声时调小到 0.35/0.3
min_speech_frame 离线 20,流式 8 连续多少个语音帧后才确认进入语音段。 更不容易被短噪声触发,语音开始更稳定,但很短的“嗯/啊/好”可能被过滤。 更容易触发语音开始,短词更容易保留,但误触发概率升高。 电话客服里短背景音频繁触发时调大;需要捕捉很短应答词时调小。
max_speech_frame 2000 单个语音段允许持续的最大帧数,默认约 20s。超过后会强制切段。 单段可更长,长句不容易被强制切开,但极长语音会推迟最终结果。 更早强制切段,最终结果更频繁,但一句长话可能被拆成多段。 长会议/长客服陈述可调大;希望长语音定期出最终结果时调小。
min_silence_frame 50 连续多少个静音帧后才确认语音结束,默认约 500ms 结束判定更保守,不容易被句中停顿截断,但最终结果延迟会增加。 结束更快,延迟更低,但短暂停顿更容易把一句话切成多段。 句子经常被切碎时调大;追求低延迟实时交互时调小。
chunk_max_frame 30000 离线长音频内部推理分块的最大帧数,默认约 300s 单次模型调用处理更长,切块边界更少,但峰值内存更高。 峰值内存更低,更适合超长音频或小内存机器,但内部循环次数增加。 普通音频一般不用改;遇到内存压力或超长音频时调小。

离线 batch detect 后处理参数:

参数 默认值 含义 调大后 调小后 建议场景
merge_silence_frame 0 语音段之间如果只有很短静音,是否把两段合并。0 表示不合并。 更倾向把被短停顿分开的语音合成一段,减少碎片,但可能把本应分开的两句话粘在一起。 分段更细,停顿会保留下来,但结果可能更碎。 识别结果过碎、句中停顿很多时调大;需要精细端点时保持 0 或调小。
extend_speech_frame 0 在检测到的语音段前后额外扩展多少帧。0 表示不扩展。 更不容易截掉开头/结尾弱音,但会带入更多前后噪声或静音。 片段更紧凑,噪声更少,但开头结尾更容易被切掉。 ASR 经常丢首字/尾字时调大;噪声很明显或只想要紧凑语音段时保持较小。

流式专属参数:

参数 默认值 含义 调大后 调小后 建议场景
chunk_size_ms 100 流式 VAD 的官方 chunkwise 步长。内部窗口长度为 25ms + (chunk_size_ms / 10 - 1) * 10ms,所以默认 100ms 步长对应 115ms 窗口。 每次处理音频更多,调度开销更低,但单块处理和端点反馈会更粗,实时性略差。 反馈更细、更实时,但调用频率更高,Python 调度和模型调用开销会增加。 默认 100ms 和官方示例一致;低延迟场景可尝试 40-80ms,吞吐优先可调到 150-200ms
pad_start_frame 5 检测到语音开始时,向前额外保留多少帧,默认约 50ms 更不容易丢掉第一个字/起音,但会带入更多语音前噪声。 起点更紧,前置噪声更少,但可能切掉开头弱音。 ASR 经常少首字时调大;前置噪声明显时调小。

realtime 动态更新

firered_online 支持 realtime session.updateturn_detection 映射:

realtime 字段 FireRed 字段 效果
threshold speech_threshold 调高更保守,调低更敏感。
silence_duration_ms min_silence_frame 按 10ms/frame 换算,调高延迟更大但更不容易截断。
prefix_padding_ms pad_start_frame 按 10ms/frame 换算,调高会保留更多语音开头前的上下文。

依赖

  • fasr
  • torch >= 2.0.0
  • numpy >= 1.24
  • soundfile >= 0.12
  • kaldiio >= 2.18
  • kaldi-native-fbank >= 1.19
  • textgrid

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fasr_vad_firered-0.5.8.tar.gz (25.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fasr_vad_firered-0.5.8-py3-none-any.whl (26.5 kB view details)

Uploaded Python 3

File details

Details for the file fasr_vad_firered-0.5.8.tar.gz.

File metadata

  • Download URL: fasr_vad_firered-0.5.8.tar.gz
  • Upload date:
  • Size: 25.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for fasr_vad_firered-0.5.8.tar.gz
Algorithm Hash digest
SHA256 45f7782f6d1e4107ed9210c747edbb5b4cda12e6ac92aae6888c12aa0cbf47c6
MD5 c35a9bf99056af614fa181d268d1f78f
BLAKE2b-256 12dc0b6204ea300bc863da20a3c3bdae54eb21d4c803d91bac19e3cee2a2d42c

See more details on using hashes here.

File details

Details for the file fasr_vad_firered-0.5.8-py3-none-any.whl.

File metadata

  • Download URL: fasr_vad_firered-0.5.8-py3-none-any.whl
  • Upload date:
  • Size: 26.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for fasr_vad_firered-0.5.8-py3-none-any.whl
Algorithm Hash digest
SHA256 e340160ff819b0e425875ff4549b2907b49ec161e248200207c2d4f3f3720ee7
MD5 c2cfa7d922992320098d04b7c9b4ae30
BLAKE2b-256 bd4e76df18a11aca1e40843f1fe58fcecac885b1c0f0f0f2f2825ebd0a2050cc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page