使用paddleOCR识别PDF文件

使用paddleOCR识别PDF文件

业务场景:通过识别pdf文件来获取数据,然后填充到表单上展示数据,

为什么会有这样的功能:填写数据主要有两种方式:第一种:通过手动的方式在表单上填写数据,第二种:通过识别文件或者第三方手段获取数据

这里采用的是第二种:通过识别pdf文件获取数据最后在表单上展示数据

一、paddleOCR介绍

PaddleOCR 是一个基于 PaddlePaddle 深度学习框架的 OCR(光学字符识别)工具。它旨在为用户提供快速、准确的文本检测和识别功能。以下是 PaddleOCR 的一些主要特点和功能介绍:

1. 功能特点

  • 多语言支持:PaddleOCR 支持多种语言的文本识别,包括中文、英文、法文、德文、日文、韩文等。用户可以根据需要选择特定语言的模型。
  • 强大的模型库:提供了多种预训练的模型,包括:
    • 文本检测模型(如 DB、EAST、FCE等)
    • 文本识别模型(如 CRNN、SVTR、PP-OCR)
    • 布局分析模型(如 LayoutXLM)
  • 高效的文本检测:能够快速检测图像中的文本区域,支持多种文本布局,包括水平文本和倾斜文本。
  • 易于使用:PaddleOCR 提供简单易用的接口,用户只需调用少量函数即可实现文本识别功能。
  • 开源:PaddleOCR 是一个开源项目,用户可以在其 GitHub 页面上找到源代码和文档。

2. 应用场景

PaddleOCR 可以广泛应用于各种场景,包括但不限于:

  • 文档数字化:将纸质文档中的文本转换为电子文本,方便存档和检索。
  • 名片识别:自动提取名片上的信息,如姓名、公司和联系方式。
  • 票据识别:从发票、收据等票据中提取文本信息。
  • 自动翻译:与翻译系统结合,将图像中的文本进行翻译。
  • 自动化表单填写:从表单中提取文本并填入系统中。

二、环境搭建

注意:

  • 需要具备python环境
  • 安装conda
  1. 安装conda

conda 是一个常用的 python 包管理器 安装 conda 后,可以安装 python 环境,以及 numpy 等所需的工具包环境。

设置:路径(查看paddleOCR项目简介:在quickstart.md文件中)

  1. 打开终端并创建Conda环境
#在命令行输入以下命令,创建一个名为 paddle_env 的环境
#这里为了加快下载速度,使用清华源码
conda create --name paddle_env python=3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
 #这是一行命令

  1. 激活刚刚创建的Conda 环境(进入了paddle_env环境)
#激活 paddle_env 环境
conda activate paddle_env
#查看python的当前位置
where python
  1. 在paddle_env环境中安装PaddlePaddle 2.0(CPU版本)
pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple

三、测试效果

from paddleocr import PaddleOCR, draw_ocr

# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
PAGE_NUM = 23 # 将识别页码前置作为全局,防止后续打开pdf的参数和前文识别参数不一致 / Set the recognition page number
pdf_path = './imgs/test_2024-09-23.pdf'
ocr = PaddleOCR(use_angle_cls=True, lang="ch", page_num=PAGE_NUM)  # need to run only once to download and load model into memory
# ocr = PaddleOCR(use_angle_cls=True, lang="ch", page_num=PAGE_NUM,use_gpu=0) # 如果需要使用GPU,请取消此行的注释 并注释上一行 / To Use GPU,uncomment this line and comment the above one.
result = ocr.ocr(pdf_path, cls=True)
for idx in range(len(result)):
    res = result[idx] # result:是每一页的数组
    if res == None: # 识别到空页就跳过,防止程序报错 / Skip when empty result detected to avoid TypeError:NoneType
        print(f"[DEBUG] Empty page {idx+1} detected, skip it.")
        continue
    for line in res:
        print(line)
# 显示结果
import fitz
from PIL import Image
import cv2
import numpy as np
imgs = []
with fitz.open(pdf_path) as pdf:
    for pg in range(0, PAGE_NUM):
        page = pdf[pg]
        mat = fitz.Matrix(2, 2)
        pm = page.get_pixmap(matrix=mat, alpha=False)
        # if width or height > 2000 pixels, don't enlarge the image
        if pm.width > 2000 or pm.height > 2000:
            pm = page.get_pixmap(matrix=fitz.Matrix(1, 1), alpha=False)
        img = Image.frombytes("RGB", [pm.width, pm.height], pm.samples)
        img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
        imgs.append(img)
for idx in range(len(result)):
    res = result[idx]
    if res == None:
        continue
    image = imgs[idx]
    boxes = [line[0] for line in res]
    txts = [line[1][0] for line in res]
    scores = [line[1][1] for line in res]
    im_show = draw_ocr(image, boxes, txts, scores, font_path='doc/fonts/simfang.ttf')
    im_show = Image.fromarray(im_show)
    im_show.save('result_page_{}.jpg'.format(idx))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值