/ Модель

Характеристики

Лицензия
Своя лицензия
Опубликована
7 авг 2026

indic-ocr

Описание изображенийИзображение → текст10 профессий

IndicOCR распознаёт печатные и рукописные документы на английском и индийских языках, выдавая текст в порядке чтения и структурированные данные.

1 342скачиваний за 30 дней55лайковвеса обновлены7 сен 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

IndicOCR — разработанная Bodhan AI модель для распознавания текста и разбора страниц документов на английском и индийских языках. Она принимает изображение страницы и формирует упорядоченный по чтению Markdown, а также структурированные данные JSON по блокам. Система состоит из двух этапов: IndicDocLayout на базе PP-DocLayoutV3/RT-DETR обнаруживает и упорядочивает элементы страницы, а IndicBlockOCR на базе Qwen3.5-0.8B распознаёт текстовые блоки. Размеры компонентов составляют 33 млн и 0,8 млрд параметров соответственно; распознаватель использует токенизатор Sarvam-30B.

Модель предназначена для OCR и разбора документов, включая печатный текст на английском и 22 индийских языках, а также рукописный текст на английском и 12 индийских языках. Она поддерживает сохранение порядка чтения, представление формул в LaTeX и таблиц в HTML или Markdown. По умолчанию изображения, диаграммы, реклама, колонтитулы и верхние/нижние колонтитулы определяются, но не передаются распознавателю; в JSON для них остаётся пустой текст. Качество распознавания рукописного текста ещё улучшается и зависит от стиля письма. Лицензия указана как other; конкретные условия в предоставленных данных не раскрыты.

Сценарии применения

  • извлечение текста из сканов документов на индийских языках
  • преобразование страниц учебников и экзаменационных материалов в Markdown
  • распознавание рукописных заметок на поддерживаемых языках
  • извлечение формул с представлением в LaTeX
  • разбор таблиц и блоков документа с сохранением порядка чтения

Ограничения

Распознавание рукописного текста всё ещё развивается, а качество зависит от стиля письма. Изображения и диаграммы, а также реклама и колонтитулы по умолчанию не передаются распознавателю и остаются в JSON без текста.

Для каких профессий подходит10

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Также подходит для

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

Pipeline Layout Recognizer Languages License

Document parsing for English and 22 Indian languages, printed and handwritten. A page image in; reading-ordered Markdown out, with math as LaTeX and tables as HTML or Markdown, plus per-block JSON.

IndicOCR reads a document page and returns its text in reading order. It is a modular, two-stage parser: IndicDocLayout detects the blocks on the page and orders them, and IndicBlockOCR transcribes the textual blocks. The two stages communicate through a structured JSON file, so either stage can be used independently or replaced with another implementation.

ARCHITECTURE.md traces one page through the whole call path, names what each module does, and lists the invariants that break the output silently when violated.


Detected blocks with their reading order on the left, the transcription on the right.


IndicDocLayoutIndicBlockOCR
RoleLayout detection + reading orderBlock-level text recognition
ArchitecturePP-DocLayoutV3 / RT-DETRQwen3.5-0.8B
Parameters33 M0.8 B
Precisionfp32bf16
In this repoweights/layout (133 MB)weights/ocr (1.7 GB)
OutputLayout JSONMarkdown + block JSON

IndicBlockOCR uses the Sarvam-30B tokenizer, with a vocabulary designed to cover Indian scripts. IndicDocLayout is a fine-tune of PP-DocLayoutV3/RT-DETR, trained with a 37-class taxonomy designed for education-domain documents.

IndicDocLayout predicts a labelled bounding box for each detected layout element. The 37 supported labels are:

Advertisement, Answer, Author, Chapter-end-section, Chapter-title, Chart, Code, Contact-info, Dateline, Diagram, Equation, Expression, Flag, Folio, Footer, Footnote, Header, Image, Image-caption, Index, Infobox, List, MCQ, Page-number, Paragraph, Placeholder-text, Question, Reference, Section-title, Solved-example, Sub-section-title, Sub-sub-section-title, Table, Table-caption, Table-of-contents, Title, Website-link


Printed page recognition is supported across English and the 22 constitutionally recognised Indian languages: Assamese, Bengali, Bodo, Dogri, Gujarati, Hindi, Kannada, Kashmiri, Konkani, Maithili, Malayalam, Manipuri, Marathi, Nepali, Odia, Punjabi, Sanskrit, Santali, Sindhi, Tamil, Telugu, Urdu.

Handwriting recognition currently supports English and 12 Indian languages: Hindi, Bengali, Telugu, Marathi, Tamil, Gujarati, Kannada, Malayalam, Odia, Punjabi, Assamese, and Urdu.

Handwriting quality is still a work in progress, particularly across different writing styles. We are working on improving recognition and extending support to additional languages.


The repo ships an installer that reads your driver and picks matching CUDA wheels. If you work in a virtual environment, please activate it first, as the installer installs into whichever Python is active.

IDP=$(python -c "from huggingface_hub import snapshot_download as d; print(d('bodhan-ai/indic-ocr'))")
cd "$IDP" && ./install.sh

It will use uv if that is available, and pip otherwise. Where running a shell script is not convenient, TROUBLESHOOTING.md lists the two commands it runs.

import sys
from huggingface_hub import snapshot_download

repo = snapshot_download("bodhan-ai/indic-ocr")
sys.path.insert(0, repo)                    # the code ships in the repo
from indic_ocr import IndicOCR

parser = IndicOCR.from_pretrained(repo)

page = parser.parse("page.png")
print(page["markdown"])                     # reading-ordered Markdown

page also carries the per-block detail, which you can save as follows:

import json

with open("page.json", "w", encoding="utf-8") as f:
    json.dump(page, f, ensure_ascii=False, indent=2)

To run the two stages separately:

from indic_ocr import IndicDocLayout, IndicBlockOCR

layout = IndicDocLayout(f"{repo}/weights/layout").detect("page.png")
page = IndicBlockOCR(f"{repo}/weights/ocr").run("page.png", layout)

run() takes a layout object, a dict, or the path to a layout JSON file.


parser.parse("page.png") returns the page metadata and its blocks in reading order:

{
  "image": "sample1.png",
  "width": 800,
  "height": 1273,
  "blocks": [
    {"order": 0, "label": "Header", "type": "PageHeader",
     "bbox_xyxy": [345.6, 51.7, 437.1, 114.7], "conf": 0.6, "text": ""},
    {"order": 1, "label": "Page-number", "type": "PageNumber",
     "bbox_xyxy": [367.8, 78.9, 413.2, 107.4], "conf": 0.747, "text": "229"},
    {"order": 2, "label": "Paragraph", "type": "Text",
     "bbox_xyxy": [77.9, 121.3, 711.8, 199.4], "conf": 0.863,
     "text": "Thus we see that, if we can prove that twice the L.H.S. of (30) ..."}
  ]
}
fieldmeaning
orderreading-order rank, 0-based and gap-free
labelthe raw IndicDocLayout class (37-class taxonomy)
typecoarse pipeline category: Text, Table, Equation, Title, ...
bbox_xyxypixel box [x0, y0, x1, y1]
confdetection confidence
texttranscription; "" for blocks not sent to the recognizer

Note: Figures, charts, advertisements, running headers, and footers are not sent through the recognizer by default. They remain in the JSON with text: "", so you can see what was detected and where. Page numbers and other margin text such as folios are transcribed.

Machine-readable JSON Schema for each envelope, in schemas/:

filedescribes
layout_output.schema.jsonThe layout file: what IndicDocLayout writes and IndicBlockOCR reads. Blocks and reading order, before any text is read, so there is no text key at all.
parse_output.schema.jsonThe parsed page shown above. Every block now has text; "" means the block was detected but deliberately not sent to the recognizer.

A layout from your own detector must use a label from the 37-class taxonomy, or declare type explicitly. An unrecognised label is rejected rather than silently read as prose.

Tables come back as HTML by default. Choose the format when you construct the parser:

parser = IndicOCR.from_pretrained(repo)                          # HTML (default)
parser = IndicOCR.from_pretrained(repo, table_format="markdown") # Markdown

OmniDocBench 1.6 (english subset)Overall↑TextEdit↓FormulaCDM↑TableTEDS↑TableTEDS-S↑Read OrderEdit↓
PaddleOCRVL-1.696.360.0398.5593.3796.330.09
Chandra OCR 293.110.0496.9386.0790.340.09
IndicOCR (ours)92.760.0497.5385.1090.580.11
GPT-5.6-sol92.460.0495.4285.8790.980.10
Gemini 3.1 Pro91.150.0695.5383.4688.770.13
Surya OCR 291.130.0495.6781.6186.370.10
Sarvam Vision90.080.0497.6276.8282.010.10
Gemma-4-31B86.710.0989.4879.7985.190.19
Nemotron Parse 279.120.15978.9474.3281.090.29
OlmoOCRBench (english subset)Overall↑arxiv_math↑baseline↑headers_footers↑long_tiny_text↑multi_column↑old_scans↑old_scans_math↑table_tests↑
Chandra OCR 285.986.799.891.593.784.75188.292.2
Sarvam Vision84.386.599.696.39182.249.88188.3
Gemini 3.1 Pro82.690.59982.988.581.64784.387.3
IndicOCR (ours)82.283.299.492.989.87648.377.790
Surya OCR 281.482.599.892.979.985.142.884.384.2
Gemma-4-31B80.47999.492.989.880.545.873.882.2
PaddleOCRVL-1.678.785.198.496.275.383.93968.383
GPT-5.6-sol7879.393.995.487.877.443.764.682.2
Nemotron Parse 268.26496.79079.672.831.928.681.8

Word-level accuracy, reported as 100 x (1 - WER).

LanguageSarvam VisionIndicOCR (ours)Gemini 3.1 ProSurya OCR 2Gemma-4-31BChandra OCR 2
Overall86.686.280.467.966.364.2
Assamese89.590.290.786.470.673.5
Bodo91.086.591.055.668.146.6
Bengali91.691.492.581.183.979.2
Dogri85.881.783.760.564.455.8
English96.697.097.793.897.291.3
Gujarati91.691.792.879.681.673.0
Hindi95.796.096.390.393.789.3
Konkani93.693.793.590.576.985.5
Kannada88.888.089.875.768.369.6
Kashmiri43.352.238.123.419.917.6
Malayalam90.689.990.676.572.068.3
Manipuri81.983.80.80.10.10.0
Marathi93.993.594.584.389.183.1
Maithili86.783.086.767.676.366.1
Nepali92.591.593.787.687.282.1
Odia77.575.784.864.538.762.6
Punjabi92.293.293.586.375.184.1
Sanskrit82.076.283.757.860.855.8
Sindhi89.287.186.380.574.571.4
Santhali71.974.70.20.10.20.0
Tamil94.291.394.479.983.379.0
Telugu84.382.385.563.166.659.6
Urdu87.185.988.076.476.674.4

Word-level accuracy, reported as 100 x (1 - WER).

LanguageGemini 3.1 ProIndicOCR (ours)Sarvam VisionGemma-4-31BChandra OCR 2Surya OCR 2
Overall72.066.755.433.924.723.0
Assamese71.666.147.824.18.917.8
Bengali74.871.358.335.16.610.0
English84.480.777.778.578.272.7
Gujarati60.055.939.223.711.811.5
Hindi83.177.672.370.754.642.7
Kannada73.869.657.717.211.513.2
Malayalam63.960.545.616.015.711.8
Marathi79.070.261.856.535.428.8
Odia66.768.240.615.519.419.9
Punjabi70.169.454.811.711.515.7
Tamil80.576.860.533.418.816.8
Telugu72.053.559.132.020.814.6
Urdu54.446.444.425.627.622.6

Reading order remains a challenge for complex, multi-column layouts. Handwriting recognition is also still being improved, particularly across different writing styles and writing characteristics.

We are also extending handwriting support to additional Indic languages.


We benchmarked our end-to-end pipeline with vLLM on a single NVIDIA H100 80GB GPU using a diverse mix of documents (math, tables, handwritten notes, research papers, multi-column, and even complex newspaper layouts) from the OmniDocBench V1.6 benchmark set (official english subset).

ConcurrencyPages / sOutput tokens / sMedian page (ms)p95 page (ms)
325.136,5943,29519,243
646.267,9354,81334,196
1286.347,7369,33772,970
2566.277,70028,18881,229

Released under Indic Open Model License v1.0.

The release incorporates components distributed under Apache 2.0, including PP-DocLayoutV3, Qwen3.5, and the Sarvam-30B tokenizer. See the repository license and the corresponding upstream licenses for the applicable terms and attribution requirements.


If you find the license difficult to understand, here is a plain-language guide to the Indic Open Model License.

Broad, no-cost access for research, government, nonprofit, and commercial use — with a few conditions attached.

This deed is a human-readable summary of the license, not a substitute for it. Where the two disagree, the full Indic Open Model License governs.


You're free to

No cost, no royalty, worldwide — for research, government, nonprofit, and commercial use, at any scale.

  • ✅ Run it — for inference, in a product, in research, however you like.
  • ✅ Change it — fine-tune, distill, quantize, merge, or otherwise build on it.
  • ✅ Self-host it — power your own product or service with it, commercial or not.
  • ✅ Share it — pass on copies of the model or your own version of it.

As long as you

Five conditions cover almost everything. The rest of the license is these, spelled out in legal detail.

1. Give credit

Wherever you ship the model or a derivative to anyone else, say where it came from — and don't strip out existing notices.

"Built with [Model Name] from Bodhan AI / AI4Bharat."

2. Pass it on the same way

If you give your fine-tuned or derived version to anyone else — hand it over, or run it as a service for them — it carries this exact license. You can't relicense it on different terms.

3. Ask before hosting it for others

Self-hosting is free. But if you're going to run it as an API or hosted service that other people or companies call directly, that needs Bodhan AI's written sign-off first — unless you're a nonprofit, government, or academic user, or you publicly release an equally capable open version within 90 days.

4. Don't use it to cause harm

No exceptions — not even for nonprofit or research use. That means no:

  • child sexual abuse material, or content that sexualizes minors
  • weapons development, including chemical, biological, radiological, or nuclear
  • mass surveillance or social-scoring systems
  • disinformation campaigns, including election manipulation
  • automated decisions that affect someone's legal rights without human oversight
  • deepfakes or voice clones of real people without their consent
  • robocalls, auto-dialers, or voice-phishing scams
  • AI companion products designed to simulate romance or foster emotional dependency

5. Talk to us if your product gets huge

If your own product built on this — not through hosting it for others, that's covered above — crosses either threshold, you'll need a separate commercial license. Doesn't apply to nonprofit, government, or academic users.

Threshold
500M+monthly active users
or
$250M+annual revenue

@misc{indicocr2026,
  title  = {IndicOCR: Multilingual Document Parsing for English and 22 Indian Languages},
  author = {Bodhan AI and AI4Bharat},
  year   = {2026},
  url    = {https://bodhan.ai/research/blogs/indic-ocr}
}

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм

Нельзя запустить

Доступ к модели ограничен автором; у платформы нет доступа к весам.

Ревизия весов
cd50d30

0 моделей