批量识别医疗票据【第2版】
对上一版本进行改进
·
由于上一版本的识别效果极差,且时间更为宽裕,现选择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. 批量处理
更多推荐
所有评论(0)