使用Open CV和OCR提高从彩色背景图像中提取数据的效果

我正在尝试从手机屏幕截图中提取一些信息。尽管我的代码能够检索到一些信息,但并不是全部。我读取了转换为灰度的图像,然后移除了不需要的部分并应用了高斯阈值处理。但是,无法读取所有的文本。

import numpy as npimport cv2from PIL import Imageimport matplotlib.pyplot as pltimport pytesseractpytesseract.pytesseract.tesseract_cmd = r'C:\\Installs\\Tools\\Tesseract-OCR\\tesseract.exe'image = "C:\\Workspace\\OCR\\tesseract\\rpstocks1 - Copy (2).png"img = cv2.imread(image)img_grey = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)height, width, channels = img.shapeprint (height, width, channels)rec_img=cv2.rectangle(img_grey,(30,100),(1040,704),(0,255,0),3).copy()crop_img = rec_img[105:1945, 35:1035].copy()cv2.medianBlur(img,5)cv2.imwrite("C:\\Workspace\\OCR\\tesseract\\Cropped_GREY.jpg",crop_img)img_gauss = cv2.adaptiveThreshold(crop_img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,12)cv2.imwrite("C:\\Workspace\\OCR\\tesseract\\Cropped_Guass.jpg",img_gauss)text = pytesseract.image_to_string(img_gauss, lang='eng')text.encode('utf-8')print(text)

输出

图像尺寸 704 1080 3

投资

$9,712.99 ASRT _ 0500.46 shares  ......... ..  /0 GNUS 25169 Shares  """"" " ‘27.98%

rpstocks1 – Copy (2).pngrpstocks1 - Copy (2).pngCropped_GREY.jpgCropped_GREY.jpgCropped_Guass.jpgCropped_Guass.jpg


回答:

请查看pytesseract的页面分割模式,参见这个问答。例如,使用config='-psm 12'已经可以获取到所有需要的文本。然而,这些图表也被某种程度上解释为文本。

因此,我会预处理图像以获取单个框(实际文本、图表、顶部信息等),然后过滤只存储那些包含感兴趣内容的框。这可以通过以下方式完成:

  • 使用边界矩形的y坐标(不在图像上方5%的位置,即手机状态栏),
  • 使用边界矩形的宽度w(不超过图像宽度的50%,这些是水平线),
  • 使用边界矩形的x坐标(不在图像中间三分之一的位置,这些是图表)。

剩下的就是在每个裁剪的图像上运行pytesseract,例如使用config='-psm 6'(假设是一个统一的文本块),并清理文本中的任何换行符。

这将是我的代码:

这是输出结果:

['Investing', '$9,712.99', 'ASRT', '-27.64%', '500.46 shares', 'GNUS', '-27.98%', '251.69 shares']

由于你有边界矩形的位置信息,你还可以利用这些信息重新排列整个文本。

----------------------------------------系统信息----------------------------------------平台:      Windows-10-10.0.16299-SP0Python:        3.9.1PyCharm:       2021.1.1OpenCV:        4.5.1pytesseract:   4.00.00alpha----------------------------------------

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注