oi-uae/farsi-faster-whisper-large-v3
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.
<p align="center"> <a href="https://github.com/openinnovationai/oi-speech"> <img src="https://img.shields.io/badge/%F0%9F%9A%80Deploywith-OI_Speech-2563EB?style=for-the-badge" alt="Deploy with OI Speech"> </a> </p>
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 /modelWhy 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
- 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):
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.
