表格识别技术主要使用基于注意力机制的图片描述模型 RARE,整体流程如下图所示,对于其中的表格区域进行表格识别处理。

表格识别的难点主要在于表格结构的提取,以及将表格信息与 OCR 信息融合。整体流程可以分为上下两部分,其中上半部分(黑色支路)是普通的 OCR 过程,通过(1)文本检测模块对表格图片进行单行文字检测,获得坐标,然后通过(2)文本识别模块识别模型得到文字结果。
而在下半部分的在蓝色支路中,表格图片首先经过(3)表格结构预测模块,获得每个 Excel 单元格的四点坐标与表格结构信息。结合黑色支路文本检测获得的单行文字文本框 4 点坐标,共同输入(4)Cell 坐标聚合模块,再通过(5)Cell 文本聚合模块,将属于同一单元格的文本拼接在一起。最后结合表格结构信息,通过(6)Excel 导出模块获得 Excel 形式的表格数据。
下面分别针每个模块分别展开介绍。

视频:航拍广东高速公路风景,飞机上看更震撼,美呆了!,旅游,旅途风光,好看视频航拍广东高速公路风景,飞机上看更震撼,美呆了!,本视频由客家人阿牛哥提供,751次播放,好看视频是由百度团队打造的集内涵和颜值于一身的专业短视频聚合平台https://haokan.baidu.com/v?pd=wisenatural&vid=9283681397163393174

待识别表格图片:

识别代码:

from mailmerge import MailMerge
from sgluematch import supergluematch
import tools.infer.utility as util
import tools.infer.predict_system as pd
from PIL import Image
import numpy as np
import math
import cv2
import osdef comppic(raw_dir, comp_dir):for n in os.listdir(comp_dir):cimg = cv2.imread(comp_dir + n)if cimg is not None:ch, cw = cimg.shape[:2]new = np.zeros((ch, cw, 3), dtype=np.uint8)img1_pil = Image.fromarray(cv2.cvtColor(new, cv2.COLOR_BGR2RGB))  # 转换为PIL格式for m in os.listdir(raw_dir):rimg = cv2.imread(raw_dir + m)ry, rx = rimg.shape[:2]csite = supergluematch(rimg, cimg)if type(csite) == int:continueelse:xscale = rx/(csite[1][0] - csite[0][0])yscale = ry/(csite[1][1] - csite[0][1])matchimg = cv2.resize(rimg, (0, 0), fx=xscale, fy=yscale, interpolation=cv2.INTER_NEAREST)img2_pil = Image.fromarray(cv2.cvtColor(matchimg, cv2.COLOR_BGR2RGB))img1_pil.paste(img2_pil, (csite[0][0], csite[0][1]))  # img2贴在img1指定位置,位置是(左,上)new = cv2.cvtColor(np.asarray(img1_pil), cv2.COLOR_RGB2BGR)  # PIL转换为cv2格式png = n.split(".")[0] + ".png"cv2.imwrite("./temp/" + png, new)return "./temp/"def create_hue_mask(img, lower_color, upper_color):lower = np.array(lower_color, np.uint8)upper = np.array(upper_color, np.uint8)mask = cv2.inRange(img, lower, upper)return maskdef findlight(img):hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)light_hue = create_hue_mask(hsv, [100, 200, 180], [120, 255, 255])element = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))light = cv2.dilate(light_hue, element, iterations=1)return lightdef finddark(img):hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)dark_hue = create_hue_mask(hsv, [0, 0, 0], [180, 255, 90])element = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))dark = cv2.dilate(dark_hue, element, iterations=2)return darkdef distance(x1, y1, x2, y2):return math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)def specialarea(img, text_sys):blue = findlight(img)black = finddark(img)becontours, hierarchy = cv2.findContours(blue, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)bkcontours, hierarchy = cv2.findContours(black, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)checkp = []checkcnt = []result = []for i, cnt in enumerate(becontours):sx, sy, w, h = cv2.boundingRect(cnt)if w*h > 50:checkp.append([sx, sy])for j in checkp:minlen = math.inffor i, cnt in enumerate(bkcontours):leftmost = tuple(cnt[cnt[:, :, 0].argmin()][0])cal_len = distance(leftmost[0], leftmost[1], j[0], j[1])if cal_len < minlen:checkcnt = cntminlen = cal_lensx, sy, w, h = cv2.boundingRect(checkcnt)image = img[sy-2: sy + h+2, sx-5: sx + w+5]dboxes, re_res = text_sys(image)image = [re_res[i][0] for i in range(len(re_res))]result.append([j, image])return resultif __name__ == "__main__":template = '一般情况.docx'comp_template = 'abcdefg'deal_dir = comppic("./data/", "./template/")args = util.parse_args(2)text_sys = pd.TextSystem(args)with open("./template/classes.txt", "r") as cfile:classes = cfile.read().split("\n")data = {}for i in comp_template:img = cv2.imread(deal_dir + i + ".png")if img is not None:height, width = img.shape[:2]with open("./template/" + i + ".txt", "r") as file:data_site = file.read()checkr = specialarea(img, text_sys)for j in data_site.split("\n"):site = j.split(" ")if len(site) == 5:label, cx, cy, w, h = sitecx, cy, w, h = int(float(cx) * width), int(float(cy) * height), int(float(w) * width), int(float(h) * height)label = classes[int(label)]sy, ey, sx, ex = int(cy - h / 2), int(cy + h / 2), int(cx - w / 2), int(cx + w / 2)exist = Falsefor a in checkr:if (sy < a[0][1]) & (ey > a[0][1]) & (sx < a[0][0]) & (ex > a[0][0]):data[label] = a[1]exist = Truebreakif not exist:cut_img = img[sy: ey, sx: ex]dt_boxes, rec_res = text_sys(cut_img)txts = [rec_res[i][0] for i in range(len(rec_res))]data[label] = txtsfor i, j in data.items():print(i, j)document = MailMerge(template)document.merge(sg='165', )document.write('生成的1份证明.docx')

识别效果:

项目下载:

python百度paddle表格文字识别生成excel-深度学习文档类资源-CSDN下载python百度paddle表格文字识别生成excel介绍链接:更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/xifenglie123321/85414054

python百度paddle表格文字识别生成excel相关推荐

  1. python百度云ocr文字识别软件_基于百度云的OCR识别(Python)

    2019年7月3日早上,在百度AI开发者大会上,一个来自山西的青年,将一瓶矿泉水浇在了同样来自山西的李彦宏身上. 可以回顾一下 https://b23.tv/av57665929/p1 ,着实让人一惊 ...

  2. 腾讯云文字识别API提取表格数据并生成Excel文件

    腾讯云文字识别API提取表格数据并生成Excel文件 本文主要介绍了利用腾讯云表格文字识别API提取图片表格数据并生成Excel文件.主要涉及的知识点有:腾讯云API的调用.json文件的处理以及Ex ...

  3. python批量分析表格_Python环境下百度Ocr表格批量识别

    参考代码:(Python对代码行缩进要求比较高,复制下列的代码请注意这一点,参考上图) # ---------------------------------------- # Python环境下百度 ...

  4. python 百度ai批量识别_Python基于百度AI的文字识别的示例

    Python基于百度AI的文字识别的示例 使用百度AI的文字识别库,做出的调用示例,其中filePath是图片的路径,可以自行传入一张带有文字的图片,进行识别. 下载baidu-aip这个库,可以直接 ...

  5. 基于OCR识别引擎的识别表格文字并将结果以Excel电子表格的形式原样导出的Android客户端代码

    基于OCR识别引擎的识别表格文字并将结果以Excel电子表格的形式原样导出的Android客户端代码 界面截图 实现思路 对表格图片进行灰度化和二值化处理 对图像进行倾斜矫正 进行表格线提取 进行表格 ...

  6. 基于百度AI的文字识别(Python语言)

    简 介:百度大脑是百度 AI 核心技术引擎,包括视觉.语音.自然语言处理.知识图谱.深度学习等AI核心技术和AI开放平台.本文介绍百度 AI 核心技术中文字识别功能的使用方法. 关键词:百度AI.文字 ...

  7. python 利用百度AI实现文字识别(cv2 + aip module)

    python 利用百度AI实现文字识别(cv2 + aip module) (该案例将利用cv2,aip等模块,详细的安装以及使用的方法将在后文进行简单的介绍.) 一.KNN算法的简介(机器学习算法之 ...

  8. python 百度云文字识别 proxy_Python基于百度AI的文字识别的示例

    Python基于百度AI的文字识别的示例 发布时间:2020-10-03 14:52:27 来源:脚本之家 阅读:66 使用百度AI的文字识别库,做出的调用示例,其中filePath是图片的路径,可以 ...

  9. 【Python】调用百度云API文字识别服务 OCR

    # encoding:utf-8 # !/usr/local/bin/python3# 百度云:文字识别服务 # 应用名称:文字识别练习项目import urllib3 from urllib.par ...

最新文章

  1. Vijos p1165 火烧赤壁 离散化+单调栈
  2. 【MongoDB】MongoDb的“not master and slaveok=false”错误及解决方法
  3. java计算两地距离(公里)
  4. mybatis的动态sql的一些记录
  5. boost::math模块使用来自函数调用的常量的测试程序
  6. 曾经很火的迅雷,为什么现在不怎么火了?
  7. php和vue实现智商在线测试题
  8. 苏宁大数据怎么运营_苏宁首个无人店大数据曝光,其消费人群是如何分布的?...
  9. 金融学习之四——插值法求远期国债收益率
  10. 悦听player音乐播放器
  11. iOS 视频方向修正
  12. 华为p4不是鸿蒙吗怎么又改为安卓_鸿蒙系统是不是就是改版的安卓系统?
  13. Bellman 贝尔曼方程究竟是什么
  14. 【详解】模型优化技巧之优化器和学习率调整
  15. 4p营销组合策略案例_营销组合策略的4P讲解
  16. 人世间最纯净的友情只存在于孩童时代
  17. matlab ploty,matlab绘制函数 如何利用matlab的ploty
  18. ┎结构之美┒之Trie树
  19. 微信小程序image加载图片失败的处理方法
  20. 前端基础第二天——HTML5基础

热门文章

  1. 将视频流保存成wmv格式的文件
  2. SRv6----控制平面
  3. 欧拉图——Euler Graph
  4. Fetch()方法介绍
  5. DevExpress LookUpEdit 增加清空按钮
  6. 基于Turf 的along函数实现车辆动态轨迹点加密
  7. Wiki: Web Collaboration
  8. 无量寿经600全集MP3,程序员修心养性,静心专用
  9. C++继承和多态特性——继承详解(2)
  10. 【已解决】Could not convert incoming message with content-type [application/x-java-serialized-object]Exec