如何使用Pytesseract提取图像中的小数

时间:2019-08-13 14:59:09

标签: python opencv image-processing computer-vision python-tesseract

Image to Extract

以上是图片,我已经尝试过可以从SO或google获得的所有内容,但似乎没有任何效果。我无法在image中获得确切的值,我应该得到2.10,而总是得到210。

并且不仅限于此图像,任何在数字1 tesseract之前具有十进制的图像都会忽略该十进制值。

MediaPlayer player = MediaPlayer.create(Activity.this, R.raw.some_file);
player.start();

3 个答案:

答案 0 :(得分:4)

在将图像丢入Pytesseract之前,进行一些清洁/平滑图像的预处理会有所帮助。这是一种简单的方法

  • 将图像转换为灰度并放大图像
  • 阈值
  • 执行形态学操作以清洁图像
  • 反转图像

首先,我们将图像转换为灰度图像,使用imutils库调整大小,然后使用阈值获得二进制图像

enter image description here

现在我们执行morphological transformations来平滑图像

enter image description here

现在,我们将Pytesseract的图像反转并添加高斯模糊

enter image description here

我们使用--psm 10配置标志,因为我们希望将图像视为单个字符。这是一些可能有用的其他configuration flags

结果

  

2.10美元

过滤后

  

2.10

import cv2
import pytesseract
import imutils

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

image = cv2.imread('1.png',0)
image = imutils.resize(image, width=300)
thresh = cv2.threshold(image, 150, 255, cv2.THRESH_BINARY_INV)[1]

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
close = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

result = 255 - close 
result = cv2.GaussianBlur(result, (5,5), 0)

data = pytesseract.image_to_string(result, lang='eng',config='--psm 10 ')
processed_data = ''.join(char for char in data if char.isnumeric() or char == '.')
print(data)
print(processed_data)

cv2.imshow('thresh', thresh)
cv2.imshow('close', close)
cv2.imshow('result', result)
cv2.waitKey()

答案 1 :(得分:1)

通过使用其他答案中提到的方法,我能够增加正确小数的数量。然而,有一小部分小数没有被正确识别。

我找到的解决方案是更改 pytesseract 的语言设置。

我使用的是非英语设置,但将配置更改为 lang='eng' 解决了所有剩余问题。

不确定是什么原因,但使用 Tesseract 的新 LSTM 引擎,训练数据可能主要是英语。

答案 2 :(得分:0)

有时,tesseract对图像大小异常敏感。通常,通过缩放图像可以获得更好的结果。

我将您的图片缩放了2倍,并获得了不错的效果。

import cv2
import pytesseract

# if windows
# pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe'

img = cv2.imread('twoten.png', 0)
img = cv2.resize(img, (0,0), fx=2, fy=2)

config = ("--psm 12")

data = pytesseract.image_to_string(img, lang='eng', config = config)

print(data)

在控制台中提供了此功能:

$2.10