Nanonets-OCR-s:文档处理的新利器

在数字化时代,文档处理技术不断进步,从简单的文字识别到如今的智能化内容提取,工具的功能越来越强大。Nanonets-OCR-s 作为一款先进的图像到 Markdown 的光学字符识别(OCR)模型,不仅能提取文本,还能将杂乱的文档转化为结构清晰的 Markdown 格式。这款工具通过智能识别和语义标记,让文档内容更易于被大型语言模型(LLMs)处理和理解。本文将带您深入了解 Nanonets-OCR-s 的核心功能、使用方法以及它在实际工作中的价值,适合有一定技术背景的读者,比如专科及以上的毕业生。

什么是 Nanonets-OCR-s?

Nanonets-OCR-s 是一款突破传统 OCR 限制的工具。普通的 OCR 技术主要聚焦于从图像中提取纯文本,而 Nanonets-OCR-s 更进一步,它能识别文档中的多种元素,比如数学公式、图片、签名、水印、复选框和表格,并将它们整理成结构化的 Markdown 格式。这种能力让它在处理复杂文档时表现出色,比如学术论文、法律文件或商业报表。它的输出不仅便于人类阅读,还为下游的自动化处理提供了坚实基础。

想象一下,您有一份扫描版的合同,里面有手写签名、表格数据和公司水印。Nanonets-OCR-s 不仅能读出文字,还能把签名单独标记出来,将表格转为可编辑的格式,甚至提取水印内容。这种智能化的处理方式,正是它区别于传统工具的地方。

核心功能详解

Nanonets-OCR-s 的强大之处在于它能处理文档中的各种复杂元素。以下是它的主要功能,以及它们在实际场景中的作用。

1. LaTeX 公式识别

对于包含数学公式的文档,比如学术论文或技术报告,Nanonets-OCR-s 能自动将公式转换为 LaTeX 语法。它还能区分行内公式(用 $...$ 标记)和展示公式(用 $$...$$ 标记)。比如,一张手写笔记中的公式 E = mc^2,会被转化为 $E = mc^2$;而更复杂的多行公式,则会以 $$...$$ 的形式完整呈现。这种精确的识别和格式化,让数学内容在数字文档中也能保持专业性和可读性。

2. 智能图像描述

文档中常包含图片,比如图表、流程图或公司徽标。Nanonets-OCR-s 能识别这些图像,并用 <img> 标签生成描述。如果图片没有现成的标题,它会根据内容自动添加简短说明。比如,一张柱状图可能会被标记为 <img>柱状图展示年度销售额变化</img>。这种功能不仅保留了图像的信息,还让后续的语言模型能更好地理解文档的整体内容。

3. 签名检测与隔离

在法律文件或合同中,签名是关键信息。Nanonets-OCR-s 能准确检测签名并将其与其他文本分开,输出为 <signature> 标签内的内容。比如,一份合同末尾的手写签名会被提取为 <signature>张三</signature>。这对于需要验证身份或自动化处理签名相关文档的场景非常有用。

4. 水印提取

水印通常用来标记文档的来源或状态,比如“机密”或“副本”。Nanonets-OCR-s 可以识别并提取水印文本,放入 <watermark> 标签中。例如,一份标有“官方副本”的文件,水印会被转为 <watermark>OFFICIAL COPY</watermark>。这为追踪文档背景或确认其真实性提供了便利。

5. 智能复选框处理

表单中的复选框和单选按钮常见于调查表或申请表。Nanonets-OCR-s 能将这些元素转为标准化的 Unicode 符号:未选中的用 ,选中的用 ,交叉标记用 。比如,一个选择题答案如果是勾选状态,会被记录为 ☑ 是。这种一致的表示方式,让表单数据的数字化处理更加可靠。

6. 复杂表格提取

表格是文档中常见的结构化数据形式,但传统 OCR 往往难以准确提取。Nanonets-OCR-s 能处理复杂的表格,并将其转换为 Markdown 和 HTML 两种格式。比如,一张包含多行多列的财务报表,会被整理成清晰的表格结构,既能在 Markdown 中直观显示,也能以 HTML 格式用于网页展示。这种能力对于需要分析表格数据的用户来说尤为重要。

如何使用 Nanonets-OCR-s?

Nanonets-OCR-s 提供了多种使用方式,适合不同技术背景的用户。以下是三种主要方法的具体步骤,包含代码示例,帮助您快速上手。

使用 Transformers 库

Transformers 是一个广泛使用的机器学习库,Nanonets-OCR-s 可以通过它来处理文档。以下是实现步骤:

  1. 安装依赖
    确保您的环境中有 Python,然后运行以下命令安装所需库:

    pip install transformers torch pillow
    
  2. 加载模型
    使用 Python 脚本加载 Nanonets-OCR-s 模型和相关处理器:

    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)
    
  3. 定义 OCR 函数
    创建一个函数来处理图像并提取内容:

    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 <img></img> tag; otherwise, add the image caption inside <img></img>. Watermarks should be wrapped in brackets. Ex: <watermark>OFFICIAL COPY</watermark>. Page numbers should be wrapped in brackets. Ex: <page_number>14</page_number> or <page_number>9/22</page_number>. 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]
    
  4. 运行 OCR
    指定图像路径并调用函数:

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

这段代码会将指定文档的内容提取为 Markdown 格式,包含所有智能标记。

使用 vLLM

vLLM 是一个高效的推理框架,适合需要快速处理的场景。以下是使用步骤:

  1. 启动 vLLM 服务器
    在终端运行以下命令启动服务:

    vllm serve nanonets/Nanonets-OCR-s
    
  2. 编写预测代码
    使用 Python 和 OpenAI 客户端与服务器交互:

    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 <img></img> tag; otherwise, add the image caption inside <img></img>. Watermarks should be wrapped in brackets. Ex: <watermark>OFFICIAL COPY</watermark>. Page numbers should be wrapped in brackets. Ex: <page_number>14</page_number> or <page_number>9/22</page_number>. 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))
    

这种方式适合需要高性能推理的用户,代码运行后会返回结构化的提取结果。

使用 docext

docext 是一个便捷的工具包,简化了模型的使用流程。以下是步骤:

  1. 安装 docext
    在终端运行:

    pip install docext
    
  2. 启动应用
    执行以下命令运行应用程序:

    python -m docext.app.app --model_name hosted_vllm/nanonets/Nanonets-OCR-s
    

想了解更多细节,可以访问 GitHub 页面。这种方式适合希望快速测试模型的用户。

为什么选择 Nanonets-OCR-s?

Nanonets-OCR-s 的优势在于它的多功能性和智能化。无论是需要处理学术文档中的公式,还是商业文件中的签名和表格,它都能提供精准的提取结果。它的 Markdown 输出格式不仅直观,还为后续的自动化任务(如数据分析或内容生成)打下了基础。

举个例子,假设您是一名研究人员,手头有一堆扫描版的论文需要整理。使用 Nanonets-OCR-s,您可以快速将公式转为 LaTeX、图表转为描述文字,省去大量手动录入的时间。如果您是企业员工,处理合同或报表时,它能帮您提取关键信息并保持格式一致,提高工作效率。

引用 Nanonets-OCR-s

如果您在项目或研究中使用了这款工具,可以用以下 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},
}

这不仅是对作者工作的尊重,也方便他人查阅原始资料。

探索更多:Nanonets-OCR-s 的应用空间

文档中提到有一个使用 Nanonets-OCR-s 的“space”,这可能是一个在线演示或应用平台。虽然具体细节未提供,但它很可能是一个让用户测试模型功能的地方。如果您对这款工具感兴趣,不妨寻找相关资源,亲手体验它的能力。

总结

Nanonets-OCR-s 是一款功能强大的文档处理工具,它将 OCR 技术提升到了新的高度。通过智能识别数学公式、图像、签名、水印、复选框和表格,它能将复杂的文档转化为结构化的 Markdown 格式,为用户节省时间并提升效率。不论您是需要处理学术资料、法律文件还是商业报表,这款工具都能成为您的得力助手。

通过本文的介绍,您应该已经掌握了 Nanonets-OCR-s 的核心功能和使用方法。希望它能在您的文档处理工作中发挥作用,让繁琐的任务变得更简单、更智能。

Nanonets-OCR-s:文档处理的新利器

在数字化时代,文档处理技术不断进步,从简单的文字识别到如今的智能化内容提取,工具的功能越来越强大。Nanonets-OCR-s 作为一款先进的图像到 Markdown 的光学字符识别(OCR)模型,不仅能提取文本,还能将杂乱的文档转化为结构清晰的 Markdown 格式。这款工具通过智能识别和语义标记,让文档内容更易于被大型语言模型(LLMs)处理和理解。本文将带您深入了解 Nanonets-OCR-s 的核心功能、使用方法以及它在实际工作中的价值,适合有一定技术背景的读者,比如专科及以上的毕业生。

什么是 Nanonets-OCR-s?

Nanonets-OCR-s 是一款突破传统 OCR 限制的工具。普通的 OCR 技术主要聚焦于从图像中提取纯文本,而 Nanonets-OCR-s 更进一步,它能识别文档中的多种元素,比如数学公式、图片、签名、水印、复选框和表格,并将它们整理成结构化的 Markdown 格式。这种能力让它在处理复杂文档时表现出色,比如学术论文、法律文件或商业报表。它的输出不仅便于人类阅读,还为下游的自动化处理提供了坚实基础。

想象一下,您有一份扫描版的合同,里面有手写签名、表格数据和公司水印。Nanonets-OCR-s 不仅能读出文字,还能把签名单独标记出来,将表格转为可编辑的格式,甚至提取水印内容。这种智能化的处理方式,正是它区别于传统工具的地方。

核心功能详解

Nanonets-OCR-s 的强大之处在于它能处理文档中的各种复杂元素。以下是它的主要功能,以及它们在实际场景中的作用。

1. LaTeX 公式识别

对于包含数学公式的文档,比如学术论文或技术报告,Nanonets-OCR-s 能自动将公式转换为 LaTeX 语法。它还能区分行内公式(用 $...$ 标记)和展示公式(用 $$...$$ 标记)。比如,一张手写笔记中的公式 E = mc^2,会被转化为 $E = mc^2$;而更复杂的多行公式,则会以 $$...$$ 的形式完整呈现。这种精确的识别和格式化,让数学内容在数字文档中也能保持专业性和可读性。

2. 智能图像描述

文档中常包含图片,比如图表、流程图或公司徽标。Nanonets-OCR-s 能识别这些图像,并用 <img> 标签生成描述。如果图片没有现成的标题,它会根据内容自动添加简短说明。比如,一张柱状图可能会被标记为 <img>柱状图展示年度销售额变化</img>。这种功能不仅保留了图像的信息,还让后续的语言模型能更好地理解文档的整体内容。

3. 签名检测与隔离

在法律文件或合同中,签名是关键信息。Nanonets-OCR-s 能准确检测签名并将其与其他文本分开,输出为 <signature> 标签内的内容。比如,一份合同末尾的手写签名会被提取为 <signature>张三</signature>。这对于需要验证身份或自动化处理签名相关文档的场景非常有用。

4. 水印提取

水印通常用来标记文档的来源或状态,比如“机密”或“副本”。Nanonets-OCR-s 可以识别并提取水印文本,放入 <watermark> 标签中。例如,一份标有“官方副本”的文件,水印会被转为 <watermark>OFFICIAL COPY</watermark>。这为追踪文档背景或确认其真实性提供了便利。

5. 智能复选框处理

表单中的复选框和单选按钮常见于调查表或申请表。Nanonets-OCR-s 能将这些元素转为标准化的 Unicode 符号:未选中的用 ,选中的用 ,交叉标记用 。比如,一个选择题答案如果是勾选状态,会被记录为 ☑ 是。这种一致的表示方式,让表单数据的数字化处理更加可靠。

6. 复杂表格提取

表格是文档中常见的结构化数据形式,但传统 OCR 往往难以准确提取。Nanonets-OCR-s 能处理复杂的表格,并将其转换为 Markdown 和 HTML 两种格式。比如,一张包含多行多列的财务报表,会被整理成清晰的表格结构,既能在 Markdown 中直观显示,也能以 HTML 格式用于网页展示。这种能力对于需要分析表格数据的用户来说尤为重要。

如何使用 Nanonets-OCR-s?

Nanonets-OCR-s 提供了多种使用方式,适合不同技术背景的用户。以下是三种主要方法的具体步骤,包含代码示例,帮助您快速上手。

使用 Transformers 库

Transformers 是一个广泛使用的机器学习库,Nanonets-OCR-s 可以通过它来处理文档。以下是实现步骤:

  1. 安装依赖
    确保您的环境中有 Python,然后运行以下命令安装所需库:

    pip install transformers torch pillow
    
  2. 加载模型
    使用 Python 脚本加载 Nanonets-OCR-s 模型和相关处理器:

    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)
    
  3. 定义 OCR 函数
    创建一个函数来处理图像并提取内容:

    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 <img></img> tag; otherwise, add the image caption inside <img></img>. Watermarks should be wrapped in brackets. Ex: <watermark>OFFICIAL COPY</watermark>. Page numbers should be wrapped in brackets. Ex: <page_number>14</page_number> or <page_number>9/22</page_number>. 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]
    
  4. 运行 OCR
    指定图像路径并调用函数:

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

这段代码会将指定文档的内容提取为 Markdown 格式,包含所有智能标记。

使用 vLLM

vLLM 是一个高效的推理框架,适合需要快速处理的场景。以下是使用步骤:

  1. 启动 vLLM 服务器
    在终端运行以下命令启动服务:

    vllm serve nanonets/Nanonets-OCR-s
    
  2. 编写预测代码
    使用 Python 和 OpenAI 客户端与服务器交互:

    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 <img></img> tag; otherwise, add the image caption inside <img></img>. Watermarks should be wrapped in brackets. Ex: <watermark>OFFICIAL COPY</watermark>. Page numbers should be wrapped in brackets. Ex: <page_number>14</page_number> or <page_number>9/22</page_number>. 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))
    

这种方式适合需要高性能推理的用户,代码运行后会返回结构化的提取结果。

使用 docext

docext 是一个便捷的工具包,简化了模型的使用流程。以下是步骤:

  1. 安装 docext
    在终端运行:

    pip install docext
    
  2. 启动应用
    执行以下命令运行应用程序:

    python -m docext.app.app --model_name hosted_vllm/nanonets/Nanonets-OCR-s
    

想了解更多细节,可以访问 GitHub 页面。这种方式适合希望快速测试模型的用户。

为什么选择 Nanonets-OCR-s?

Nanonets-OCR-s 的优势在于它的多功能性和智能化。无论是需要处理学术文档中的公式,还是商业文件中的签名和表格,它都能提供精准的提取结果。它的 Markdown 输出格式不仅直观,还为后续的自动化任务(如数据分析或内容生成)打下了基础。

举个例子,假设您是一名研究人员,手头有一堆扫描版的论文需要整理。使用 Nanonets-OCR-s,您可以快速将公式转为 LaTeX、图表转为描述文字,省去大量手动录入的时间。如果您是企业员工,处理合同或报表时,它能帮您提取关键信息并保持格式一致,提高工作效率。

引用 Nanonets-OCR-s

如果您在项目或研究中使用了这款工具,可以用以下 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},
}

这不仅是对作者工作的尊重,也方便他人查阅原始资料。

探索更多:Nanonets-OCR-s 的应用空间

文档中提到有一个使用 Nanonets-OCR-s 的“space”,这可能是一个在线演示或应用平台。虽然具体细节未提供,但它很可能是一个让用户测试模型功能的地方。如果您对这款工具感兴趣,不妨寻找相关资源,亲手体验它的能力。

总结

Nanonets-OCR-s 是一款功能强大的文档处理工具,它将 OCR 技术提升到了新的高度。通过智能识别数学公式、图像、签名、水印、复选框和表格,它能将复杂的文档转化为结构化的 Markdown 格式,为用户节省时间并提升效率。不论您是需要处理学术资料、法律文件还是商业报表,这款工具都能成为您的得力助手。

通过本文的介绍,您应该已经掌握了 Nanonets-OCR-s 的核心功能和使用方法。希望它能在您的文档处理工作中发挥作用,让繁琐的任务变得更简单、更智能。