如何使用开源项目 OlmOCR 本地部署实现 PDF 内容提取?
1. 为什么需要将 PDF 文件转换为 Markdown 或纯文本格式?
在处理与企业相关的 AI 项目时,经常需要将大量的 PDF 文件转换为 Markdown 格式或者 纯文本格式。这有助于更好地利用 PDF 内容,方便后续的 数据分析和 模型训练。然而,很多 开源项目在 PDF 内容提取方面的效果并不理想。
2. 什么是 OlmOCR?它有哪些优势?
2.1 OlmOCR 的定义
OlmOCR 是由 Allen 人工智能研究所开发的一个 开源工具包,专门用于 PDF 内容提取。
2.2 OlmOCR 的优势
- 强大的视觉模型:基于 Qwen2 VL 7B 模型进行训练,经过大约 25 万页多样化的 PDF 内容的训练,效果非常好。
- 优秀的文本提取和结构化输出能力:能够处理多种文档类型,包括 PDF、手写笔记、学术论文、多列布局等。
- 广泛的识别能力:能够识别 手写文字、数学方程式、表格数据等。
- 支持本地部署:非常适合 医疗、法律、学术等对 数据隐私要求高的行业。
3. OlmOCR 的效果如何?官方 Demo 测试
3.1 英文 PDF 文档测试
通过官方 Demo 上传 OlmOCR 的官方论文 PDF 文件进行测试,该 PDF 文件格式非常复杂,包含 文字、图像、表格等内容。测试结果表明,OlmOCR 能够快速且准确地提取 PDF 中的内容,并且保持了 PDF 文件原有的显示效果。
3.2 中文 PDF 文档测试
使用一篇关于 微调大模型 的 中文 PDF 文档 进行测试,该文档包含 中文、英文、表格等内容。测试结果表明,OlmOCR 同样能够高效地提取 中文 PDF 文档 中的内容,且能够准确识别并提取 表格 数据,并基本保持 PDF 文档中的格式。
4. 如何在本地部署 OlmOCR?详细步骤
4.1 准备工作
- 硬件环境:A6000 显卡的 Ubuntu 系统
- 软件环境:Miniconda
4.2 安装 Miniconda
执行以下命令安装 Miniconda:
bash
这里是安装 Miniconda 的命令,请自行查找对应 Ubuntu 版本的安装命令
例如:wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
4.3 创建并激活虚拟环境
-
创建虚拟环境,指定 Python 版本为 3.11:
bash
conda create -n olmocr python=3.11 -
激活虚拟环境:
bash
conda activate olmocr
4.4 更新 Conda
执行以下命令升级相关依赖:
bash
conda update –all
4.5 安装依赖
执行以下命令安装所需的依赖:
bash
pip install -r requirements.txt # 假设 requirements.txt 文件存在
如果出现提示,使用方向键选中 OK 并按 Enter 键同意,然后选中 yes 并按 Enter 键继续安装。
4.6 克隆 OlmOCR 项目
执行以下命令将 OlmOCR 项目克隆到本地:
bash
git clone https://github.com/allenai/olm-ocr.git
如果下载速度慢,可以考虑使用 镜像源。
4.7 进入 OlmOCR 项目目录
执行以下命令进入 OlmOCR 项目目录:
bash
cd olm-ocr
4.8 执行相关命令
bash
根据 OlmOCR 官方 GitHub 仓库中的 README.md 文件执行相关命令
例如:
pip install -e .
其他初始化命令
4.9 安装 Gradio
执行以下命令安装 Gradio,用于创建 用户界面:
bash
pip install gradio
5. 使用 Gradio 创建交互式 UI 界面
5.1 Gradio UI 代码
以下是一个简单的 Gradio UI 代码示例,用于 PDF 文件 的处理:
python
import gradio as gr
import os
添加 OlmOCR 相关的 import
from olmocr import OLMOCRProcessor
创建工作目录
WORK_DIR = “output”
os.makedirs(WORK_DIR, exist_ok=True)
处理 PDF 文件的函数
def process_pdf(pdf_file):
# 这里添加 OlmOCR 处理 PDF 文件的逻辑
# 返回提取的文本内容
# processor = OLMOCRProcessor()
# text = processor.process(pdf_file)
# return text
return “PDF 内容提取结果” # 占位符
创建 Gradio 界面
with gr.Blocks() as demo:
gr.Markdown(“# OlmOCR PDF 内容提取”)
with gr.Row():
pdf_input = gr.File(label="上传 PDF 文件")
process_button = gr.Button("处理 PDF 文档")
text_output = gr.Textbox(label="提取的文本")
html_output = gr.HTML(label="HTML 预览")
metadata_output = gr.JSON(label="元数据")
log_output = gr.Textbox(label="日志")
process_button.click(
process_pdf,
inputs=pdf_input,
outputs=text_output,
)
运行 Gradio 应用
if name “main“:
demo.launch()
5.2 部署 Gradio UI
-
使用 nano 命令创建一个文件,例如
app.py
:
bash
nano app.py -
将上述代码粘贴到
app.py
文件中,使用快捷键Ctrl + O
保存,然后按Enter
键确认,最后按Ctrl + X
退出。 -
执行以下命令运行脚本:
bash
python app.py - 在浏览器中打开显示的链接,即可看到 Gradio UI 界面。
5.3 使用 Gradio UI
- 在 Gradio UI 界面 中,点击上传文件区域,上传要处理的 PDF 文件。
- 点击 处理 PDF 文档 按钮。
- 处理后的内容会显示在 提取的文本 区域。
- 还可以查看 HTML 预览、元数据、日志 等信息。
6. 总结
通过以上步骤,我们可以在本地成功部署 OlmOCR,并使用 Gradio 创建一个交互方便的 UI 界面,从而实现对复杂 PDF 文档 的 内容提取。这对于需要处理大量 PDF 文件 且对 数据隐私 有要求的行业来说,是一个非常有价值的解决方案。
我认为:开源项目为我们提供了强大的工具,但更重要的是如何将这些工具应用到实际场景中,解决具体问题。OlmOCR 的本地部署不仅保护了数据隐私,也为各行各业的 AI 项目 提供了强大的支持。我们应当积极探索和利用这些开源技术,为社会创造更大的价值。,,,