【问题标题】:How to extract data from image that contains tabular data?如何从包含表格数据的图像中提取数据?
【发布时间】:2019-06-08 06:58:34
【问题描述】:

我正在使用 pytesseract、pillow、cv2 对图像进行 OCR 并获取图像中存在的文本。由于我的输入是扫描的 PDF 文档,我首先将其转换为图像 (JPEG) 格式,然后尝试提取文本。我只有一半。输入是一个表格,并且没有显示标题,因为标题有黑色背景。我也试过getstructuringelement,但找不到办法。这是我到目前为止所做的-

import cv2
import os  
import numpy as np 
import pytesseract
#import pillow 

#Since scanned PDF can't be handled by pdf2image, convert the scanned PDF into a JPEG format using the below code- 
filename = path   
from pdf2image import convert_from_path 
pages = convert_from_path(filename, 500) for page in pages:
page.save("dest", 'JPEG')


imgname = "path" 
oriimg = cv2.imread(imgname,cv2.IMREAD_COLOR) 
cv2.imshow("original image", oriimg)
cv2.waitKey(0)


#img = cv2.resize(oriimg,None,fx=0.5,fy=0.5,interpolation=cv2.INTER_CUBIC) 
img = cv2.resize(oriimg,(700,1500),interpolation=cv2.INTER_AREA) 
#here length height  
cv2.imshow("lol", img) 
cv2.waitKey(0) 
cv2.imwrite("changed_dimensionsimgpath", img)


import PIL.Image  
image = cv2.imread(imgname,cv2.IMREAD_COLOR) 
grayedimg = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) grayedimg = 
cv2.threshold(grayedimg, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1] 
cv2.imwrite("H://newim.jpg", grayedimg)


pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files (x86)\Tesseract- 
OCR\tesseract.exe"


text = pytesseract.image_to_string(PIL.Image.open("path"))
print(text)

我的输入表如下所示。具有黑色背景的区域没有被 OCR 识别,也没有被提取为文本。 任何帮助将不胜感激。

图像样本的此代码的输出-

Sun by Select .

F'I‘L‘Mlm":[ [Juir SHIIEF'. ”fillfit Fadll'fi



Brand Type Fragranm Unit: Ithange Dollm 'LChanga Men
Eleanit' Sprayl Grange J.?IEBflI-Efl' 11% '5H'1Elfi9flflfl 35% I E
Eleanlt! kfimnsul' Grange IEEEESWI 39% I521LESM1MH 1113553 ‘ E
Dehuxe F‘mmr [emu 525.940 461% '51:EE?,GED,00 433.6% 5
Datum: Anus»! firing?) 4,3341%} 29% 513573300119 215% E
Dem Spray ‘Drangr: £432,100 09% 515.223.:53000 154%

Min Blaster Aemgul: Dramge ”2114033111 59% :SHSiMMfl H94:

DiFlEIESIEf Sprawl Drama “NEW. 50% ‘5E1D1_E-BDM 141% I
Incredlme Spray Lem 1.513.410" 483% a HELENE] $11143 I E

t“ In

1'"

【问题讨论】:

  • 我真的不知道问题是什么
  • @MEdwin 我正在使用 pytesseract 从图像中提取文本。我的图像实际上是一个包含数据的表格(如问题所示)。我无法显示表中的内容。但是我使用了上面的代码,并且能够从表格数据(绿色)中提取文本,但是无法从图像中提取红色部分。我该如何进行?我有改变背景颜色的想法,但似乎没有帮助(我可能错了)
  • 好的,我现在知道了。因此,由于我们看不到图像及其提取的内容。是否可以创建一个可以捕获问题的测试用例(简化)。所以我们实际上可以看到完整的图像,提取的文本,无法提取的文本。那么我们可以看到为什么代码没有按照您的预期执行?
  • @MEdwin,好的,我现在已经完成了更改。请帮忙
  • 转换为 JPG 是个坏主意。这是一种有损格式,包含可能影响结果的伪影。您应该使用无损压缩图像格式,例如 PNG 或 TIFF。

标签: python opencv ocr tesseract python-tesseract


【解决方案1】:

在cv2.imwrite(temp_filename, gray_img)之后使用cv2就好了

import PIL.Image  
Use config='-psm 6'
page_str = image_to_string(Image.open(temp_filename), lang="eng", config='-psm 6')

这将从表格图像中返回良好的数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2022-10-09
    相关资源
    最近更新 更多