image-text-to-texttransformers

nanonets/Nanonets-OCR-s

huggingface.co/nanonets/Nanonets-OCR-s

1,595Likes
330,140Downloads
2025-06-20Updated
transformerssafetensorsqwen2_5_vlimage-text-to-textOCRpdf2markdownconversationalenbase_model:Qwen/Qwen2.5-VL-3B-Instructbase_model:finetune:Qwen/Qwen2.5-VL-3B-Instructeval-resultstext-generation-inferenceendpoints_compatibleregion:us

Model card

Nanonets-OCR-s by Nanonets is a powerful, state-of-the-art image-to-markdown OCR model that goes far beyond traditional text extraction. It transforms documents into structured markdown with intelligent content recognition and semantic tagging, making it ideal for downstream processing by Large Language Models (LLMs).

Nanonets-OCR-s is packed with features designed to handle complex documents with ease:

📢 Read the full announcement | 🤗 Hugging Face Space Demo

Usage

### Using transformers ```python from PIL import Image from transformers import AutoTokenizer, AutoProcessor, AutoModelForImageTextToText

model_path = "nanonets/Nanonets-OCR-s"

model = AutoModelForImageTextToText.from_pretrained( model_path, torch_dtype="auto", device_map="auto", attn_implementation="flash_attention_2" ) model.eval()

tokenizer = AutoTokenizer.from_pretrained(model_path) processor = AutoProcessor.from_pretrained(model_path)

def ocr_page_with_nanonets_s(image_path, model, processor, max_new_tokens=4096): prompt = """Extract the text from the above document as if you were reading it naturally. Return the tables in html format. Return the equations in LaTeX representation. If there is an image in the document and image caption is not present, add a small description of the image inside the tag; otherwise, add the image caption inside . Watermarks should be wrapped in brackets. Ex: OFFICIAL COPY. Page numbers should be wrapped in brackets. Ex: 14 or 9/22. Prefer using ☐ and ☑ for check boxes.""" image = Image.open(image_path) messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": [ {"type": "image", "image": f"file://{image_path}"}, {"type": "text", "text": prompt}, ]}, ] text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) inputs = processor(text=[text], images=[image], padding=True, return_tensors="pt") inputs = inputs.to(model.device) output_ids = model.generate(**inputs, max_new_tokens=max_new_tokens, do_sample=False) generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(inputs.input_ids, output_ids)] output_text = processor.batch_decode(generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True) return output_text[0]

image_path = "/path/to/your/document.jpg" result = ocr_page_with_nanonets_s(image_path, model, processor, max_new_tokens=15000) print(result) ```

Using vLLM

1. Start the vLLM server. ``bash vllm serve nanonets/Nanonets-OCR-s ` 2. Predict with the model ``python from openai import OpenAI import base64

client = OpenAI(api_key="123", base_url="http://localhost:8000/v1")

model = "nanonets/Nanonets-OCR-s"

def encode_image(image_path): with open(image_path, "rb") as image_file: return base64.b64encode(image_file.read()).decode("utf-8")

def ocr_page_with_nanonets_s(img_base64): response = client.chat.completions.create( model=model, messages=[ { "role": "user", "content": [ { "type": "image_url", "image_url": {"url": f"data:image/png;base64,{img_base64}"}, }, { "type": "text", "text": "Extract the text from the above document as if you were reading it naturally. Return the tables in html format. Return the equations in LaTeX representation. If there is an image in the document and image caption is not present, add a small description of the image inside the tag; otherwise, add the image caption inside . Watermarks should be wrapped in brackets. Ex: OFFICIAL COPY. Page numbers should be wrapped in brackets. Ex: 14 or 9/22. Prefer using ☐ and ☑ for check boxes.", }, ], } ], temperature=0.0, max_tokens=15000 ) return response.choices[0].message.content

test_img_path = "/path/to/your/document.jpg" img_base64 = encode_image(test_img_path) print(ocr_page_with_nanonets_s(img_base64)) ```

Using docext

``python pip install docext python -m docext.app.app --model_name hosted_vllm/nanonets/Nanonets-OCR-s `` Checkout GitHub for more details.

BibTex

`` @misc{Nanonets-OCR-S, title={Nanonets-OCR-S: A model for transforming documents into structured markdown with intelligent content recognition and semantic tagging}, author={Souvik Mandal and Ashish Talewar and Paras Ahuja and Prathamesh Juvatkar}, year={2025}, } ``

Mirrored from the Hugging Face Hub and served from the Conceptio Open Knowledge Archive. Read the original card at https://huggingface.co/nanonets/Nanonets-OCR-s.