CoolFace
Modelpublic

oi-uae/farsi-faster-whisper-large-v3

sourceHugging Faceapache-2.0updated 12d agoView on Hugging Face
1likes52downloads
Model Card

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:

bash
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:

bash
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
  • โ€”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 (429 overload protection, 413 upload caps, 504 timeouts), 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

python
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):

MetricValue
Loss0.3402
WER Ortho27.5624
WER23.4723

Usage (bare faster-whisper)

Of course, you can also use the model directly without OISpeech:

python
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"):

python
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 config
  • โ€”tokenizer.json โ€” tokenizer (converted from the source model's vocab.json/merges.txt)
  • โ€”vocabulary.json โ€” CTranslate2 vocabulary
  • โ€”preprocessor_config.json โ€” Whisper feature extractor config (16 kHz, 128 mel bins)

License

Apache 2.0, inherited from the source model.