FunASR: Speech Recognition That Actually Fits Your Deployment Story
You've got audio to transcribe. Maybe it's a live stream, maybe it's a folder of recordings, maybe it needs to run on a device that isn't a server rack. The problem is that most speech recognition toolkits pick one lane and stay there—they're either built for offline batch processing or streaming, cloud or edge, but rarely all of the above. FunASR is an industrial speech recognition toolkit that tries to cover the whole map: offline, streaming, and edge deployment, with an OpenAI-compatible serving layer on top.
What It Does
FunASR is a fundamental end-to-end speech recognition toolkit from ModelScope. It handles ASR (automatic speech recognition) along with a broader pipeline of speech tasks: voice activity detection (VAD), punctuation restoration, speaker pipelines, and emotion and audio-event models. So it's not just turning audio into text—it's the surrounding infrastructure you'd typically need to bolt on separately.
The toolkit supports both offline and streaming recognition, and it's designed with edge deployment in mind alongside more conventional setups. It also ships with OpenAI-compatible serving, which means if you've already got tooling that speaks the OpenAI API format, you can point it at FunASR without rewriting your client code.
There are two distinct paths for getting started. One is a native Transformers route for Fun-ASR-Nano transcription using the Hugging Face API—no FunASR toolkit or remote Python code required. The other is the full FunASR toolkit with its pipelines. The toolkit installs from PyPI, and the README notes that CPU-only installs can use the default wheels.
Why It's Cool
-
It doesn't force you into one deployment shape. Offline, streaming, and edge are all first-class concerns here. That matters because the same team often needs different modes for different products, and consolidating on one toolkit beats maintaining three.
-
The pipeline extends past transcription. VAD, punctuation, speaker pipelines, emotion, and audio-event models mean you're not stitching together four separate libraries just to get usable output. Punctuation alone is the kind of thing you don't think about until you're staring at an unpunctuated wall of text.
-
OpenAI-compatible serving is a practical shortcut. If your existing stack already talks to OpenAI-style endpoints, this removes a migration step. It's the kind of compatibility decision that saves a weekend.
-
There's a native Transformers path that skips the toolkit entirely. For Fun-ASR-Nano, you can use the Hugging Face API directly. That's a genuinely useful option if you just want transcription and don't need the full pipeline machinery.
-
Model coverage spans languages and dialects. The Fun-ASR-Nano checkpoint covers Chinese, English, Japanese, and Chinese dialect groups and regional accents. There's also a separate 31-language checkpoint (Fun-ASR-MLT-N, referenced in the truncated README) if you need broader coverage.
-
The docs are organized around decisions, not just features. There's a model selection guide and a deployment matrix linked right from the top. That's a small thing, but it tells you the maintainers expect you to have to choose between options—and they've tried to help.
How to Try It
The fastest path if you don't want to install anything is the Colab quickstart, where you can transcribe a public sample or upload your own audio in a browser.
If you'd rather work locally, start with the CPU install:
pip install torch torchaudio
pip install funasr
For GPU, install the PyTorch and torchaudio wheels matching your NVIDIA driver from pytorch.org before installing FunASR. Then confirm the GPU is actually visible:
python - <<'PY'
import torch
print(torch.cuda.is_available())
PY
Only use device="cuda" if that prints True. Otherwise stick with device="cpu" or reinstall PyTorch with the correct CUDA wheel. It's a small check, but it'll save you from a confusing error later.
Once that's sorted, the toolkit example looks like this:
from funasr import AutoModel
model = AutoModel(model="FunAudioLLM/Fun-ASR-Nano-2512", device="cuda")
result = model.generate(input="https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav")
print(result[0]["text"])
If you'd rather skip the toolkit, the native Transformers quickstart for Fun-ASR-Nano uses the Hugging Face API directly—no FunASR install needed. There's a Space and a notebook for that path too.
The repository lives at github.com/modelscope/funasr, and there's a deployment hub and online docs if you want to dig deeper before committing.
Final Thoughts
FunASR is aimed at people who need speech recognition to be part of a real system, not a demo. The combination of offline, streaming, and edge support, plus the surrounding pipeline pieces, makes it a reasonable candidate if you're tired of assembling a stack from parts. The native Transformers path is a nice escape hatch for simpler needs, and the OpenAI-compatible serving is a thoughtful bit of pragmatism. If you're evaluating ASR toolkits for anything beyond a toy project, this one's worth a look—start with the Colab and see how it handles your audio.
Follow @githubprojects for more developer tools and open source projects.