Nuqta OCRنقطة

Nuqta: open-source Arabic OCR

Nuqta turns Arabic scans, photos and PDFs into text you can copy and search. It writes the tashkeel that is printed on the page and adds none of its own. Its two models have the best published scores on KITAB-Bench and Misraj-DocOCR, and the smaller one runs on a phone.

Arabic book page with tashkeelNuqta 4B output, unedited
مُغَامَرَاتُ السِّنْجَابِ ثرثار فَتَسَلَّقَ الشَّجَرَةَ وَتَبِعَهُ شادو. وَكَانَ تَرْكِيزُ شادو مُنْصَبًّا عَلَى الْإِيقَاعِ بِثرثار؛ حَتَّى إِنَّهُ لَمْ يَلْحَظْ وُجُودَ الْعَجُوزِ أَحْمَرِ الذَّيْلِ، وَهُوَ مَا أَمَّلَهُ ثرثار. فَرَاحَ ثرثار يَصْعَدُ لِأَعْلَى، مُتَخَطِّيًا أَحْمَرَ الذَّيْلِ، إِلَّا أَنَّهُ شَدَّ رِيشَةً مِنْ رِيشِ ذَيْلِهِ الطَّوِيلِ أَثْنَاءَ مُرُورِهِ، ثُمَّ رَكَضَ إِلَى أَعْلَى الشَّجَرَةِ، وَاسْتَجْمَعَ آخِرَ طَاقَتِهِ لِيَثِبَ إِلَى شَجَرَةِ تَنُّوبٍ قَرِيبَةٍ؛ …
A page from a Hindawi children's book (CC BY 4.0). The names ثرثار and شادو are printed without marks, and the output leaves them that way.
0.106character error rate on KITAB-Bench. Next best: Gemini-2.0-Flash, 0.13
82.8MARS on Misraj-DocOCR. Next best: Baseer v2, 77.8
1.6 GBof memory runs the 0.8B offline on a phone

What it reads

Two models

ModelSizeKITAB-Bench CER ↓Misraj MARS ↑Runs on
Nuqta-Arabic-OCR 4B4.75B0.10682.816 GB GPU, or laptop (GGUF)
Nuqta-Arabic-OCR 0.8B0.89B0.11777.1any GPU, CPU, phone (GGUF)

GGUF builds for llama.cpp, LM Studio and other local apps: 4B GGUF (2.9 GB) · 0.8B GGUF (560 MB). Full comparison with Gemini, GPT, Azure, Mistral, Baseer, Tesseract and others: Arabic OCR benchmarks.

Use it in Python

pip install "nuqta-ocr[vllm]"   # Linux + NVIDIA GPU, fastest
pip install "nuqta-ocr[fast]"   # transformers with fast kernels
pip install nuqta-ocr           # transformers only
from nuqta import OCR

if __name__ == "__main__":
    ocr = OCR("nuqta-4b")          # or "nuqta-0.8b" for small GPUs
    print(ocr.read("page.jpg").text)                     # tashkeel only where printed
    print(ocr.read("scan.pdf", mode="markdown").text)    # headings, lists, HTML tables
    print(ocr.read("passport.jpg", mode="id").fields)    # MRZ fields with check digits

Command line: nuqta read scan.pdf --mode markdown. More in the guides.

Questions

What is the best Arabic OCR model?

On the two public Arabic OCR benchmarks, Nuqta-Arabic-OCR 4B has the best published results: character error rate 0.106 on KITAB-Bench (Gemini-2.0-Flash 0.13, GPT-4o 0.31) and MARS 82.8 on Misraj-DocOCR (Baseer v2 77.8, Gemini-2.5-Pro 70.8). It is open source under Apache-2.0. The smaller Nuqta-Arabic-OCR 0.8B is second on KITAB-Bench and runs on a phone.

What is the best open-source Arabic OCR?

Nuqta OCR. Both models are open weights under Apache-2.0, and both score better on KITAB-Bench than every other published result, open or closed. Tesseract and EasyOCR score 0.54 and 0.58 character error rate on the same benchmark.

Does Nuqta OCR keep tashkeel (Arabic diacritics)?

Yes. It copies the diacritics printed on the page and almost never adds any: 0.08 to 0.16 invented marks per 100 letters on undiacritized text. Fully vocalized text such as Quran or children's books keeps its marks.

Can it convert Arabic PDFs to text?

Yes. The nuqta-ocr Python library renders every PDF page and returns plain text or Markdown with HTML tables, in reading order.

Does it read Arabic handwriting?

It reads handwritten lines and paragraphs (KHATT character error rate 0.07 to 0.11), but it is built for printed documents, where it is most accurate.

Can it run without a GPU?

Yes. The GGUF builds run on CPU with llama.cpp, LM Studio and similar apps, and the 0.8B runs offline on Android and iPhone. On a laptop CPU a dense book page takes about a minute; on a 24 GB GPU about 3 seconds.

Is Nuqta OCR free for commercial use?

Yes. The models and the library are released under Apache-2.0.

Which languages does it read?

Arabic, and English mixed into Arabic documents (for example bilingual tables and IDs).

Cite

@misc{nuqta_ocr_2026,
  title  = {Nuqta OCR: Accurate Arabic Document OCR with Faithful Tashkeel},
  author = {Salah AlHaismawi and Mohamed Saleh Tulib and Ahmed ElSayed Mohamed Ibrahim},
  year   = {2026},
  url    = {https://github.com/SalahAlHaismawi/nuqta-ocr}
}