PaddleOCR是开源项目,将PDF文档和图像转换为结构化、LLM友好的数据格式(JSON/Markdown)。源码地址:https://github.com/PaddlePaddle/PaddleOCR ,license为Apache-2.0,最新发布版本v3.5.0。
环境配置:PaddleOCR 3.x版本依赖于3.0及以上版本的飞桨框架
conda create --name paddleocr python=3.10 -y
conda activate paddleocr
pip install paddlepaddle==3.3.0 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/ # CPU
pip install paddlepaddle-gpu==3.3.1 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/ # CUDA 11.8
pip install paddleocr==3.5.0 # 仅需要通用OCR与文档图像预处理等默认能力
pip install "paddleocr[all]" # 需要文档解析、文档理解、文档翻译、关键信息抽取等全部可选能力
PaddleOCR 3.x核心特色能力:
1. PaddleOCR-VL:通过0.9B超紧凑视觉语言模型增强多语种文档解析,支持109种语言。
PaddleOCR-VL是一款先进、高效的文档解析模型,专为文档中的元素识别设计。PaddleOCR-VL整体由版面分析与VLM识别两个核心阶段组成。流程如下图所示:

2. PP-OCRv5:全场景文字识别,单模型支持五种文字类型(简中、繁中、英文、日文及拼音)。
通用OCR产线介绍(PP-OCRv5):用于解决文字识别任务,提取图片中的文字信息以文本形式输出。通用OCR产线中包含以下5个模块。每个模块均可独立进行训练和推理,并包含多个模型:
(1).文档图像方向分类模块(可选):主要是将文档图像的方向区分出来,并使用后处理将其矫正。预测结果含有四个类别,即0度,90度,180度和270度。模型:PP-LCNet_x1_0_doc_ori
(2).文本图像矫正模块(可选):主要目的是针对图像进行几何变换,以纠正图像中的文档扭曲、倾斜、透视变形等问题,以供后续的文本识别进行更加准确。模型:UVDoc
(3).文本行方向分类模块(可选):主要是将文本行的方向区分出来,并使用后处理将其矫正。文本行分类模型含有两个类别,即0度,180度。模型:PP-LCNet_x1_0_textline_ori
(4).文本检测模块:负责在图像中定位和标记出包含文本的区域。通常会输出文本区域的边界框(Bounding Boxes)。可基于新数据集进行重新训练。模型:PP-OCRv5_mobile_det、PP-OCRv5_server_det
(5).文本识别模块:负责从图像中的文本区域提取出文本信息。通常接收文本检测模块输出的文本区域的边界框(Bounding Boxes)作为输入,然后通过复杂的图像处理和深度学习算法,将图像中的文本转化为可编辑和可搜索的电子文本。可基于新数据集进行重新训练。模型:PP-OCRv5_mobile_rec、PP-OCRv5_server_rec
测试代码如下:
import colorama
import argparse
from pathlib import Path
import os
os.environ["PADDLE_PDX_DISABLE_MODEL_SOURCE_CHECK"] = "True"
import warnings
warnings.filterwarnings("ignore") # UserWarning: No ccache found
import paddle
import paddleocr
from paddleocr import PaddleOCR
def parse_args():
parser = argparse.ArgumentParser(description="test PaddleOCR")
parser.add_argument("--task", required=True, type=str, choices=["version", "ocr_predict"], help="specify what kind of task")
parser.add_argument("--detection_model_name", type=str, default="PP-OCRv5_mobile_det", help="detection model name")
parser.add_argument("--detection_model_dir", type=str, default="PP-OCRv5_mobile_det", help="detection model directory")
parser.add_argument("--recognition_model_name", type=str, default="PP-OCRv5_mobile_rec", help="recognition model name")
parser.add_argument("--recognition_model_dir", type=str, default="PP-OCRv5_mobile_rec", help="recognition model directory")
parser.add_argument("--image_name", type=str, help="image name")
args = parser.parse_args()
return args
def version():
print(f"Paddle Version: {paddle.__version__}")
print(f"GPU available: {paddle.is_compiled_with_cuda()}")
print(f"GPU count: {paddle.device.cuda.device_count()}")
print(f"PaddleOCR Version: {paddleocr.__version__}")
def ocr_predict(detection_model_name, detection_model_dir, recognition_model_name, recognition_model_dir, image_name):
if detection_model_dir is None or not detection_model_dir or not Path(detection_model_dir).is_dir():
raise FileNotFoundError(colorama.Fore.RED + f"detection model dir must be specified: {detection_model_dir}")
if recognition_model_dir is None or not recognition_model_dir or not Path(recognition_model_dir).is_dir():
raise FileNotFoundError(colorama.Fore.RED + f"recognition model dir must be specified: {recognition_model_dir}")
if image_name is None or not image_name or not Path(image_name).is_file():
raise FileNotFoundError(colorama.Fore.RED + f"image file must be specified: {image_name}")
ocr = PaddleOCR(
text_detection_model_name=detection_model_name,
text_detection_model_dir=detection_model_dir,
text_recognition_model_name=recognition_model_name,
text_recognition_model_dir=recognition_model_dir,
use_doc_orientation_classify=False,
use_doc_unwarping=False,
use_textline_orientation=False,
enable_mkldnn=False
)
result = ocr.predict(input=image_name)
for res in result:
res.print()
res.save_to_img(save_path="output")
res.save_to_json(save_path="output")
if __name__ == "__main__":
colorama.init(autoreset=True)
args = parse_args()
if args.task == "version":
version()
elif args.task == "ocr_predict":
ocr_predict(args.detection_model_name, args.detection_model_dir, args.recognition_model_name, args.recognition_model_dir, args.image_name)
print(colorama.Fore.GREEN + "====== execution completed ======")
执行结果如下:

识别结果如下:

3. PP-StructureV3:复杂文档解析,将复杂PDF和文档图像智能转换为保留原始结构的Markdown文件和JSON文件。
PP-StructureV3产线介绍:版面解析是一种从文档图像中提取结构化信息的技术,主要用于将复杂的文档版面转换为机器可读的数据格式。版面解析通过结合光学字符识别(OCR)、图像处理和机器学习算法,能够识别和提取文档中的文本块、标题、段落、图片、表格以及其他版面元素。此过程通常包括版面分析、元素分析和数据格式化三个主要步骤,最终生成结构化的文档数据,提升数据处理的效率和准确性。PP-StructureV3产线中包含以下7个模块或子产线。每个模块或子产线均可独立进行训练和推理,并包含多个模型:
(1).版面区域检测模块:任务的核心是对输入的文档图像进行内容解析和区域划分。通过识别图像中的不同元素(如文字、图表、图像、公式、段落、摘要、参考文献等),将其归类为预定义的类别,并确定这些区域在文档中的位置。模型:PP-DocLayout_plus-L
(2).通用OCR子产线:PP-OCRv5
(3).文档图像预处理子产线(可选):文档图像预处理产线集成了文档方向分类和形变矫正两大功能。文档方向分类可自动识别文档的四个方向(0°、90°、180°、270°),确保文档以正确的方向进行后续处理。文本图像矫正模型则用于修正文档拍摄或扫描过程中的几何扭曲,恢复文档的原始形状和比例。通用文档图像预处理产线中包含以下2个模块。每个模块均可独立进行训练和推理,并包含多个模型。
文档图像方向分类模块(可选):主要是将文档图像的方向区分出来,并使用后处理将其矫正。模型:PP-LCNet_x1_0_doc_ori
文本图像矫正模块(可选):主要目的是针对图像进行几何变换,以纠正图像中的文档扭曲、倾斜、透视变形等问题,以供后续的文本识别进行更加准确。模型:UVDoc
(4).表格识别子产线(可选):表格识别是一种自动从文档或图像中识别和提取表格内容及其结构的技术,广泛应用于数据录入、信息检索和文档分析等领域。通用表格识别v2产线(PP-TableMagic)用于解决表格识别任务,对图片中的表格进行识别,并以HTML格式输出。通用表格识别产线v2中包含8个模块。每个模块均可独立进行训练和推理,并包含多个模型。
(5).印章文本识别子产线(可选):印章文本识别是一种自动从文档或图像中提取和识别印章内容的技术,印章文本的识别是文档处理的一部分,在很多场景都有用途,例如合同比对,出入库审核以及发票报销审核等场景。印章文本识别产线用于识别印章的文本内容,提取印章图像中的文字信息以文本形式输出。印章文本识别产线中包含5个模块。每个模块均可独立进行训练和推理,并包含多个模型。
(6).公式识别子产线(可选):公式识别是一种自动从文档或图像中识别和提取LaTeX公式内容及其结构的技术,广泛应用于数学、物理、计算机科学等领域的文档编辑和数据分析。公式识别产线中包含4个模块。每个模块均可独立进行训练和推理,并包含多个模型。
(7).图表解析模块(可选):多模态图表解析是一项OCR领域的前沿技术,专注于将各类可视化图表(如柱状图、折线图、饼图等)自动转化为底层数据表,并进行格式化输出。模型:PP-Chart2Table
4. PP-ChatOCRv4:智能信息抽取,原生集成ERNIE 4.5,从海量文档中精准提取关键信息。
PP-ChatOCRv4产线介绍:是飞桨特色的文档和图像智能分析解决方案,结合了LLM、MLLM和OCR技术,一站式解决版面分析、生僻字、多页 pdf、表格、印章文本识别等常见的复杂文档信息抽取难点问题,结合文心大模型将海量数据和知识相融合,准确率高且应用广泛。PP-ChatOCRv4 产线中包含以下9个模块。每个模块均可独立进行训练和推理,并包含多个模型。
(1).文档图像方向分类模块(可选):主要是将文档图像的方向区分出来,并使用后处理将其矫正。模型:PP-LCNet_x1_0_doc_ori
(2).文本图像矫正模块(可选):主要目的是针对图像进行几何变换,以纠正图像中的文档扭曲、倾斜、透视变形等问题,以供后续的文本识别进行更加准确。模型:UVDoc
(3).版面区域检测模块:任务的核心是对输入的文档图像进行内容解析和区域划分。通过识别图像中的不同元素(如文字、图表、图像、公式、段落、摘要、参考文献等),将其归类为预定义的类别,并确定这些区域在文档中的位置。模型:PP-DocLayout_plus-L
(4).表格结构识别模块(可选):是表格识别系统中的重要组成部分,能够将不可编辑表格图片转换为可编辑的表格形式(例如html)。表格结构识别的目标是对表格的行、列和单元格位置进行识别,该模块的性能直接影响到整个表格识别系统的准确性和效率。模型:SLANet系列
(5).文本检测模块:负责在图像中定位和标记出包含文本的区域。通常会输出文本区域的边界框(Bounding Boxes)。可基于新数据集进行重新训练。模型:PP-OCRv5_mobile_det、PP-OCRv5_server_det
(6).文本识别模块:负责从图像中的文本区域提取出文本信息。通常接收文本检测模块输出的文本区域的边界框(Bounding Boxes)作为输入,然后通过复杂的图像处理和深度学习算法,将图像中的文本转化为可编辑和可搜索的电子文本。可基于新数据集进行重新训练。模型:PP-OCRv5_mobile_rec、PP-OCRv5_server_rec
(7).文本行方向分类模块(可选):主要是将文本行的方向区分出来,并使用后处理将其矫正。文本行分类模型含有两个类别,即0度,180度。模型:PP-LCNet_x1_0_textline_ori
(8).公式识别模块(可选):负责将图像中的数学公式转换为可编辑的文本或计算机可识别的格式。公式识别模块通常会输出数学公式的LaTeX或MathML代码,这些代码将作为输入传递给文本理解模块进行后续处理。模型:PP-FormulaNet系列
(9).印章文本检测模块(可选):通常会输出文本区域的多点边界框(Bounding Boxes),这些边界框将作为输入传递给弯曲矫正和文本检测模块进行后续处理,识别出印章的文字内容。模型:PP-OCRv4_server_seal_det
使用Paddle2ONNX将模型格式由PaddlePaddle转换为ONNX,环境配置如下:注:不能使用paddlepaddle的3.3.0版本,运行会报错
conda create --name paddle2onnx python=3.10 -y
conda activate paddle2onnx
pip install paddlepaddle==3.1.0
pip install paddle2onnx==2.1.0
pip install onnxruntime==1.23.2
pip install colored
可通过执行命令"paddle2onnx --help"来验证是否安装正确及支持的参数。
将PP-OCRv5_mobile_det、PP-OCRv5_mobile_rec转换为ONNX的执行结果如下图所示:

从 https://huggingface.co/ 上下载所需模型。

6万+

被折叠的 条评论
为什么被折叠?



