paddleOCR票据识别(一)
·
使用百度开源ocr模型解决票据识别问题,本场景针对室外手持场景,还在整理中。。。
import base64
import cv2
import numpy as np
from paddleocr import PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, use_gpu=False)
img_str = "图片base64字符串"
img_str = base64.b64decode(img_str)
img_array = np.frombuffer(img_str, dtype=np.uint8)
img_raw = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
# img_raw_small = cv2.resize(img_raw, None, fx=0.5, fy=0.5)
# cv2.imshow("img_raw_small",img_raw_small)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
result = ocr.ocr(img_raw, cls=True)
name_y_up = 0
l1 =[]
name = ""
# 找坐标
for line in result:
if "工作负责人(监护人)姓名" in line[1][0]:
name_y_up = line[0][0][1] # 获取 “工作负责人(监护人)姓名” 这一行的 左上角 纵坐标值。
for line in result:
# 取同一行所有内容 范围是从name_y_up到下一行之内
if line[0][0][1]>=name_y_up-3 and line[0][0][1]<=name_y_up+20:
l1.append(line)
# 排序,取值
l1.sort(key=lambda x:x[0][0])
value1 = l1[1][1][0]
print("工作负责人(监护人)姓名:",value1)
'''
思路:
首先result是识别出来的每一句话(可以是一个字符)信息对象,
每个信息对象包含两个元素,第一个元素是四个顶点坐标,第二个元素是识别的内容。
总体思路是先根据关键词找到对应行这个 信息对象,然后通过控制坐标区域筛选出 相关信息对象,最后拼接内容。
四个顶点坐标(从左上⾓开始按顺时针顺序排列):[左上,右上,右下,左下],坐标元素[x,y]
存在的问题:
倾斜、褶皱、缩放
解决方案:
先定位再截图,旋转、透视变换、缩放固定大小
总结流程:定位、切割、识别、整合,前两步是数字图像处理,识别是ocr,最后一步要根据票据模板来逻辑处理。
'''
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)