前言
前阵子看到paddle发布SOTA的OCR模型,预览效果很nb,但看很少人去尝试使用。刚好公司有一些书籍类型的pdf(含公式,图片,表格等),内容双栏显示。使用场景够复杂了吧,也是日常会遇到的情况。于是就开始折腾部署PaddleOCR-VL模型。
配置
- RTX6000(46G显存)
- Windows11(配置wsl,Ubuntu-22.04)
- python==3.12
- 确保wsl内的CUDA 版本必须大于或等于 12.6(nvidia-smi查看)
开始操作
所有流程都在wsl中操作,包括python虚拟环境创建包安装等。我使用非Docker的方式安装
1.创建虚拟环境conda create -n paddleocr python==3.12
2.安装paddle包
# 以下命令安装 CUDA 12.6 版本的 PaddlePaddle,对于其他 CUDA 版本以及 CPU 版本,请参考 https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/develop/install/pip/linux-pip.html
python -m pip install paddlepaddle-gpu==3.2.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/连续使用以下命令即可
python -m pip install -U "paddleocr[doc-parser]"python -m pip install https://paddle-whl.bj.bcebos.com/nightly/cu126/safetensors/safetensors-0.6.2.dev0-cp38-abi3-linux_x86_64.whl3.python代码(单个pdf文档)
from pathlib import Path
from paddleocr import PaddleOCRVL
input_file = "./your_pdf_file.pdf"
output_path = Path("./output")
pipeline = PaddleOCRVL()
output = pipeline.predict(input=input_file)
markdown_list = []
markdown_images = []
for res in output:
md_info = res.markdown
markdown_list.append(md_info)
markdown_images.append(md_info.get("markdown_images", {}))
markdown_texts = pipeline.concatenate_markdown_pages(markdown_list)
mkd_file_path = output_path / f"{Path(input_file).stem}.md"
mkd_file_path.parent.mkdir(parents=True, exist_ok=True)
with open(mkd_file_path, "w", encoding="utf-8") as f:
f.write(markdown_texts)
for item in markdown_images:
if item:
for path, image in item.items():
file_path = output_path / path
file_path.parent.mkdir(parents=True, exist_ok=True)
image.save(file_path)4.完成到这部就可以运行了,第一次使用会下载模型比较慢。可能之前安装依赖中断过几次的原因,运行代码报错缺失系统依赖,错误日志丢ai解决即可。
我使用的文档是书中截取的三页内容,并非全书。消耗显存5.9G左右
效果

可以看到即使两栏内容,paddleocr也能很好的识别连接,公式使用latex,图表这里不知道为什么没识别成表格(官方演示效果)但还是完整保留下来了。有部分公式格式异常,导致公式没有正常渲染。后面写了脚本把二十多个pdf都进行ocr,占用显存44.5G。
结论
目前看效果已经非常好了,个人还没有做多模态检索,所以图片数据不是很重要,但确实已经很好的保留书籍的完整结构。这种文档结构识别再进行ocr的架构(类似于工作流)应该是未来OCR的方向了。
参考连接:使用教程 - PaddleOCR 文档
评论区(暂无评论)