Nuqta OCRنقطة

Guides

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

EngineKITAB-Bench CER ↓
Nuqta-Arabic-OCR 4B0.106
Nuqta-Arabic-OCR 0.8B0.117
Tesseract0.540
EasyOCR0.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.