由于上一版本的识别效果极差,且时间更为宽裕,现选择PaddleOCR模型来进行图像识别。

0. 主要参考链接

CSDN平台:如何批量从PDF提取数据并生成excel
码云平台:PaddlePaddle / PaddleOCR
百度飞桨:OCR超轻量中英文识别

1. 安装模型

最后的整体安装参考OCR识别图片表格
Shapely的安装参考PaddleOCR学习(一)PaddleOCR安装与测试
paddleocr安装参考如何安装PaddleOCR
MV C++的安装参考Microsoft Visual C++ Build Tools安装问题及解决方案

安装anaconda后,在虚拟环境中安装好PaddleOCR。
随后将导入到pycharm中。

2. 单图测试

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 = 'C:/Users/Administrator/Desktop/ppocr_img/imgs/11.jpg'
result = ocr.ocr(img_path, cls=True)
for line in result:
    print(line)

# 显示结果
from PIL import Image

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')

print(txts)

3. 多图程序

参考如何批量从PDF提取数据并生成excel
并进行改进

# coding:utf-8
# pdf2excel.py
# by smy

import os
import cv2
import glob
import time
from paddleocr import PPStructure,draw_structure_result,save_structure_res

table_engine = PPStructure(show_log=True)
start =time.perf_counter()

# path = input('请输入待处理文件位置:')
path = r'C:/Users/Administrator/Desktop/ppocr_img/imgs/'
# 文件输出目录
save_folder = path + '/table'

# 输入的图片
paths = glob.glob(os.path.join(path, '*.png'))
paths.sort()

for img_path in paths:
    img = cv2.imread(img_path)
    result = table_engine(img)
    save_structure_res(result, save_folder,os.path.basename(img_path).split('.')[0])

    for line in result:
        line.pop('img')
        print(line)

    from PIL import Image

    # 输出字体
    font_path = path + '/fonts/simfang.ttf'
    image = Image.open(img_path).convert('RGB')
    im_show = draw_structure_result(image, result,font_path=font_path)
    im_show = Image.fromarray(im_show)
    im_show.save('result.jpg')

end = time.perf_counter()
print('Running time: %s Seconds'%(end-start))
print('文件转换完成!');

4. 批量识别

import cv2
from paddleocr import PaddleOCR, PPStructure, draw_structure_result, save_structure_res

ocr = PaddleOCR(use_angle_cls=True, lang="ch")

import os

is_exists = os.listdir("C:/Users/Administrator/Desktop/fyo")  #读取图片文件位置
# is_exists = os.listdir("C:/Users/Administrator/Desktop/fyo")  #读取图片文件位置
print("is_exists")
print(is_exists)
for i in is_exists:
    print("")
    print("i:", i)

    img_path = 'C:/Users/Administrator/Desktop/fyo/'+i
    result = ocr.ocr(img_path, cls=True)
    txts = [line[1][0] for line in result]

    print(txts)
    print(txts[0], txts[1], txts[2])

至此已经可以批量识别图片,但未对识别数据进行处理。
下一步结合【第1版】已经探索的经验对代码进行改进,进行数据批量处理。

5. 批量处理

python 用pandleocr批量图片读取表格并且保存为excel
PDF表格内容转化为Excel

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐