从裁剪图像 pytesseract 中获取数字
Get numbers from cropped image pytesseract
我有一张裁剪过的图片,我正在尝试获取该裁剪过的图片上的数字
这是我使用的代码
image = cv2.imread('Cropped.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1)
invert = 255 - opening
data = pytesseract.image_to_string(invert, lang='eng', config='--psm 6')
print(data)
这是示例裁剪图片
所有我得到的都是一些数字,但不是全部。如何增强这样的图像以仅提取数字?
我尝试了这张图片上的代码,但 return 数字不正确
您可以通过三个主要步骤轻松解决此问题
-
- 上采样
-
- 正在申请simple-threshold
-
- 将配置设置为数字
上采样 以实现准确识别。否则 tesseract 可能会误解数字。
阈值仅显示图像的特征。
**配置设置将识别数字
Result
Upsampling
Threshold
Pytesseract
277032200746
Code:
import cv2
import pytesseract
img1 = cv2.imread("kEpyN.png") # "FX2in.png"
gry1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
(h, w) = gry1.shape[:2]
gry1 = cv2.resize(gry1, (w*2, h*2))
thr1 = cv2.threshold(gry1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
txt1 = pytesseract.image_to_string(thr1, config="digits")
print("".join(t for t in txt1 if t.isalnum()))
cv2.imshow("thr1", thr1)
cv2.waitKey(0)
更新:
很可能是版本不匹配导致出现额外的单词和数字。
解决问题的一种方法是获取图像的范围
例如,从阈值图像:
(h_thr, w_thr) = thr1.shape[:2]
thr1 = thr1[0:h_thr-10, int(w_thr/2)-400:int(w_thr/2)+200]
结果将是:
现在如果你阅读,结果应该是这样的output
277032200746
我有一张裁剪过的图片,我正在尝试获取该裁剪过的图片上的数字 这是我使用的代码
image = cv2.imread('Cropped.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1)
invert = 255 - opening
data = pytesseract.image_to_string(invert, lang='eng', config='--psm 6')
print(data)
这是示例裁剪图片
所有我得到的都是一些数字,但不是全部。如何增强这样的图像以仅提取数字?
我尝试了这张图片上的代码,但 return 数字不正确
您可以通过三个主要步骤轻松解决此问题
-
- 上采样
-
- 正在申请simple-threshold
-
- 将配置设置为数字
上采样 以实现准确识别。否则 tesseract 可能会误解数字。
阈值仅显示图像的特征。
**配置设置将识别数字
Result | |
---|---|
Upsampling | |
Threshold | |
Pytesseract | 277032200746 |
Code:
import cv2
import pytesseract
img1 = cv2.imread("kEpyN.png") # "FX2in.png"
gry1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
(h, w) = gry1.shape[:2]
gry1 = cv2.resize(gry1, (w*2, h*2))
thr1 = cv2.threshold(gry1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
txt1 = pytesseract.image_to_string(thr1, config="digits")
print("".join(t for t in txt1 if t.isalnum()))
cv2.imshow("thr1", thr1)
cv2.waitKey(0)
更新:
很可能是版本不匹配导致出现额外的单词和数字。
解决问题的一种方法是获取图像的范围
例如,从阈值图像:
(h_thr, w_thr) = thr1.shape[:2]
thr1 = thr1[0:h_thr-10, int(w_thr/2)-400:int(w_thr/2)+200]
结果将是:
现在如果你阅读,结果应该是这样的output
277032200746