python识别图片表格内容

article/2025/11/5 9:37:10

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.运行结果



在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

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


http://chatgpt.dhexx.cn/article/BJPqL6sI.shtml

相关文章

python图片识别之tesseract

经过两个下午的尝试&#xff0c;终于搞出来了&#xff1b;特记录下来备忘&#xff1b; 首先来看python代码识别图片&#xff0c;这一段较为简单&#xff1b; from PIL import Image # import tesserocr # 完全可以不用这个 import pytesseractimage Image.open(rhahah.jpg)…

Python OCR识别图片

OCR技术是光学字符识别的缩写(Optical Character Recognition)&#xff0c;是通过扫描等光学输入方式将各种票据、报刊、书籍、文稿及其它印刷品的文字转化为图像信息&#xff0c;再利用文字识别技术将图像信息转化为可以使用的计算机输入技术。可应用于银行票据、大量文字资料…

Python图片识别——人工智能篇

目录 一、安装pytesseract和PIL PIL全称&#xff1a;Python Imaging Library&#xff0c;python图像处理库&#xff0c;这个库支持多种文件格式&#xff0c;并提供了强大的图像处理和图形处理能力。 由于PIL仅支持到Python 2.7&#xff0c;所以在PIL的基础上创建了Pillow库&…

部署kvm

实验需求&#xff1a; 1、部署kvm 2、使用WebVirtMgr的WEB界面管理 3、在该WEB界面中安装一台Linux操作系统 环境说明&#xff1a; 系统&#xff1a;CentOS7 IP&#xff1a;192.168.253.145 1. CPU虚拟化功能 部署前请确保你的CPU虚拟化功能已开启&#xff0c;分为两种情况…

KVM是什么 机柜 机架服务器 怎么用

多个刀片服务器连接到KVM&#xff0c;使用KVM对它们进行统一管理 每个服务器在KVM上有一个序号&#xff0c;切换序号&#xff0c;桌面就会进入到对应的服务器 是看PORT ID 上面的ON LINE哪些灯亮&#xff0c;则代表连上了哪几个服务器

linux服务器部署kvm

1.查看系统版本 [rootlocalhost ~]# cat /etc/centos-release CentOS Linux release 7.5.1708 (Core)2.检查是否开启虚拟化。有VMX或者svm [rootlocalhost ~]# cat /proc/cpuinfo | egrep vmx|svm如果没有数据显示的话&#xff0c;关闭虚拟机&#xff0c;点击虚拟机设置。 3…

KVM服务器安装详解及其应用(Services02 DAY01)

安装一台KVM服务器  问题 本例要求安装一台可用的KVM服务器&#xff1a; 准备一台CentOS6服务器安装虚拟化相关包组启动libvirtd服务  方案 在CentOS6系统中&#xff0c;KVM虚拟化相关的软件组包括四个&#xff1a;虚拟化、虚拟化客户端、虚拟化工具、虚拟化平台&#xff…

服务器的虚拟kvm是什么,服务器 配置虚拟kvm功能

服务器 配置虚拟kvm功能 内容精选 换一换 Linux操作系统XEN实例变更为KVM实例前&#xff0c;必须完成驱动的安装和配置。本节操作指导您手动安装Linux云服务器驱动、配置磁盘自动挂载等&#xff0c;并将XEN实例变更为KVM实例。如需使用自动化脚本安装驱动的方法请参考XEN实例变…

kvm云服务器虚拟化,kvm虚拟化 云服务器

kvm虚拟化 云服务器 内容精选 换一换 用户在华东区创建了一个保护组及其保护实例&#xff0c;如表1所示。删除该保护实例&#xff0c;但不删除容灾站点服务器。然后在弹性云服务器页面&#xff0c;卸载容灾站点服务器的云硬盘&#xff0c;并将该云硬盘挂载给可用区AZ1中的其他云…

搭建KVM服务器(1)

安装虚拟化服务器平台 虚拟化概念 • KVM /QEMU /LIBVIRTD – KVM是linux内核的模块,它需要CPU的支持,采用硬件辅劣虚拟化技术 Intel-VT,AMD-V,内存的相关如Intel的 EPT 和 AMD 的 RVI 技术。 – QEMU 是一个虚拟化的仿真工具,通过 ioctl 不内核kvm 交互完成对硬件的虚拟化支…

稳定kvm服务器vps,kvm的服务器vps

kvm的服务器vps 内容精选 换一换 oVirt Engine是运行在基于JBoss的Java应用程序。该服务与主机上的VDSM进行通信&#xff0c;以部署、启动、停止、迁移和监控VM&#xff0c;并且还可以通过模板在存储上创建新的镜像。oVirt Engine以可扩展性、安全性、高性能为基础的架构技术&a…

维护华为服务器的好工具KVM

以前维护服务器&#xff0c;要么打开远程桌面&#xff0c;要么打开telnet&#xff0c;或者使用其他的远程工具&#xff0c;今天维护一台新购买的华为服务器&#xff0c;使用了华为官网下载的KVM&#xff0c;真好用&#xff01; 使用网线&#xff0c;找到Mgmt的网口插入&#xf…

服务器系统kvm安装,云服务器安装kvm

云服务器安装kvm 内容精选 换一换 安装完操作系统后的临时云服务器需要进行相关配置&#xff0c;并安装原生的XEN和KVM驱动&#xff0c;才能保证后续创建的云服务器正常使用。该任务指导用户完成Linux云服务器的相关配置与驱动安装&#xff0c;从而创建为Linux系统盘镜像。配置…

vnc远程管理kvm,在办公室连接kvm服务器

文章目录 vnc远程管理kvm vnc远程管理kvm vnc概念图 首先试试服务器装了VNC没 rpm -q tigervnc tigervnc-server没安装的话会直接出现 package tigervnc is not installed package tigervnc-server is not installed第一步&#xff0c;安装VNC packages&#xff1a; yum …

安装一台KVM服务器

1.安装一台KVM服务器 问题 本例要求安装一台可用的KVM服务器&#xff1a; 1)准备一台CentOS6服务器 2)安装虚拟化相关包组 3)启动libvirtd服务 方案 在CentOS6系统中&#xff0c;KVM虚拟化相关的软件组包括四个&#xff1a;虚拟化、虚拟化客户端、虚拟化工具、虚拟化平台&a…

kvm服务器创建虚拟机

virsh创建kvm虚拟机 详细讲解在Linux服务器上通过virsh工具创建kvm虚拟机&#xff0c;以及一些kvm虚拟机常用命令&#xff0c;如&#xff1a;创建、启动、删除、销毁等。 注意事项&#xff1a;在进行kvm虚拟机创建前需要确认Linux内核已经开启kvm功能。另一方面&#xff0c;vi…

Linux 安装KVM服务器

1.安装一台KVM服务器 问题 本例要求安装一台可用的KVM服务器&#xff1a; 1)准备一台CentOS6服务器 2)安装虚拟化相关包组 3)启动libvirtd服务 方案 在CentOS6系统中&#xff0c;KVM虚拟化相关的软件组包括四个&#xff1a;虚拟化、虚拟化客户端、虚拟化工具、虚拟化平台&a…

KVM如何装服务器系统,手把手教你配置KVM服务器

1 Ubuntu系统安装 1.1 制作启动盘 准备一个U盘,将其清空后,去官网下载Ubuntu18.04系统的iso镜像文件,并将其拷进U盘。然后下载一个UltralOS软碟通工具,完成安装后打开软碟通,文件->打开,打开我们的iso镜像,选择U盘点击启动->写入硬盘映像,最后写入就完成U盘启动盘…

Centos7安装kvm服务器

Centos7安装kvm服务器 什么是kvmvirt-manager及相关软件简介KVMQEMULibvirt KVM常用配置文件查看libvirtd配置文件查看libvirtd 守护进程的环境变量和参数 查看QEMU虚拟机监控程序配置 0.检查硬件是否支持kvm虚拟化检查CPU是否支持KVM虚拟化启动kvm虚拟化内核模块 1.启用嵌套虚…

稳定的kvm服务器,kvm服务器

kvm服务器 内容精选 换一换 可以。平台近期对磁盘功能进行了升级&#xff0c;对于系统升级后创建的弹性云服务器&#xff0c;系统最多支持挂载60块磁盘。具体如下&#xff1a;创建弹性云服务器时&#xff0c;您可以为弹性云服务器添加24块磁盘。弹性云服务器创建成功后&#xf…