Skip to main content

FASR: Fast Automatic Speech Recognition Pipeline

Project description

fasr logo

fasr

fasr 是一个面向生产场景的 Python 语音推理框架,专注于将语音处理能力以可组合、可扩展的方式落地到工程系统中。

它围绕 AudioPipeline 构建,支持将 VAD、ASR、标点恢复、语种识别等能力按组件自由编排,适用于离线转写、批处理任务和在线服务等场景。

核心特点:

  • 插件化模型生态:能力按模型插件解耦,安装即注册,按需组合。
  • 工程化流水线:统一数据结构与组件接口,便于维护和扩展。
  • 高性能推理:组件异步执行,充分利用多核 CPU / GPU 资源。
  • 面向生产:支持批量、流式与服务化部署,便于接入业务系统。

组件介绍

  • loader:音频加载组件,负责读取本地或远程音频并构建 Audio 对象。
  • detector:端点检测组件(VAD),将音频切分为语音片段(segments)。
  • recognizer:语音识别组件(ASR),对每个语音片段进行转写。
  • sentencizer:标点恢复与句子切分组件(Punc),将识别结果整理为可读文本。
  • identifier:语言识别组件(LID,可选),用于多语言场景下识别语种。
  • custom:支持通过 add_pipe() 注入自定义组件,扩展前后处理逻辑。

快速开始

fasr 的模型能力通过模型插件提供,需要先安装对应的插件包:

pip install fasr-vad-marblenet fasr-asr-qwen3
import fasr
from fasr import AudioPipeline

# 加载流水线(首次运行会自动下载模型权重)
asr = (
    AudioPipeline()
    .add_pipe("detector", model="marblenet")
    .add_pipe("recognizer", model="qwen3_0_6b")
)

# 单条识别
audio = asr("example.wav")
for channel in audio.channels:
    print(channel.text)

# 批次识别
audios = asr.run(["1.wav", "2.wav", "3.wav"])
for audio in audios:
    for channel in audio.channels:
        print(channel.text)

# 流式返回(大批量场景,逐条 yield)
for audio in asr.stream(["1.wav", "2.wav", "3.wav"]):
    for channel in audio.channels:
        print(channel.text)

模型插件

fasr 通过模型插件机制加载组件能力,按任务安装对应插件后可自由组合流水线:

任务 插件包 典型模型
VAD fasr-vad-marblenet / fasr-vad-fsmn / fasr-vad-firered marblenet / fsmn / firered
ASR fasr-asr-qwen3 / fasr-asr-paraformer / fasr-asr-firered / fasr-asr-fun qwen3_0_6b / paraformer / firered_aed / fun_asr_nano
Punc fasr-punc-ct-transformer ct_transformer
LID fasr-lid-firered firered

如何编写模型插件

fasr 的插件机制基于 catalogue

  • Python entry points,安装即注册,按需惰性导入。一个最小的 VAD 插件骨架如下:
  1. 继承对应任务的基类并用 registry 装饰器注册:
# my_fasr_vad/models/vad.py
from fasr.models.vad_model import VADModel
from fasr.config import registry


@registry.vad_models.register("my_vad")
class MyVADModel(VADModel):
    def load_checkpoint(self, checkpoint_dir=None): ...
    def detect(self, audios): ...
  1. 在插件包的 pyproject.toml 中声明 entry point,group 名必须用下划线 (对应 catalogue 的 namespace ("fasr", "vad_models")fasr_vad_models):
[project.entry-points."fasr_vad_models"]
my_vad = "my_fasr_vad.models.vad:MyVADModel"

每个任务对应一个固定的 group 名:

任务 entry point group
ASR fasr_asr_models
流式 ASR fasr_stream_asr_models
VAD fasr_vad_models
流式 VAD fasr_stream_vad_models
标点 fasr_punc_models
语种识别 fasr_lid_models

注意:不要写成 fasr.vad_models(点号),catalogue 只按下划线 命名查找 entry point,点号写法会导致 registry.resolve(cfg) 找不到模型。 如果注册名本身带点(例如 stream_fsmn.onnx),请用引号包起来: "stream_fsmn.onnx" = "..."

  1. pip install -e .(或 uv pip install -e .)安装插件后,配置文件里 @vad_models = "my_vad" 就会被 fasr.load(cfg) 自动发现,无需手动 import。 其它插件的重型依赖(如 torchvllm)不会被一同拉起,只有真正被配置引用的插件 才会被导入。

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-0.5.0.post0.tar.gz (9.0 MB view details)

Uploaded Source

Built Distribution

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

fasr-0.5.0.post0-py3-none-any.whl (4.4 MB view details)

Uploaded Python 3

File details

Details for the file fasr-0.5.0.post0.tar.gz.

File metadata

  • Download URL: fasr-0.5.0.post0.tar.gz
  • Upload date:
  • Size: 9.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","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-0.5.0.post0.tar.gz
Algorithm Hash digest
SHA256 589908f37bcd71f9576645fb07521c4bc6c0d3ab973a111a21349bb9d8403400
MD5 4cda3fd5d9d54919a1f9cafa9f2b1747
BLAKE2b-256 aa4e19d9a4667041f1fea2e9461a70494104efa9aa4a8a3994ba3d99bb230e17

See more details on using hashes here.

File details

Details for the file fasr-0.5.0.post0-py3-none-any.whl.

File metadata

  • Download URL: fasr-0.5.0.post0-py3-none-any.whl
  • Upload date:
  • Size: 4.4 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","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-0.5.0.post0-py3-none-any.whl
Algorithm Hash digest
SHA256 e002ec48b9e0629459244e262a3d76a160111f46ccb19a7a5e87ac5786e3757c
MD5 3950328ad72071387fa4a367fd0ec975
BLAKE2b-256 1cf2cea19af1003bea9986ca9362f531a3067cb3d493b4e12749e883b41ac75c

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