可以本地部署的最强OCR大模型:OlmOCR

allenai/olmocr是由Allen人工智能研究所(AI2)开发的一个开源工具包,旨在高效地将PDF和其他文档转换为结构化的纯文本,同时保持自然阅读顺序。

核心技术

1、使用名为olmOCR-7B-0225-preview的视觉语音模型(VLM),这是基于Qwen2-VL-7B-Instruct训练而成的。

2、该模型经过约25万页多样化PDF内容(包括扫描和基于文本的)的训练,这些内容使用GPT-4o标注并作为olmOCR-mix-0225数据集发布。

主要功能

1、高效批量处理:使用SGLang优化推理管道,能以极低的成本处理大量文档。

2、文档锚定:提取每页中显著元素(如文本块和图像)的坐标,并将其与从PDF二进制文件中提取的原始文本一起注入。

3、支持本地和集群使用:可在单机GPU上运行,也支持使用AWS S3进行多节点并行处理。

性能和优势

1、准确性高:在人工评估中,olmOCR在各种PDF提取技术的ELO评级中排名最高。

2、提升下游任务:使用olmOCR提取的文本训练语言模型,在多个AI基准任务中平均提高了1.3个百分点的准确率。

使用方法

import torch
import base64
import urllib.request

from io import BytesIO
from PIL import Image
from transformers import AutoProcessor, Qwen2VLForConditionalGeneration

from olmocr.data.renderpdf import render_pdf_to_base64png
from olmocr.prompts import build_finetuning_prompt
from olmocr.prompts.anchor import get_anchor_text

# Initialize the model

model = Qwen2VLForConditionalGeneration.from_pretrained(“allenai/olmOCR-7B-0225-preview”, torch_dtype=torch.bfloat16).eval()
processor = AutoProcessor.from_pretrained(“Qwen/Qwen2-VL-7B-Instruct”)
device = torch.device(“cuda” if torch.cuda.is_available() else “cpu”)
model.to(device)

# Grab a sample PDF
urllib.request.urlretrieve(“https://molmo.allenai.org/paper.pdf”, “./paper.pdf”)

# Render page 1 to an image
image_base64 = render_pdf_to_base64png(“./paper.pdf”, 1, target_longest_image_dim=1024)

# Build the prompt, using document metadata
anchor_text = get_anchor_text(“./paper.pdf”, 1, pdf_engine=“pdfreport”, target_length=4000)
prompt = build_finetuning_prompt(anchor_text)

# Build the full prompt
messages = [
{
“role”: “user”,
“content”: [
{“type”: “text”, “text”: prompt},
{“type”: “image_url”, “image_url”: {“url”: f"data:image/png;base64,{image_base64}"}},
],
}
]

# Apply the chat template and processor
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
main_image = Image.open(BytesIO(base64.b64decode(image_base64)))

inputs = processor(
text=[text],
images=[main_image],
padding=True,
return_tensors=“pt”,
)
inputs = {key: value.to(device) for (key, value) in inputs.items()}

# Generate the output
output = model.generate(
**inputs,
temperature=0.8,
max_new_tokens=50,
num_return_sequences=1,
do_sample=True,
)

# Decode the output
prompt_length = inputs[“input_ids”].shape[1]
new_tokens = output[:, prompt_length:]
text_output = processor.tokenizer.batch_decode(
new_tokens, skip_special_tokens=True
)

print(text_output)
#[‘{“primary_language”:“en”,“is_rotation_valid”:true,“rotation_correction”:0,“is_table”:false,“is_diagram”:false,“natural_text”:"Molmo and PixMo:\nOpen Weights and Open Data\nfor State-of-the’]

识别效果

转自:可以本地部署的最强OCR大模型:OlmOCR-CSDN博客

### 部署大规模光学字符识别(OCR)模型olmOCR本地环境设置与配置指南 #### 1. 环境准备 为了成功部署olmOCR,在本地环境中需安装必要的依赖库和工具。这通常涉及Python及其相关包管理器pip,以及特定于项目的其他软件需求。 对于Linux系统而言,`atop`可以作为一个有效的性能监控工具来监视系统的资源使用情况[^2]。然而,针对olmOCR的具体部署,并不需要直接利用到此命令的功能特性;它主要用于日常运维中的性能调优场景下。 #### 2. 获取并解压源码或预训练模型文件 从官方渠道下载最新的olmOCR版本或者获取已有的预训练权重文件。确保按照发布说明完成所有步骤,包括但不限于验证校验值以确认数据完整性无误。 #### 3. 安装依赖项 依据README文档中给出的要求列表逐一安装所需的第三方库和服务端组件。这部分工作可能涉及到数据库连接、图像处理API以及其他辅助功能模块的选择与集成。 #### 4. 数据集准备 准备好用于测试和评估目的的数据集合。考虑到olmOCR是一个大型OCR解决方案,建议采用高质量且多样化的样本作为输入材料,以便更好地衡量其实际表现效果。 #### 5. 模型微调(可选) 如果希望进一步优化现有模型的表现,则可以根据具体应用场景调整超参数设定或是引入新的标注样本来重新训练部分网络层结构。 #### 6. 测试运行 执行一系列全面而细致的单元测试案例,确保整个流程顺畅运作并无明显错误发生。同时记录各项指标得分供后续分析参考之用。 ```bash # 假设项目根目录存在start.sh脚本启动服务 ./start.sh --config ./configs/local.yaml ``` 上述过程适用于大多数基于深度学习框架构建起来的文字检测与识别类应用。值得注意的是,由于不同开发者团队可能会有自己的编码习惯和技术栈偏好,因此具体的实现细节上会有所差异,请务必参照官方提供的最新指导手册来进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值