OCR识别表格中的参数及参数值

news/2025/2/24 13:22:42/文章来源:https://www.cnblogs.com/jicing/p/18717927

一、需求

识别固定表格中的文字,输出表格中的参数字典

二、整体思路

  1. 找到一张含有表格的图片,利用mac自带的预览工具分析出图片每个单元格的对角线坐标,
  2. 使用程序根据图片文件和对角线坐标数组,分割图片为很多个小图片,
  3. 采用tesseract库识别单个单元格中的文字,并将识别出来的所有文字输出到同一个文本文件中。

三、开发环境准备

Mac上安装VSCode,VSCode中安装python扩展,使用venv这个python自带的虚拟环境,建立测试venv工作区后利用.venv/bin/pip3安装tesseract和pillow类库

.venv/bin/pip3 install pillow
.venv/bin/pip3 install tesseract

.venv/bin/pip3 install pytesseract
.venv/bin/pip3 install opencv-python
.venv/bin/pip3 install numpy
.venv/bin/pip3 install scikit-image

 

四、开发步骤

建立根目录及相关功能目录,并使用VSCode打开根目录

 编写图片分割程序

 1 import os
 2 from PIL import Image
 3 
 4 img = "imgs2txt/imgs/合格证.jpg"
 5 pix_a = [(20,3,428,20),     (428,3,700,20),
 6          (20,20+1,428,20*2),(428,20+1,700,20*2)]
 7 
 8 def cut_by_pix_a(img, xys):
 9     number_of_pic = len(xys)
10     image = Image.open(img)
11     print(f'这个图像是{image.width} x {image.height}')
12     name1, name2 = os.path.dirname(img) + "/splits/" ,os.path.basename(img).split(".")[-2]+"_cut_"
13     for p in xys:
14         name3 = name1+name2+str(p)+".jpg"
15         im2 = image.crop(p)
16         im2.save(name3)
17     print(f"一共完成了{len(xys)}个文件.")
18 
19 cut_by_pix_a(img, pix_a)

编写图片增强处理器

分割后发现图片非常模糊识别时,汉子无法识别出来,所以编写图片锐化程序,提高图片识别精度

import cv2
import numpy as np
from skimage import filtersdef preprocess_image_old(img_path):img = cv2.imread(img_path)# 1.灰度化gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 2.去操(中值滤波)denoised = cv2.medianBlur(gray, 3)# 3.自适应二值化binary = cv2.adaptiveThreshold(denoised, 255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY, 11, 2)# 4.锐化处理(拉普拉斯算子)kernel = np.array([[0, -1, 0], [-1, 5,-1], [0, -1, 0]])sharpened = cv2.filter2D(binary, -1, kernel)# 5.形态学操作(去除小噪点)kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2))cleaned = cv2.morphologyEx(sharpened, cv2.MORPH_OPEN, kernel)return cleaneddef preprocess_image(img_path):img = cv2.imread(img_path)# 1.灰度化# gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 1.去操(中值滤波)denoised = cv2.medianBlur(img, 3)# 2.自适应二值化binary = cv2.adaptiveThreshold(denoised, 255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY, 11, 2)# 3.锐化处理(拉普拉斯算子)kernel = np.array([[0, -1, 0], [-1, 5,-1], [0, -1, 0]])sharpened = cv2.filter2D(binary, -1, kernel)# 5.形态学操作(去除小噪点)kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2))cleaned = cv2.morphologyEx(sharpened, cv2.MORPH_OPEN, kernel)return cleanedimg1_path = 'imgs2txt/imgs/splits/合格证_cut_(20, 3, 106, 20).jpg'
r = preprocess_image(img1_path)
cv2.imwrite('imgs2txt/imgs/cleaned/合格证_cut_(20, 3, 106, 20).jpg', r)
print(r)

 

 

编写单个图片识别程序

 
import pytesseract
from PIL import Imageimg1_path = 'imgs2txt/imgs/splits/合格证_cut_(20, 3, 106, 20).jpg'def basic_ocr(img_path):img = Image.open(img_path)text = pytesseract.image_to_string(img, lang='chi_sim')return textdef advanced_ocr(img_path):custom_config = r'--oem 3 --psm 6 -c tessedit_char_whitelist=0123456789'text = pytesseract.image_to_string(Image.open(img_path),lang='chi_sim',config=custom_config)return textprint("基本识别结果" + basic_ocr(img1_path))
print("高级识别结果" + advanced_ocr(img1_path))

 

待处理的图片

 

......未完待续

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/884654.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H800 Nvlink 基础环境配置(Ubuntu20.04 )

H100/800 SXM的8卡服务器在配置多机互联环境时,除了要安装Nvidia的GPU驱动,还需要安装FabricManager。 Nvidia 提供了在线安装和离线安装两种方式。Z项目H800 NVL 基础环境配置(Ubuntu20.04 ) 操作系统基础安装 配置源 本操作在Ubuntu 20.04下完成, 所有命令都以root身份执行…

c_note

c笔记一、变量 1、变量的声明 ​ 变量的声明是给编译器看的,告诉编译器变量的类型以及名字等相关的信息。 格式:数据类型 变量名; 变量的声明显然是一个编译时概念,所以它和程序的运行没有太大的关系。 一个变量具有声明,并不意味着该变量会在运行时期分配内存空间。 2、…

Drasi Sources SDK

什么是Drasi数据源(Source)?Source提供了与系统的连接,Drasi 可以将这些系统视为变化源。source 在 Drasi 中执行三个重要功能:处理源系统生成的更改日志/源,并将这些更改推送到使用该源作为输入的每个连续查询。 将源更改数据转换为一致的属性图数据模型,以便订阅的 Co…

【每日一题】20250216

人生就是这样,不经历鲜血淋漓的疼痛,就不会明白那些曾经让我们厌烦的说教其实是受用一生的信条。【每日一题】(多选)如图所示,在竖直半面内有一半径为 \(R\) 的圆弧轨道.半径 \(OA\) 木平、\(OB\) 竖直,一个质量为 \(m\) 的小球自 \(A\) 的正上方 \(P\) 点由静止开始自由…

数据团队必读:智能数据分析文档(DataV Note)五种高效工作模式

数据项目,无论是数据分析、可视化,还是数据科学和机器学习相关的项目,通常都非常复杂,涉及多个组成部分,比如代码、数据、运行环境、SQL脚本以及分析报告等;与此同时,随着AI时代的到来,数据科学领域正经历重大变革。这对于数据科学团队来说,如何保持高效地工作模式一直…

SU镜像:缩放s

su没有镜像,可用:缩放s 选中要镜像的对象——复制一个——s——找到中间的点——向右拉动——输入 -1

LGP1377 [TJTS 2011] 树的序 学习笔记

LGP1377 [TJTS 2011] 树的序 学习笔记 Luogu Link 题意简述 给一个生成序列 \(p\),简单起见 \(p\) 是一个长为 \(n\) 的排列。按照这样的步骤生成一棵二叉搜索树:往空树中插入 \(p_i\),则 \(p_i\) 成为当前二叉搜索树的根。 往非空树 \(u\) 中插入 \(p_i\),若 \(p_i\) 小于…

vxe-input绑定keyup事件传递的参数

一、VUE3中 Input输入框绑定keyup事件传递的$event 代码一:<script setup>function judgeIsEnterToSerach(event){console.log(event,1111);console.log(event.key,2222);console.log(event.target,230923);console.log(event.target.value,3333);console.log(event.tar…

清华大学推出第二讲 DeepSeek 如何赋能职场应用?从提示语技巧到多场景应用!

前言 清华大学第二讲《DeepSeek如何赋能职场应用》是一份35页的专业文档,详细探讨了DeepSeek在职场中的多场景应用及其赋能作用,从提示语技巧到多场景应用,咱们打工人有福啦!DeepSeek访问地址:https://chat.deepseek.com 清华大学推出的 DeepSeek 从入门到精通(104页)免…

信创

概念 “信创“ (全称“信息技术应用创新”)是国家基于国产芯片和操作系统的PC、服务器、网络设备、存储设备、数据库、中间件等基础设施的技术创新。 信创CPU概览

LGP5854 [LG TPLT] 笛卡尔树 学习笔记

LGP5854 [LG TPLT] 笛卡尔树 学习笔记 Luogu Link 题意简述 给定一个长为 \(n\) 的排列 \(p\),以 \(i\) 为键,\(p_i\) 为值构建 \(p\) 中所有元素的笛卡尔树。 做法解析 定义“右链”为从根开始一直往右儿子走形成的一条链。 因为我们照键从小到大的顺序插入每一个元素,所以…

11.4.3 凸目标的收敛性分析

式\((11.47)\)应该有误,不等号左边还应该有一个项\(-E[||x_T-x^{*}||^2]\),之所以没写估计是因为认为\(x_T\)非常接近\(x^{*}\),所以可以忽略;另外不等号右边的括号打错了,应该是 \[2\underset{t=1}{\overset{T}{\sum}}\eta_tE[R(x_t)]-2S_1R^*-S_2L^2 \],其中\(S_1=\und…