Nanonets-OCR-s:从学术论文到法律合同,智能识别公式、签名、表格与图像

在数字化时代,文档处理和信息提取的需求日益增长。传统的OCR技术虽然能够识别文档中的文本,但在处理复杂文档时往往存在局限性。Nanonets-OCR-s 作为一款先进的图像到 Markdown 的 OCR 模型,不仅能够提取文本,还能将文档转换为结构化的 Markdown 格式,并具备多种智能功能

一、Nanonets-OCR-s 概述

Nanonets-OCR-s 是一款由 Nanonets 开发的先进图像到 Markdown 的 OCR 模型,它不仅能够从图像中提取文本,还能将文档转换为结构化的 Markdown 格式。该模型通过智能内容识别和语义标记,为大型语言模型(LLMs)的下游处理提供了理想的数据格式。Nanonets-OCR-s 在处理复杂文档时表现出色,具备多种智能功能,使其在文档处理领域具有广泛的应用前景。

模型特点:

1. 智能内容识别Nanonets-OCR-s 能够识别文档中的多种内容类型,并将其转换为相应的 Markdown 格式。

2. 语义标记模型不仅提取文本,还能对内容进行语义标记,使其更适合后续处理。

3. 多格式支持支持多种文档格式,包括 LaTeX 方程、HTML 表格和 Markdown 格式。

4. 开源与可扩展性作为开源模型,Nanonets-OCR-s 为开发者提供了广泛的定制和扩展可能性。

Nanonets-OCR-s 广泛应用于需要从图像中提取结构化数据的场景,如文档处理、数据分析、教育辅导等。在这些领域,模型能够快速准确地提取和整理关键信息,为用户提供清晰的结构化答案。


二、核心功能

(一)LaTeX 方程识别

Nanonets-OCR-s 能够自动将数学方程和公式转换为正确格式的 LaTeX 语法。它能够区分行内方程(`$…$`)和显示方程(`$$…$$`),确保数学内容的准确性和可读性。这一功能对于处理学术论文、技术文档和教育材料尤为重要,因为它能够将复杂的数学内容转换为易于理解和处理的格式。


(二)智能图像描述

模型能够描述文档中的图像,并使用结构化的`<img>` 标签进行标记。它能够识别各种类型的图像,包括标志、图表、图形等,并详细描述其内容、风格和上下文。如果文档中没有图像标题,模型会添加一个简短的图像描述;如果有标题,则会将其包含在 `<img>` 标签中。这一功能使得图像内容能够被大型语言模型理解和处理,从而扩展了文档处理的应用范围。


(三)签名检测与隔离

Nanonets-OCR-s 能够识别并隔离文档中的签名,并将其输出在 `<signature>` 标签内。这一功能对于处理法律和商业文档至关重要,因为它能够准确地识别和标记签名部分,确保文档的完整性和合法性。


(四)水印提取

模型能够检测并提取文档中的水印文本,并将其放置在`<watermark>` 标签内。这一功能有助于识别和处理文档中的水印内容,从而在文档处理过程中保持信息的完整性。

(五)智能复选框处理

Nanonets-OCR-s 能够将文档中的复选框和单选按钮转换为标准化的 Unicode 符号(``````),确保一致性和可靠性。这一功能对于处理表格和表单文档非常有用,因为它能够将复杂的表单元素转换为易于处理的格式。


(六)复杂表格提取

模型能够准确地从文档中提取复杂表格,并将其转换为Markdown 和 HTML 表格格式。这一功能使得表格内容能够被大型语言模型更好地理解和处理,从而在数据分析和报告生成中发挥重要作用。


三、使用方法

Nanonets-OCR-s 的使用相对简单,以下是基于 Python 的几种使用方法的介绍:

(一)使用transformers

以下是使用transformers 库调用 Nanonets-OCR-s 的代码示例:

from PIL import Imagefrom modelscope 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 <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]
image_path = "/path/to/your/document.jpg"result = ocr_page_with_nanonets_s(image_path, model, processor, max_new_tokens=15000)print(result)

(二)使用vLLM

以下是使用vLLM 调用 Nanonets-OCR-s 的代码示例:

1. 启动 vLLM 服务器:

VLLM_USE_MODELSCOPE=true vllm serve nanonets/Nanonets-OCR-s

2. 使用模型进行预测:

from openai import OpenAIimport 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))

四、实际应用案例

(一)学术研究

在学术研究领域,Nanonets-OCR-s 能够将学术论文中的文本、方程和图表转换为结构化的 Markdown 格式,便于研究人员进行进一步的分析和处理。例如,模型可以将复杂的数学方程转换为 LaTeX 格式,使得研究人员能够更方便地进行公式编辑和验证。


(二)文档处理

在文档处理领域,Nanonets-OCR-s 能够快速准确地提取文档中的关键信息,并将其转换为结构化的 Markdown 格式。例如,模型可以将文档中的表格转换为 HTML 表格格式,便于用户进行数据分析和报告生成。


(三)教育辅导

在教育领域,Nanonets-OCR-s 可以用于辅助教学和学习。例如,模型可以将数学问题的解题过程转换为结构化的 Markdown 格式,帮助学生更好地理解和学习。此外,模型还可以生成结构化的教学材料,为教师提供教学支持。


五、结语

Nanonets-OCR-s 作为一款先进的图像到 Markdown 的 OCR 模型,在文档处理领域表现出色。通过智能内容识别和语义标记,模型能够将复杂的文档转换为结构化的 Markdown 格式,为大型语言模型的下游处理提供了理想的数据格式。

项目官网:https://nanonets.com/research/nanonets-ocr-s/

HuggingFace模型库:https://huggingface.co/nanonets/Nanonets-OCR-s

(文:小兵的AI视界)

发表评论