بفضل الله و برحمته
Release: FastConformer Quran ASR (87 MB Mobile-Ready ONNX)
Alhamdulillah, we are releasing optimized, offline ONNX exports of the FastConformer Large model, fine-tuned specifically for Quranic Arabic Speech Recognition and Verse Tracking.
Base Model
This release is built directly upon the outstanding fine-tuning work by my brother Mohammed.
We exported this checkpoint to ONNX and applied a Mixed Quantization (INT4 MatMul + INT8 Conv) pipeline to compress the 458 MB model down to 87 MB for edge deployment.
Release Downloads
🔗 GitHub Release Assets: Iam-Muslim/QuranReciteToText (Tag: model)
| Model File | Size | Hardware Target & Use Case |
qurankarim-fastconformer-mixed.onnx | 87 MB | Mobile (Android/iOS) – Max compression (INT4 MatMul + INT8 Conv) |
qurankarim-fastconformer-q8.onnx | 175 MB | Mobile / Edge – Standard INT8 dynamic quantization |
qurankarim-fastconformer.onnx | 458 MB | Server / Desktop – Full precision FP32 baseline |
tokens.txt | < 1 MB | Vocabulary – Pre-formatted SentencePiece tokens for CTC decoding |
See it in Action: Word Timing Extraction
These models are already powering real-world applications. The QuranReciteToText repository is a practical example of this:
- It is a tool designed to convert any Quran recitation MP3 into precise word-level timings.
- It outputs the synchronized timestamps directly into a JSON file for easy integration.
- It specifically utilizes the q8 model, allowing it to run highly efficiently on a standard CPU without requiring a GPU.
Core Mobile App Use Cases
Because these models run 100% offline on-device via Sherpa-ONNX:
- 🎙️ Real-Time Word Highlighting: Generate precise word timestamps for audio-synced text highlighting (Tilawa tracking).
- 📖 Offline Recitation Search: Recite a line to jump directly to the target Surah & Ayah.
- Correction & Tajweed Apps: Verify offline audio recitations against ground-truth Ayah text.
Quickstart (Sherpa-ONNX)
All metadata (80-dim log-mel, subsampling factor 8, sample rate 16kHz) is pre-injected.
import sherpa_onnx
# Initialize offline CTC recognizer
recognizer = sherpa_onnx.OfflineRecognizer.from_nemo_ctc(
model="qurankarim-fastconformer-mixed.onnx", # 87 MB
tokens="tokens.txt",
num_threads=2,
)
# Stream 16kHz mono audio
stream = recognizer.create_stream()
stream.accept_waveform(16000, audio_samples)
recognizer.decode_stream(stream)
print(stream.result.text)
# Output: بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ