Learning to Read Braille: Benchmarking and Improving Braille Recognition Capabilities of VLMs
Organizations: Nilekani Centre at AI4Bharat · Indian Institute of Technology, Madras
Abstract
Despite rapid progress in visual understanding and document transcription, modern vision-language models (VLMs) struggle with a fundamental accessibility task: reading Braille from images. We introduce BrailleBench, a manually curated benchmark of 259 real-world Grade-1 and Grade-2 Braille images. We evaluate proprietary, open-weight, OCR-specialized, and tool-assisted multimodal systems and find that standalone general-purpose models perform poorly at directly transcribing Braille images, whereas tool-assisted systems perform much better. We design a synthetic Braille generation pipeline with diverse layouts and image perturbations. A 2B VLM model trained on our synthetic data reaches 87% exact match on Grade-1 and 61% on Grade-2 BrailleBench, outperforming standalone VLMs and achieving the highest Grade-2 exact match score among the evaluated systems. We further show that high accuracy on synthetic validation data does not guarantee high accuracy on real photographs in our experiments: models trained on prior synthetic data reach up to 96% on their synthetic validation set but at most 3.26% on Grade-1 BrailleBench. Our results identify an accessibility-relevant capability gap in multimodal systems and show that targeted synthetic supervision can improve real-world Braille transcription.
Figures & tables
| Model | Grade | CER | WER | Exact Match (%) | chrF | Norm. Match (%) | Word F1 (%) | Edit Similarity (%) |
| Standalone General-Purpose VLMs | ||||||||
| GPT-5.5 | G1 | 1.147 | 1.176 | 0.00 | 2.10 | 2.79 | 5.55 | 19.32 |
| G2 | 0.776 | 0.882 | 0.00 | 11.13 | 0.00 | 6.99 | 23.04 | |
| Kimi K2.6 | G1 | 1.276 | 1.516 | 0.00 | 5.68 | 0.00 | 0.59 | 12.82 |
| G2 | 0.941 | 1.077 | 0.00 | 5.79 | 0.00 | 2.70 | 13.98 | |
| Claude Opus 4.8 | G1 | 0.934 | 1.157 | 0.93 | 8.76 | 1.40 | 3.86 | 18.12 |
| Training data | Rank | chrF | EM (%) | CER | WER |
|---|---|---|---|---|---|
| Ours (276k) | 8 | 88.28 | 72.59 | 0.4196 | 1.0704 |
| Ours (276k) | 16 | 88.57 | 72.20 | 0.0754 | 0.1444 |
| Ours (276k) | 32 | 90.10 | 76.06 | 0.0759 | 0.1261 |
Appendix figures & tables18 assets
Supplementary material from the paper’s appendix.
Appendix
| Statistic | Grade 1 | Grade 2 |
| Images | 215 | 44 |
| Characters: mean | 12.06 | 71.66 |
| Characters: median | 9 | 34.5 |
| Characters: maximum | 61 | 368 |
| Words: mean | 2.25 | 13.89 |
| Words: median | 2 | 6 |
| Run | Images | G1 / G2 (%) | Words (med.) | Scr. (%) |
|---|---|---|---|---|
| Real-matched base (FineWeb sample-10BT) | 151,096 | 44.6 / 55.4 | 4 | 17.7 |
| Real-matched base (CC-MAIN-2013-20) | 20,000 | 43.2 / 56.8 | 4 | 18.3 |
| Add-on: ghost/hollow/strip/close-up, dynamic spacing | 65,857 | 38.4 / 61.6 | 2 | 40.1 |
| Add-on: 1–5 words, all scrambled | 9,767 | 50.3 / 49.7 | 3 | 99.2 |
| Add-on: 6–25 words, 50% scrambled | 9,997 | 50.0 / 50.0 | 15 | 49.9 |
| Earlier generator (sample of 20k) | 20,000 | 100.0 / 0.0 | 3 | 0.0 |
| Granularity | % of images |
| character | 0.0 |
| word | 20.6 |
| phrase (2-5 words) | 43.6 |
| sentence-length (6-25 words) | 34.1 |
| paragraph-length (26+ words) | 1.7 |
| numeric expression (overlapping) | 13.3 |
| Stage | Parameter and range | Prob. | Order |
|---|---|---|---|
| Dot size | dot radius = glyph radius dot_scale ; dot_scale target diameter / pitch / 0.68, clipped to | 1.0 | 1 (render) |
| Dot jitter | centre offset px (scaled with font size); dot intensity | 1.0 | 1 |
| Height-map blur | Gaussian radius px (scaled); light direction ; relief gain | 1.0 | 1 |
| Cell spacing | cell pitch / dot pitch : 60% , else ( in add-on) | 1.0 | 1 |
| Word spacing | blank advance (cell pitches): 85% from measured real values ( calibration, log-normal ; floor ), else ; add-on: | 1.0 | 1 |
| Line spacing | line pitch (cell pitches): real value in ; add-on: | 1.0 | 1 |
| Quantity | Sampling | Realised (p5–p95) |
| Cell pitch (px) | bank record (10% of samples: ), clipped to ; texts of 16 / 32 cells get a floor of 18 / 22 px | 20–64 |
| Cell tightness | see Table 6 | 2.24–3.53 |
| Word gap | see Table 6 | 0.20–2.20 |
| Dot diameter / pitch | bank | 0.33–0.81 |
| squeeze | 0.85–1.18 | |
| Margins (cells) | bank ; every side (re-drawn in otherwise); no dot is clipped (min. tracked dot-to-border distance 0.9 px) | left 0.11–3.51 |
| Hyperparameter | Value |
|---|---|
| Epochs | 1 |
| Number of GPUs | 8 |
| Batch size per GPU | 1 |
| Gradient accumulation steps | 4,8 |
| Effective batch size | 32,64 |
| Learning rate |
| Harness | Tool calls | Image views | Image commands | Code run |
|---|---|---|---|---|
| Claude Code | 6.8 | 3.2 | 3.5 | No |
| Codex | 7.2 | 4.1 | 3.7 | Yes |
| Harness | Images | Tokens | Cost (USD) | USD / image |
|---|---|---|---|---|
| Claude Code | 259 | 367,395,129 | 150.82 | 0.58 |
| Codex | 259 | 180,338,976 | 132.87 | 0.51 |
| Grade-1 ( ) | Grade-2 ( ) | |||||||||||
| Model | E | F | S | P | L | N | E | F | S | P | L | N |
| Claude Code (Opus 5.5) | 190 | 14 | 1 | 9 | 1 | 0 | 18 | 0 | 9 | 8 | 8 | 1 |
| Qwen3.5-2B (ours) | 187 | 6 | 4 | 16 | 2 | 0 | 27 | 5 | 1 | 10 | 1 | 0 |
| Chandra-OCR-2 (ours) | 183 | 7 | 1 | 20 | 4 | 0 | 24 | 6 | 0 | 13 | 1 | 0 |
| Codex (GPT-5.6 Sol) | 135 | 20 | 0 | 22 | 6 | 32 | 0 | 0 | 0 | 1 | 42 | 1 |
| GPT-6.1 Sol | 116 | 8 | 2 | 35 | 24 | 30 | 5 | 1 | 0 | 7 | 9 | 22 |
| Metric | 500k | 276k | WMT-Braille |
|---|---|---|---|
| Records | 500,000 | 276,717 | 100,000 |
| Characters mean/med./max | 148.1/150 300 | 39.1/21 160 | 82.9/76 200 |
| Words mean/med./max | 25.4/25 50 | 6.9/4 49 | 13.8/13 43 |
| Width (px) mean/med./range | 1536/1857 172–2530 | 631/493 28–2301 | 604/600 488–715 |
| Height (px) mean/med./range | 706/623 11–2103 | 279/137 28–2048 | 242/225 90–708 |
| BrailleBench ( ) | WMT val. ( ) | |||||
|---|---|---|---|---|---|---|
| Training data | chrF | EM (%) | CER | chrF | EM (%) | CER |
| 276k (short texts) | 94.97 | 82.63 | 0.0305 | 87.14 | 41.70 | 0.6331 |
| 500k (long texts) | 87.97 | 72.97 | 0.1981 | 95.25 | 63.10 | 0.0345 |
| 500k 15k short (LoRA) | 92.41 | 81.85 | 0.0640 | 94.15 | 70.20 | 0.0399 |
| Rank | chrF | EM (%) | CER | WER |
|---|---|---|---|---|
| BrailleBench ( ) | ||||
| 8 | 88.28 | 72.59 | 0.4196 | 1.0704 |
| 16 | 88.57 | 72.20 | 0.0754 | 0.1444 |
| 32 | 90.10 | 76.06 | 0.0759 | 0.1261 |
| WMT validation ( ) | ||||
| 8 | 95.27 | 73.10 | 0.0595 | 0.0450 |
| Metric | Angelina OBR | Chandra-OCR-2 (ours) | Qwen3.5-2B 500k (ours) | Qwen3.5-2B 276k (ours) | Llama-3.2-11B (WMT-Train) |
|---|---|---|---|---|---|
| CER | 0.7030 | 0.0138 | 0.1046 | 0.0218 | 6.7342 |
| Character accuracy | 0.2970 | 0.9862 | 0.8954 | 0.9782 | 0.0000 |
| WER | 1.0159 | 0.0438 | 0.1713 | 0.0518 | 15.6175 |
| Word accuracy | 0.0000 | 0.9562 | 0.8287 | 0.9482 | 0.0000 |
| Normalized CER | 0.5650 | 0.0109 | 0.1017 | 0.0211 | 6.6754 |
| Normalized WER | 0.8725 | 0.0359 | 0.1633 | 0.0478 | 15.6175 |
VLM Evaluation
Vision-language model evaluation measures multimodal systems’ perception, reasoning, grounding, robustness, and reliability across controlled and real-world tasks.
See all 999 papers