--- title: Arabic Letter Verifier emoji: đŸ—Ŗī¸ colorFrom: indigo colorTo: blue sdk: gradio sdk_version: 5.31.0 app_file: app.py pinned: false short_description: Free ZeroGPU verifier for Arabic letter pronunciation models: - masumtechnonext/wav2vec2-arabic-letter-verifier --- # āφāϰāĻŦāĻŋ āĻšāϰāĻĢ āωāĻšā§āϚāĻžāϰāĻŖ āϝāĻžāϚāĻžāχāĻ•āĻžāϰ⧀ ¡ Arabic Letter Pronunciation Verifier Free Gradio demo for [`masumtechnonext/wav2vec2-arabic-letter-verifier`](https://huggingface.co/masumtechnonext/wav2vec2-arabic-letter-verifier), a fine-tuned `wav2vec2-large-xlsr-53-arabic` model that checks whether a spoken clip matches one of the 28 Arabic alphabet letters. Record or upload a short clip of a single letter, optionally pick the target letter you were aiming for, and the app returns the predicted letter, the model confidence, whether the prediction was accepted, and whether it matched your target. ## āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ ¡ How it works The model has **29 classes** — the 28 letters plus a trained **Unknown** class (silence, noise, time-reversed clips, cross-letter mixups), so out-of-vocabulary audio has somewhere to go instead of being forced into a real letter. A prediction is only reported when the top softmax probability clears the calibrated threshold from `calibration.json` (**0.86**); below that the app reports *Unrecognized* rather than a guess. ## āĻĢā§āϰāĻŋ āϕ⧋āϟāĻž ¡ Free quota This Space runs on **ZeroGPU**. GPU time is deducted from the *caller's* daily quota — 2 min/day anonymous, 5 min/day for a signed-in free account, 25 min/day for PRO. One prediction costs ~0.09 GPU-seconds, so a signed-in free account gets roughly **3,500 predictions per day**. ## API Two endpoints are exposed: - `POST /gradio_api/call/verify` — returns the verdict, the detail panel and a JSON payload with every class probability. - `POST /gradio_api/call/predict` — legacy endpoint kept for backwards compatibility; returns `(prediction_text, verdict_text)`. ```python from gradio_client import Client, handle_file client = Client("masumtechnonext/host_model_gra") verdict, details, payload = client.predict( handle_file("clip.wav"), "Sheen", api_name="/verify" ) print(payload["predicted_label"], payload["confidence"], payload["is_correct"]) ``` ## āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž ¡ Known limitation The source recordings have no speaker ID, so the train/validation/test split is by clip (stratified per letter), not by speaker. If the same speaker appears in both train and test, held-out accuracy may be optimistic relative to a genuinely new speaker or microphone. Validate on your own held-out speakers before deploying.