Skip to main content

fasr-vad-fsmn

英文文档地址: README_EN.md

FSMN 语音活动检测插件。离线 fsmn 模型通过 funasr_onnx 完成特征处理和 ONNX 推理;插件也提供 fsmn_online 用于流式 VAD。

安装

pip install fasr-vad-fsmn

注册模型

注册名 类 适用场景
fsmn FSMNVad 离线 VAD,把完整音频切成语音片段
fsmn_online FSMNVadOnline 流式 VAD,边接收音频边输出语音块

流水线使用

add_pipe() 中除 component、model、batch_size 等流水线参数外,其它 关键字参数会传给 detector 的模型。FSMN 参数可以直接写在 detector pipe 上:

from fasr import AudioPipeline

pipeline = (
    AudioPipeline()
    .add_pipe(
        "detector",
        model="fsmn",
        max_end_silence_time=600,
        speech_noise_thres=0.55,
        num_threads=4,
    )
    .add_pipe("recognizer", model="paraformer")
    .add_pipe("sentencizer", model="ct_transformer")
)

常见配置可以这样选:

目标 写法 效果
少切碎句子 max_end_silence_time=1000 句中短暂停顿不容易切开
降低结束延迟 max_end_silence_time=300 更快结束片段,但句子可能更碎
噪声环境 speech_noise_thres=0.7 噪声误检更少,但轻声可能漏掉
轻声或远场 speech_noise_thres=0.45 更容易保留弱语音,但噪声更容易进入片段
提高 CPU 吞吐 num_threads=4 或 num_threads=8 更多 CPU 并行,CPU 占用也更高
使用 GPU device_id=0 使用第 0 张 GPU,需要安装 onnxruntime-gpu

Confection 配置

fasr 配置文件使用 Confection 的 TOML 风格,不是 YAML。

只配置 VAD 模型:

[vad_model]
@vad_models = "fsmn"
max_end_silence_time = 600
speech_noise_thres = 0.55
num_threads = 4

放在流水线里时,模型参数写在 pipeline.pipes.detector.component.model 下:

[pipeline]
@pipelines = "AudioPipeline.v1"
pipe_order = ["detector"]

[pipeline.pipes]

[pipeline.pipes.detector]
@pipes = "thread_pipe"
batch_size = 4
batch_timeout = 0.1

[pipeline.pipes.detector.component]
@components = "detector"
num_threads = 2
max_segment_duration = 30.0

[pipeline.pipes.detector.component.model]
@vad_models = "fsmn"
max_end_silence_time = 600
speech_noise_thres = 0.55
num_threads = 4

单独使用模型

模型实例化时会自动下载并加载权重。

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

model = registry.vad_models.get("fsmn")(
    max_end_silence_time=600,
    speech_noise_thres=0.55,
)

audio = AudioSpan(waveform=Waveform.from_file("example.wav"), start_ms=0)
segments = model.detect(audio)
for segment in segments:
    print(f"{segment.start_ms}ms - {segment.end_ms}ms")

使用本地权重目录:

model.load_checkpoint("/path/to/fsmn-vad")

参数

离线 fsmn 只保留真正影响 funasr_onnx 推理的参数。checkpoint、 cache_dir、endpoint、revision、force_download 等通用参数由基类提供。

参数 类型 / 范围 默认值 调大时 调小时 什么时候改
sample_rate int,建议 16000 16000 不建议,增加成本 不建议,可能损失语音细节 通常不要改
device_id None、-1、"cpu" 或 GPU id None 设置 GPU id 使用 GPU None / -1 / "cpu" 使用 CPU 需要低延迟或高并发
num_threads int >= 0 2 CPU 推理可能更快,但占用更多核心 更省 CPU,但可能变慢 CPU 部署调优
max_end_silence_time int >= 0,毫秒 500 更容忍停顿,片段更完整,结束更晚 结束更快,片段更碎 句子切太碎或结束太慢
speech_noise_thres float,0.0 到 1.0 0.6 更严格,噪声误检少,轻声可能漏掉 更敏感,弱语音保留更多,噪声可能进入 噪声误检或轻声漏检

调参建议

现象 优先尝试
一句话被切成很多段 max_end_silence_time=1000 或 1200
说完后很久才结束 max_end_silence_time=300 到 500
背景噪声被当成语音 speech_noise_thres=0.7 或 0.8
轻声、远场说话被漏掉 speech_noise_thres=0.45 或 0.5
CPU 占用太高 降低 num_threads
CPU 推理太慢 提高 num_threads,或安装 onnxruntime-gpu 并设置 device_id=0

fsmn_online 使用 device="cpu" / device="cuda" 选择设备,并额外提供 chunk_size_ms。chunk_size_ms 越小越实时,但调度开销更大;越大吞吐更稳, 但输出更晚。默认 100 ms 适合多数实时场景。

fsmn_online 还支持通过 apply_turn_detection(...) 做实时断句参数更新。 这个接口主要给 websocket 这类长连接会话使用;离线 fsmn 处理的是完整音频, 不需要这类运行时更新接口。

fsmn_online 的运行时调参重点如下:

参数 默认值 调大时 调小时
max_end_silence_time / silence_duration_ms 500 断句更保守,不容易过早切断,但最终结果延迟更高 断句更快,但更容易把一句话切成多段
speech_noise_thres / threshold 0.6 更严格,更抗噪,但可能漏掉轻声语音 更敏感,更容易抓到弱语音,但也更容易误触发噪声
prefix_padding_ms 0 更不容易截掉句首,但可能带入更多前置噪声 片段更紧,但更容易丢掉第一个音节

prefix_padding_ms 在 wrapper 层实现:检测到说话开始时,会把输出片段的起点 按设定值向前回退,并在已有缓冲音频范围内做裁剪。

CPU / GPU

默认使用 CPU ONNX Runtime。加载模型时会打印当前使用 CPU 还是 GPU。

GPU 推理:

uv pip install onnxruntime-gpu
model = registry.vad_models.get("fsmn")(device_id=0)
stream_model = registry.vad_models.get("fsmn_online")(device="cuda")

依赖

  • fasr
  • funasr-onnx
  • numpy >= 1.24
  • onnxruntime >= 1.16, < 1.24
  • Python 3.10-3.12

Metadata

Release files for fasr-vad-fsmn 0.5.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fasr-vad-fsmn 0.5.8
File Size Uploaded
fasr_vad_fsmn-0.5.8.tar.gz 3.2 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for fasr-vad-fsmn 0.5.8
File Interpreter ABI Platform
fasr_vad_fsmn-0.5.8-py3-none-any.whl Python 3 none any Details

Total release size: 6.4 MB

Release files / fasr_vad_fsmn-0.5.8.tar.gz

Download URL fasr_vad_fsmn-0.5.8.tar.gz
Size 3.2 MB
Tags Source
SHA-256 checksum
How to use checksums
e59dc9dac2914dd0edb2d12419927e26ba7b2a020f7b00402a354827f4768c7c
BLAKE2b-256 checksum
How to use checksums
9b26ed9b5acc95f243ac1271f1f1ddc23272422878e6aac06ccff72a257098e9
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release files / fasr_vad_fsmn-0.5.8-py3-none-any.whl

Download URL fasr_vad_fsmn-0.5.8-py3-none-any.whl
Size 3.2 MB
Tags Python 3
SHA-256 checksum
How to use checksums
6d1fe1a1c7bdfd3390004946d831f7dc21cbac0d03405e46c4aa63b295a1f20f
BLAKE2b-256 checksum
How to use checksums
0ab068c8edf1c4578a9c72f1308c100b806f250de3e21c345bd867ec9d1cb934
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release history Release notifications | RSS feed

This release

0.5.8 This release

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.9

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page