Farsi Faster Whisper Large v3 (CTranslate2)
This is a CTranslate2 / faster-whisper
conversion of mohammadjavadnasri/whisper-large-v3-farsi-cv17,
which is a fine-tune of openai/whisper-large-v3 on the Persian (Farsi) subset of Common Voice 17.
The model was converted with ct2-transformers-converter and quantized to float16:
ct2-transformers-converter \
--model mohammadjavadnasri/whisper-large-v3-farsi-cv17 \
--output_dir oi-uae/farsi-faster-whisper-large-v3 \
--copy_files tokenizer.json preprocessor_config.json \
--quantization float16
🚀 Recommended deployment: OISpeech Server
For production use, we recommend deploying this model with OISpeech Server — a production-ready, Dockerized serving framework that turns raw ASR output into complete, speaker-aware, readable transcripts through an OpenAI-compatible API.
Serving this model is a one-liner — mount the model and go:
docker run --gpus all -p 8080:8001 \
-v /path/to/farsi-faster-whisper-large-v3:/model \
<oispeech image> --model /model
Why deploy with OISpeech
Running a bare Whisper model gives you text. OISpeech wraps it in a full audio processing pipeline:
- Speaker diarization — identifies who spoke when (NeMo MSDD / Pyannote), with word-speaker mapping from timestamp overlap
- VAD (voice activity detection) — NeMo MarbleNet segments speech regions, with tunable onset/offset thresholds for noisy environments
- Noise cancellation & audio cleanup — three orthogonal, per-request toggles:
- Vocal separation (Demucs
htdemucs) for background music and crowd noise - Bandpass filtering (100 Hz – 8 kHz) for HVAC rumble and mic hiss
- Peak normalization (–0.5 dBFS) for inconsistent recording levels
- Vocal separation (Demucs
- Forced alignment — CTC-based, word-level timestamp precision
- Punctuation restoration — deep multilingual model for readable transcripts
- Intelligent post-processing — sentence boundary detection, numeral suppression (spoken numbers → digits), and speaker realignment
- Robustness — automatic temperature fallback retries low-confidence segments on noisy audio
- OpenAI-compatible API — drop-in replacement for
client.audio.transcriptions.*, outputs JSON / SRT / VTT / Text - Production hardening — GPU concurrency limits with bounded queues (
429overload protection,413upload caps,504timeouts), async jobs API for long audio, and a built-in React testing UI - Deployment flexibility — GPU (CUDA) or CPU, ARM64 support, and fully airgap/offline capable (models baked into the image, runtime network access blocked at the socket level)
Example: diarized transcription via the OpenAI SDK
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8080/v1", api_key="x")
with open("meeting.mp3", "rb") as f:
transcript = client.audio.transcriptions.create(
model="default",
file=f,
response_format="verbose_json",
extra_body={"diarize": True, "enable_stemming": True}, # noise handling
)
for segment in transcript.segments:
print(f"[{segment['start']:.2f}s -> {segment['end']:.2f}s] Speaker {segment['speaker']}: {segment['text']}")
Source model results
Evaluation on the Common Voice 17 fa test split (as reported by the source model):
| Metric | Value |
|---|---|
| Loss | 0.3402 |
| WER Ortho | 27.5624 |
| WER | 23.4723 |
Usage (bare faster-whisper)
Of course, you can also use the model directly without OISpeech:
from faster_whisper import WhisperModel
model = WhisperModel("oi-uae/farsi-faster-whisper-large-v3", device="cuda", compute_type="float16")
segments, info = model.transcribe("audio.wav", language="fa")
for segment in segments:
print(f"[{segment.start:.2f} -> {segment.end:.2f}] {segment.text}")
On CPU, use device="cpu" with compute_type="int8" (or "float32"):
model = WhisperModel("oi-uae/farsi-faster-whisper-large-v3", device="cpu", compute_type="int8")
Files
model.bin— CTranslate2 weights (float16)config.json— CTranslate2 Whisper generation configtokenizer.json— tokenizer (converted from the source model'svocab.json/merges.txt)vocabulary.json— CTranslate2 vocabularypreprocessor_config.json— Whisper feature extractor config (16 kHz, 128 mel bins)
License
Apache 2.0, inherited from the source model.