PaddleOCR体验

文章目录[x]
  1. 1:简介
  2. 2:环境安装
  3. 2.1:1. 创建python环境
  4. 2.2:2. 安装paddlepaddle
  5. 2.3:3. 安装paddleOCR whl包
  6. 3:快速使用
  7. 3.1:1. 命令行方式使用
  8. 3.2:2.python脚本方式使用
  9. 4:其他特性
  10. 5:与OmniAI对比

简介

PaddleOCR是由百度研发的一个基于深度学习的开源OCR(Optical Character Recognition,光学字符识别)工具库。
官方文档地址:https://paddlepaddle.github.io/PaddleOCR/main/index.html
开源项目地址:https://github.com/PaddlePaddle/PaddleOCR

环境安装

1. 创建python环境

使用conda管理python环境。

创建环境
conda create -n paddleOCR python=3.10

激活paddleOCR环境
conda activate paddleOCR

2. 安装paddlepaddle

如果电脑上安装了CUDA 11,可以安装GPU版本

pip install paddlepaddle-gpu

如果电脑使用CPU进行推理,安装CPU版本

pip install paddlepaddle

paddle根据版本、操作系统、安装方式、GPU芯片类型还提供了多种安装命令,请参照飞桨官网(https://www.paddlepaddle.org.cn/install/quick)安装文档中的说明进行操作。

3. 安装paddleOCR whl包

pip install paddleocr

快速使用

1. 命令行方式使用

PaddleOCR提供了一系列测试图片,点击这里(https://paddleocr.bj.bcebos.com/dygraph_v2.1/ppocr_img.zip)下载并解压,然后在终端中切换到相应目录。
如果不使用提供的测试图片,可以将下方--image_dir参数替换为相应的测试图片路径。

1.1 中英文模型

  • 检测+方向分类器+识别全流程:--use_angle_cls true设置使用方向分类器识别180度旋转文字,--use_gpu false设置不使用GPU

paddleocr --image_dir ./imgs/11.jpg --use_angle_cls true --use_gpu false

结果是一个list,每个item包含了文本框,文字和识别置信度

[28.0, 37.0], [302.0, 39.0], [302.0, 72.0], [27.0, 70.0, ('纯臻营养护发素', 0.9658738374710083)]
......

此外,paddleocr也支持输入pdf文件,并且可以通过指定参数page_num来控制推理前面几页,默认为0,表示推理所有页。

paddleocr --image_dir ./xxx.pdf --use_angle_cls true --use_gpu false --page_num 2

  • 单独使用检测(不使用识别模块):设置 --rec为false

paddleocr --image_dir ./imgs/11.jpg --rec false

结果是一个list,每个item只包含文本框

27.0, 459.0], [136.0, 459.0], [136.0, 479.0], [27.0, 479.0
28.0, 429.0], [372.0, 429.0], [372.0, 445.0], [28.0, 445.0
......

  • 单独使用识别(只提取文字,不检测文字所在位置):设置--det为false

paddleocr --image_dir ./imgs_words/ch/word_1.jpg --det false

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

['韩国小馆', 0.994467]

1.2 多语言模型

PaddleOCR目前支持80个语种,可以通过修改--lang参数进行切换,对于英文模型,指定--lang=en。

paddleocr --image_dir ./imgs_en/254.jpg --lang=en

结果是一个list,每个item包含了文本框,文字和识别置信度

[67.0, 51.0], [327.0, 46.0], [327.0, 74.0], [68.0, 80.0, ('PHOCAPITAL', 0.9944712519645691)]
[72.0, 92.0], [453.0, 84.0], [454.0, 114.0], [73.0, 122.0, ('107 State Street', 0.9744491577148438)]
[69.0, 135.0], [501.0, 125.0], [501.0, 156.0], [70.0, 165.0, ('Montpelier Vermont', 0.9357033967971802)]
......

2.python脚本方式使用

通过Python脚本使用PaddleOCR whl包,whl包会自动下载ppocr轻量级模型作为默认模型。

  • 检测+方向分类器+识别全流程
from paddleocr import PaddleOCR, draw_ocr

# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
ocr = PaddleOCR(use_angle_cls=True, lang="ch")  # need to run only once to download and load model into memory
img_path = './imgs/11.jpg'
result = ocr.ocr(img_path, cls=True)
for idx in range(len(result)):
    res = result[idx]
    for line in res:
        print(line)

# 显示结果
from PIL import Image
result = result[0]
image = Image.open(img_path).convert('RGB')
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores, font_path='./fonts/simfang.ttf')
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')
结果是一个list,每个item包含了文本框,文字和识别置信度
  • 使用滑动窗口进行检测和识别

要使用滑动窗口进行光学字符识别(OCR),可以使用以下代码片段:

from paddleocr import PaddleOCR
from PIL import Image, ImageDraw, ImageFont

# 初始化OCR引擎
ocr = PaddleOCR(use_angle_cls=True, lang="en")

img_path = "./very_large_image.jpg"
slice = {'horizontal_stride': 300, 'vertical_stride': 500, 'merge_x_thres': 50, 'merge_y_thres': 35}
results = ocr.ocr(img_path, cls=True, slice=slice)

# 加载图像
image = Image.open(img_path).convert("RGB")
draw = ImageDraw.Draw(image)
font = ImageFont.truetype("./doc/fonts/simfang.ttf", size=20)  # 根据需要调整大小

# 处理并绘制结果
for res in results:
    for line in res:
        box = [tuple(point) for point in line[0]]
        # 找出边界框
        box = [(min(point[0] for point in box), min(point[1] for point in box)),
               (max(point[0] for point in box), max(point[1] for point in box))]
        txt = line[1][0]
        draw.rectangle(box, outline="red", width=2)  # 绘制矩形
        draw.text((box[0][0], box[0][1] - 25), txt, fill="blue", font=font)  # 在矩形上方绘制文本

# 保存结果
image.save("result.jpg")

此示例初始化了启用角度分类的PaddleOCR实例,并将语言设置为英语。然后调用ocr方法,并使用多个参数来自定义检测和识别过程,包括处理图像切片的slice参数。

其他特性

  1. 在此基础上可以对模型进行微调,增加对特定类型图像的识别准确率。
  2. 相对于视觉大语言模型,paddle的模型参数很小。
  3. 官方提供了低代码平台,方便开发部署。
  4. 提供多种算法。
  5. 除了OCR还提供很多实用的功能,如:版面分析、表格识别、版面恢复、关键信息提取等。

与OmniAI对比

OmniAI是基于视觉大语言模型的OCR工具

点赞

发表回复

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像(已失效)