FASR: Fast Automatic Speech Recognition Pipeline
Project description
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 插件骨架如下:
- 继承对应任务的基类并用
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): ...
- 在插件包的
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" = "..."。
pip install -e .(或uv pip install -e .)安装插件后,配置文件里@vad_models = "my_vad"就会被fasr.load(cfg)自动发现,无需手动import。 其它插件的重型依赖(如torch、vllm)不会被一同拉起,只有真正被配置引用的插件 才会被导入。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fasr-0.5.0.tar.gz.
File metadata
- Download URL: fasr-0.5.0.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4293392e8fca541f556c2ad33dc13c2e4942e6ad18837c00205861145259b97b
|
|
| MD5 |
07ad4828e72ade02c9389580eaffc453
|
|
| BLAKE2b-256 |
cc4fc7aecb818a126b82d238f40009fbf9c01e275b67f8a441bfda5d1c2a2b1b
|
File details
Details for the file fasr-0.5.0-py3-none-any.whl.
File metadata
- Download URL: fasr-0.5.0-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
34ff88b084eef70cd8f6d8e410355789fd03b0b2cf34c44298839a52354823a8
|
|
| MD5 |
1ac3db0680a83469dba921832d52ca6a
|
|
| BLAKE2b-256 |
f73a1ce838d77c332a0eb1e605bb48e84b7b4620202c45da48d820f4c41b0153
|