A more accurate alternative to Tesseract for Arabic
Tesseract misses about half of the characters on the KITAB-Bench Arabic benchmark. Nuqta OCR cuts the error rate five-fold and keeps tashkeel.
The numbers
| Engine | KITAB-Bench CER ↓ |
|---|---|
| Nuqta-Arabic-OCR 4B | 0.106 |
| Nuqta-Arabic-OCR 0.8B | 0.117 |
| Tesseract | 0.540 |
| EasyOCR | 0.580 |
Tesseract was built for line-by-line printed text. Arabic's joined letters, dots and diacritics, mixed-direction tables and low-resolution scans are where it fails. Nuqta is a vision-language model trained on Arabic documents.
Switching
# before
import pytesseract
from PIL import Image
text = pytesseract.image_to_string(Image.open("page.png"), lang="ara")
# after
from nuqta import OCR
if __name__ == "__main__": # needed with the vLLM backend
ocr = OCR("nuqta-0.8b")
text = ocr.read("page.png").text
Nuqta needs more compute than Tesseract. The 0.8B runs on any small GPU, and on CPU through its GGUF build (offline guide).
Questions
Is Tesseract good for Arabic OCR?
For clean printed lines it works, but on the KITAB-Bench Arabic benchmark it has a 0.54 character error rate, against 0.106 for Nuqta-Arabic-OCR 4B.
What is the best free Arabic OCR?
Nuqta OCR is free and open source (Apache-2.0) and has the best published scores on KITAB-Bench and Misraj-DocOCR.