PaddleOCR 是一个基于百度飞桨(PaddlePaddle)深度学习框架的开源OCR工具包。它提供了一系列高效、准确的文字识别模型,旨在简化从图像中提取文本的过程,并且适用于多种语言。PaddleOCR的主要特点包括:

  1. 高精度:通过先进的深度学习技术,PaddleOCR能够实现非常高的文字识别精度,适合于对准确性有较高要求的应用场景。

  2. 超轻量级:为了适应不同设备和环境的需求,PaddleOCR提供了轻量化模型选项,在保持良好性能的同时减少计算资源消耗。

  3. 易用性:PaddleOCR设计时考虑到了用户的使用便捷性,提供简单直观的API接口以及详细的文档支持,使得即使是初学者也能快速上手。

  4. 多语言支持:除了中文外,PaddleOCR还支持英文以及其他多种语言的文字识别,满足国际化的应用场景需求。

  5. 丰富的功能:不仅限于基本的文字检测与识别,PaddleOCR还包括了角度矫正、版面分析等功能模块,可以处理更复杂的OCR任务。

  6. 持续更新与发展:作为活跃开发中的项目,PaddleOCR定期更新并引入最新的研究成果和技术改进,以不断提高其性能及适用范围。

  7. 社区支持:拥有活跃的开发者社区,用户可以通过论坛等方式交流经验、解决问题,同时也鼓励贡献代码共同推动项目进步。

  8. 应用场景广泛:无论是移动应用、桌面软件还是云端服务,PaddleOCR都能够很好地集成其中;此外,在证件识别、票据处理等领域也有着广泛应用

官方文档:PaddleOCR 文档 (paddlepaddle.github.io)

安装

PaddlePaddle

基于GPU的用户,首先使用如下命令查看cuda版本:

nvidia-smi

进入paddlepaddle的安装网址:开始使用_飞桨-源于产业实践的开源深度学习平台 (paddlepaddle.org.cn)

找到属于自己的cuda版本(注意,并不需要完全等于网址的cuda版本,稍微低一点也是可以的。比如说,查到本机的cuda版本为12.6,但是该网址支持的cuda版本最高只有12.3,那么使用这个12.3版本的paddlepaddle也是可以的),直接用命令安装该库即可(以cuda12.3为例):

pip install paddlepaddle-gpu==3.0.0b1 -i https://www.paddlepaddle.org.cn/packages/stable/cu123/

如果是CPU的用户,则安装CPU版本的paddlepaddle即可(安装命令同样也是在网址上获取):

pip install paddlepaddle==3.0.0b1 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/

paddleocr

安装 paddleocr,推荐使用2.6版本

pip install paddleocr
pip install paddleocr>=2.6.0.3

其他依赖包

安装 图像方向分类依赖包paddleclas(如不需要图像方向分类功能,可跳过)

pip install paddleclas
pip install paddleclas>=2.4.3

其他可能用到的依赖包:

pip install premailer openpyxl fitz

模型介绍

paddleocr包含以下主要的模型:

PP-OCR

PP-OCR是PaddleOCR自研的实用的超轻量OCR系统。在实现前沿算法的基础上,考虑精度与速度的平衡,进行模型瘦身和深度优化,使其尽可能满足产业落地需求。

PP-OCR是一个两阶段的OCR系统,其中文本检测算法选用DB,文本识别算法选用CRNN,并在检测和识别模块之间添加文本方向分类器,以应对不同方向的文本识别。

PP-OCR文档:概述 - PaddleOCR 文档 (paddlepaddle.github.io)

PP-Structure

PP-Structure是PaddleOCR团队自研的智能文档分析系统,旨在帮助开发者更好的完成版面分析、表格识别等文档理解相关任务。

PP-StructureV2的主要特性如下:

  • 支持对图片/pdf形式的文档进行版面分析,可以划分文字、标题、表格、图片、公式等区域;

  • 支持通用的中英文表格检测任务;

  • 支持表格区域进行结构化识别,最终结果输出Excel文件

  • 支持基于多模态的关键信息抽取(Key Information Extraction,KIE)任务-语义实体识别(Semantic Entity Recognition,SER)和关系抽取(Relation Extraction,RE);

  • 支持版面复原,即恢复为与原始图像布局一致的word或者pdf格式的文件;

  • 支持自定义训练及python whl包调用等多种推理部署方式,简单易用;

  • 与半自动数据标注工具PPOCRLabel打通,支持版面分析、表格识别、SER三种任务的标注。

PP-Structure文档:概述 - PaddleOCR 文档 (paddlepaddle.github.io)

PP-ChatOCR

官方开源文档暂未收录PP-ChatOCR的使用方法

总结

PP-OCR适合做普通的OCR识别,PP-Structure适合做表格识别和版面识别

PP-OCR

对于PP-OCR的使用,最基础的流程为引用paddleocr -> 初始化paddleocr类 -> 调用ocr函数

可以在命令行中输入paddleocr --help去查看或者进入如下网址查看paddleocr类中的参数:

paddleocr package使用说明 - PaddleOCR 文档 (paddlepaddle.github.io)

基础引入

from paddleocr import PaddleOCR

Quickstart

image_path = "test.jpg"

# 初始化PaddleOCR
ocr = PaddleOCR(lang="ch", ocr_version="PP-OCRv4")
results = ocr.ocr(image_path) # 识别图片中的文字
print(results)

PaddleOCR 中,ocr_version参数指定的是PP-OCR的版本(这里指定的是PP-OCRv4

lang指定的是扫描语言,具体支持的语言可以查看:多语言模型 - PaddleOCR 文档 (paddlepaddle.github.io)

文本检测与识别

PP-OCR的进行OCR扫描有两个步骤:

  1. 扫描图片,检测图片中的文本位置

  2. 识别文本是什么

这两个步骤,分别由执行识别ocr.ocr函数中的detrec参数控制,在默认情况下会同时执行检测和识别,其结果是一个list,每个item包含文本框在图片中的位置和识别结果和识别置信度

[[[[[8.0, 7.0], [244.0, 7.0], [244.0, 33.0], [8.0, 33.0]], ('中国平安PINGAN', 0.993087887763977)], [[[15.0, 38.0], [107.0, 38.0], [107.0, 61.0], [15.0, 61.0]], ('
保险·银行·投资', 0.9485485553741455)], [[[404.0, 71.0], [831.0, 71.0], [831.0, 101.0], [404.0, 101.0]], ('中国平安财产保险股份有限公司', 0.9995205998420715)], [[[484.0, 121.0], [754.0, 121.0], [754.0, 144.0], [484.0, 144.0]], ('儿童综合医疗保险保险单', 0.9979095458984375)], [[[963.0, 163.0], [1195.0, 163.0], [1195.0, 182.0], [963.0, 182.0]], ('扫一扫,获取更多在线服务!', 0.9972683787345886)], ....

假设只想执行检测(即只扫描图片中的文本位置,而不识别文本):

image_path = "test.jpg"

# 初始化PaddleOCR
ocr = PaddleOCR(lang="ch", ocr_version="PP-OCRv4")
results = ocr.ocr(image_path, rec=False) # 识别图片中的文字
print(results)

结果是一个list,每个item只包含文本框在图片中的位置

[[[[1013.0, 1216.0], [1212.0, 1216.0], [1212.0, 1235.0], [1013.0, 1235.0]], [[1040.0, 1187.0], [1186.0, 1187.0], [1186.0, 1210.0], [1040.0, 1210.0]], .....

假设只想执行识别(即只扫描图片中的文本位置,而不识别文本)

image_path = "test.jpg"

# 初始化PaddleOCR
ocr = PaddleOCR(lang="ch", ocr_version="PP-OCRv4")
results = ocr.ocr(image_path, det=False) # 识别图片中的文字
print(results)

结果是一个list,每个item只包含识别结果和识别置信度

[[('一', 0.07427263259887695)]]

建议不要将两个功能单独拆开用,其识别结果似乎不太准,默认同时用识别准

提取结果并保存至图片中

在对图片进行扫描后,可以提取结果:

result = results[0] # 取出识别结果
# 在扫描结果中,result[0]是文字的坐标,result[1]是文字的内容和置信度
# 将它们分别提取出来
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]

提取出坐标、文字和置信度后,使用from paddleocr import draw_ocr将其绘制在图片中

from PIL import Image
from paddleocr import draw_ocr

image = Image.open(image_path).convert('RGB') # 读取原图片
# 将它们绘制到图片上
img_ocr = draw_ocr(image, boxes, txts, scores)
im_show = Image.fromarray(img_ocr)
im_show.save('result.jpg') # 保存图片

调整占用的GPU大小

在初始化PaddleOCR时,我们可以调整初始化该类所占用的GPU大小,从而达到加速检测速度或减少显卡压力的目的

设置gpu_mem 参数即可,传入一个数字用来指定占用的GPU大小,单位为MB

from paddleocr import PaddleOCR

image_path = "test.img"

ocr = PaddleOCR(show_log=True, lang="ch", use_gpu=True, gpu_mem=2048) # 执行GPU占用的大小为2048MB
results = ocr.ocr(image_path) # 识别图片中的文字
print(results)

如果设置的GPU占用过大(超过GPU显存)时,会出现类似以下的错误警报:

E1009 21:19:06.519114 16068 analysis_predictor.cc:2137] Allocate too much memory for the GPU memory pool, assigned 8000 MB

然后会自动降低GPU占用

所以请在设置的时候给出合适的数字

文章作者: Vsoapmac
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 soap的会员制餐厅
人工智能 第三方库 个人分享
喜欢就支持一下吧