以上是图片,我已经尝试过可以从SO或google获得的所有内容,但似乎没有任何效果。我无法在image中获得确切的值,我应该得到2.10,而总是得到210。
并且不仅限于此图像,任何在数字1 tesseract之前具有十进制的图像都会忽略该十进制值。
MediaPlayer player = MediaPlayer.create(Activity.this, R.raw.some_file);
player.start();
答案 0 :(得分:4)
在将图像丢入Pytesseract之前,进行一些清洁/平滑图像的预处理会有所帮助。这是一种简单的方法
首先,我们将图像转换为灰度图像,使用imutils
库调整大小,然后使用阈值获得二进制图像
现在我们执行morphological transformations来平滑图像
现在,我们将Pytesseract的图像反转并添加高斯模糊
我们使用--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