python-opencv表格识别


文章目录

  • python-opencv表格识别
  • 前言
  • 一、环境准备
  • 二、tesseract-OCR搭建
    • 1.tesseract-OCR
    • 2.debug tesseract
  • 三、源码
    • 1.源码
    • 2.运行结果
  • 总结

前言

提示:以下是本篇文章正文内容,python环境的搭建这里暂不做介绍,不会的同学可以参考一下其它文章。


提示:以下是本篇文章正文内容,下面案例可供参考

一、环境准备

1、python环境搭建;
2、tesseract安装(pytesseract);
3、python必要的一些库(os、cv2、numpy等);
4、源码调试

二、tesseract-OCR搭建

1.tesseract-OCR

可参考文章https://blog.csdn.net/qq_43317529/article/details/83340739
下载链接:https://digi.bib.uni-mannheim.de/tesseract/
1、下载选择对应的版本;
2、选择安装路径进行安装;
3、若需要下载识别其他语言的字符,可到官网下载对应语言包,下载完成后放到Tesseract-OCR\tessdata\tessconfigs下即可;
4、设置环境变量,进入环境变量中;
5、tesseract -v 检查是否安装成功;

2.debug tesseract

运行源码时发现:pytesseract.pytesseract.TesseractNotFoundError: E:/Tesseract-OCR/tesseract.exe is not installed or it’s not in your PATH. See README file for more information.

PS E:\py\python3.7\test\test22> python .\ocr2.py
mylisty [4, 41, 78, 115, 152, 189, 226, 263, 300, 337, 374, 411]
mylistx [0, 53, 218, 307, 374, 441, 508, 568, 670, 769, 901]
Traceback (most recent call last):File "E:\py\python3.7\Python37\lib\site-packages\pytesseract\pytesseract.py", line 252, in run_tesseractproc = subprocess.Popen(cmd_args, **subprocess_args())File "E:\py\python3.7\Python37\lib\subprocess.py", line 756, in __init__restore_signals, start_new_session)File "E:\py\python3.7\Python37\lib\subprocess.py", line 1155, in _execute_childstartupinfo)
FileNotFoundError: [WinError 2] 系统找不到指定的文件。During handling of the above exception, another exception occurred:Traceback (most recent call last):File ".\ocr2.py", line 82, in <module>text1 = pytesseract.image_to_string(ROI) #读取文字,此为默认英文File "E:\py\python3.7\Python37\lib\site-packages\pytesseract\pytesseract.py", line 417, in image_to_string}[output_type]()File "E:\py\python3.7\Python37\lib\site-packages\pytesseract\pytesseract.py", line 416, in <lambda>Output.STRING: lambda: run_and_get_output(*args),File "E:\py\python3.7\Python37\lib\site-packages\pytesseract\pytesseract.py", line 284, in run_and_get_outputrun_tesseract(**kwargs)File "E:\py\python3.7\Python37\lib\site-packages\pytesseract\pytesseract.py", line 256, in run_tesseractraise TesseractNotFoundError()
pytesseract.pytesseract.TesseractNotFoundError: E:/Tesseract-OCR/tesseract.exe is not installed or it's not in your PATH. See README file for more information.

解决方式:
1、通过cmd输入pip install pytesseract进行安装,但是安装后并不能直接使用;
2、在Tesseract-OCR的目录下运行pip install pytesseract可以看到自己安装的pytesseract所在路径;

PS E:\py\OCR\Tesseract-OCR> pip install pytesseract
Requirement already satisfied: pytesseract in e:\py\python3.7\python37\lib\site-packages (0.3.8)
Requirement already satisfied: Pillow in e:\py\python3.7\python37\lib\site-packages (from pytesseract) (8.2.0)

3、根据路径找到pytesseract.py;

4、点开编辑,找到tesseract_cmd将它改为你刚刚安装的tesseract的路径。

5、添加环境变量,在Tesseract-OCR路径下,再添加一个tessdata;
path=E:\py\OCR\Tesseract-OCR
path=E:\py\OCR\Tesseract-OCR\tessdata
6、在源码中修改路径为Tesseract-OCR的路径即可;

三、源码

1.源码

代码如下(示例):

# -*- coding: utf-8 -*-
"""
Created on Tue May 28 19:23:19 2019
将图片按照表格框线交叉点分割成子图片(传入图片路径)
@author: hx
"""
import cv2
#import cv2 as cv
import numpy as np
import pytesseract
#image = cv2.imread('C:/Users/Administrator/Desktop/7.jpg', 1)
image = cv2.imread(r'E:\py\python3.7\test\test22\src1.jpg', 1)
#灰度图片
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#二值化
binary = cv2.adaptiveThreshold(~gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 35, -5)
#ret,binary = cv2.threshold(~gray, 127, 255, cv2.THRESH_BINARY)
cv2.imshow("二值化图片:", binary) #展示图片
cv2.waitKey(0)
rows,cols=binary.shape
scale = 40
#识别横线
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(cols//scale,1))
eroded = cv2.erode(binary,kernel,iterations = 1)
#cv2.imshow("Eroded Image",eroded)
dilatedcol = cv2.dilate(eroded,kernel,iterations = 1)
cv2.imshow("表格横线展示:",dilatedcol)
cv2.waitKey(0)
#识别竖线
scale = 20
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(1,rows//scale))
eroded = cv2.erode(binary,kernel,iterations = 1)
dilatedrow = cv2.dilate(eroded,kernel,iterations = 1)
cv2.imshow("表格竖线展示:",dilatedrow)
cv2.waitKey(0)
#标识交点
bitwiseAnd = cv2.bitwise_and(dilatedcol,dilatedrow)
cv2.imshow("表格交点展示:",bitwiseAnd)
cv2.waitKey(0)
# cv2.imwrite("my.png",bitwiseAnd) #将二值像素点生成图片保存
#标识表格
merge = cv2.add(dilatedcol,dilatedrow)
cv2.imshow("表格整体展示:",merge)
cv2.waitKey(0)
#两张图片进行减法运算,去掉表格框线
merge2 = cv2.subtract(binary,merge)
cv2.imshow("图片去掉表格框线展示:",merge2)
cv2.waitKey(0)
#识别黑白图中的白色交叉点,将横纵坐标取出
ys,xs = np.where(bitwiseAnd>0)
mylisty=[] #纵坐标
mylistx=[] #横坐标
#通过排序,获取跳变的x和y的值,说明是交点,否则交点会有好多像素值值相近,我只取相近值的最后一点
#这个10的跳变不是固定的,根据不同的图片会有微调,基本上为单元格表格的高度(y坐标跳变)和长度(x坐标跳变)
i = 0
myxs=np.sort(xs)
for i in range(len(myxs)-1):if(myxs[i+1]-myxs[i]>10):mylistx.append(myxs[i])i=i+1
mylistx.append(myxs[i]) #要将最后一个点加入
i = 0
myys=np.sort(ys)
#print(np.sort(ys))
for i in range(len(myys)-1):if(myys[i+1]-myys[i]>10):mylisty.append(myys[i])
i=i+1
mylisty.append(myys[i]) #要将最后一个点加入
print('mylisty',mylisty)
print('mylistx',mylistx)
#循环y坐标,x坐标分割表格
for i in range(len(mylisty)-1):for j in range(len(mylistx)-1):
#在分割时,第一个参数为y坐标,第二个参数为x坐标ROI = image[mylisty[i]+3:mylisty[i+1]-3,mylistx[j]:mylistx[j+1]-3] #减去3的原因是由于我缩小ROI范围
cv2.imshow("分割后子图片展示:",ROI)
cv2.waitKey(0)
#special_char_list = '`~!@#$%^&*()-_=+[]{}|\\;:‘',。《》/?ˇ'
#pytesseract.pytesseract.tesseract_cmd = r'E:/Tesseract-OCR/tesseract.exe'
pytesseract.pytesseract.tesseract_cmd = r'E:\py\OCR\Tesseract-OCR\tesseract.exe'
#pytesseract.pytesseract.tesseract_cmd = r'E:\py\python3.7\Python37\Scripts\py\pytesseract.exe'
text1 = pytesseract.image_to_string(ROI) #读取文字,此为默认英文
#text2 = ''.join([char for char in text2 if char not in special_char_list])
print('识别分割子图片信息为:'+text1)
j=j+1
i=i+1

2.运行结果






总结

提示:此源码仅供测试学习,功能尚不完善,持续更新中。

python识别图片表格内容相关推荐

  1. 如何识别图片表格?在线扫描识别表格的方法分享

    如何识别图片表格?小伙伴们应该都知道,我们在装修的时候需要购买许多材料.我们在购买材料的时候则会留存许多纸质版的采购单.随着材料购买越来越多,我们在纸质单子上统计装修费用多有不便.其实我们完全可以识别 ...

  2. python识别图片文字_如何利用Python识别图片中的文字

    一.前言 不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制.或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存.但是当我们想用到里面的 ...

  3. 怎么识别图片表格并提取?这个办法可以试试

    很多时候我们都需要识别提取图片表格,比如在学术研究中,我们需要快速准确地识别图片表格,从而节省大量的时间,更加高效地完成研究工作.而在商业环境中,也可以通过快速识别图片表格,更快速准确地完成商业文件的 ...

  4. Python百度ai识别图片表格

    Python百度ai识别表格 通过借助百度ai的接口实现含表格图片的识别,并将表格内容返回为Excel文件. 获取Access Token (1)有百度账号的直接登录百度ai,没有的注册在登录. (2 ...

  5. python识别图片指定位置文字_python批量识别图片指定区域文字内容

    Python批量识别图片指定区域文字内容,供大家参考,具体内容如下 简介 对于一张图片,需求识别指定区域的内容 1.截取原始图上的指定图片当做模板 2.根据模板相似度去再原始图片上识别准确坐标 3.根 ...

  6. 教程 | 用Python识别图片验证码中的文字

    作者 | 老表 来源 | 简说Python(ID:xksnh888xksnh888) [导语]在今天这篇文章中,作者分享给大家一个有趣又干货满满的 Python 项目.通过这份教程,大家不仅又多了一个 ...

  7. python识别图片上的文字_怎么用python识别图片中的文字-百度经验

    在网上看了很多用python进行文字识别的文章,就只有两个字的体会:乱.差.因为很多模块,我都不知道怎么安装,弄得焦头烂额,反而因此浪费了很多时间,而且到最后也是没能成功. 在文章中插入大量BUG,让 ...

  8. 用python提取PDF表格内容保存到excel

    一 提取pdf方法介绍 任务是用python提取PDF里的表格文件到excel里面去.做为一个 学了一个周python的人来说当然像尝试一下看能不能做到,事实证明是可以的只是可能代码有点烂...... ...

  9. 常用的表格检测识别方法-表格内容识别方法

    常用的表格检测识别方法 3.3 表格内容识别方法 表格识别的研究主要涉及两个方面,一方面是对单元格内的文本进行识别,这一步通常是在确定单元格区域后,利用较为稳定的光学字符识别方法(OCR)来实现,这一 ...

  10. 常用的表格检测识别方法——表格内容识别方法

    第三章 常用的表格检测识别方法 3.3表格内容识别方法 表格识别的研究主要涉及两个方面,一方面是对单元格内的文本进行识别,这一步通常是在确定单元格区域后,利用较为稳定的光学字符识别方法(OCR)来实现 ...

最新文章

  1. 腾讯员工上半年人均月薪 7.8 万,网友:别人拿月薪我拿年薪。。。
  2. 今日工作总结 2022-02-08
  3. 【C#日期系列(一)】--C#获取某月第一天0分0秒以及最后一天59分59秒
  4. python与其他编程语言对比优点_Python编程不同于其他编程语言的优点
  5. Python 学习之作用域
  6. 惠普打印机怎么无线连接电脑_惠普SPECTRE X360 13笔记本电脑怎么样,值得买吗
  7. 单片机小白学步系列(十九) 单片机/计算机系统概述:扩展模块
  8. 让美团、京东、搜狐都说好的数据仓库,牛在哪?
  9. NAS、SAN和DAS的区别
  10. 制造业实施大数据战略面临哪些挑战
  11. 软件测试面试题(二):Jmeter面试
  12. LitJson扩展基础类型
  13. KDS加密软件的实际应用
  14. 自费出书多少钱?如何出书
  15. 各大IT公司、软件公司员工等级(级别)及薪资
  16. Pr 入门教程:如何减少音频中的噪音和混响?
  17. asp.net小区物业管理系统
  18. [ABAP] MOVE-CORRESPONDING 表
  19. RFID技术在智能超市中的应用
  20. C++ vector函数

热门文章

  1. INT 10H中断功能详解
  2. ApacheCon Asia: Keynote 以及流处理专场大咖详细介绍
  3. 组策略禁止自动锁定计算机,让Win10自动锁屏的设置技巧
  4. 计算机专业哪个专业不需要数学,计算机软件专业是不是需要数学很好啊
  5. this与bind(this)
  6. excel 将科学计数法的格式换成文本
  7. 【Python实现视频转文字操作】
  8. 毕业论文参考文献格式设置(以GB/T 7714-2015为例)
  9. 相乘函数计算机表示符号,excel乘积函数_excel相乘函数使用方法
  10. speedoffice(word)如何插入超链接