Python Opencv处理在数字纹理图像识别中的应用

Python Opencv处理在数字纹理图像识别中的应用,python,opencv,ocr,python-tesseract,Python,Opencv,Ocr,Python Tesseract,我正在尝试创建一个脚本,读取清洗/干燥周期的剩余时间。为此,我使用了树莓圆周率与凸轮v2.1。我想用Tesseract来做这个。在我的情况下,图像可以在白天拍摄,也可以在夜间拍摄(显示器会因光线强度等原因而看起来不同),我想我必须为每种情况找到解决方案。 在过去的3天里,我一直在尝试寻找一系列的过滤,以使Tesseract能够识别图像,但我找不到合适的设置。我尝试过分割通道、均衡、阈值,但似乎找不到正确的方法:( 以下是我为测试拍摄的一些图像: 干燥器: 洗衣机: 这也是我目前的“播放代

我正在尝试创建一个脚本,读取清洗/干燥周期的剩余时间。为此,我使用了树莓圆周率与凸轮v2.1。我想用Tesseract来做这个。在我的情况下,图像可以在白天拍摄,也可以在夜间拍摄(显示器会因光线强度等原因而看起来不同),我想我必须为每种情况找到解决方案。 在过去的3天里,我一直在尝试寻找一系列的过滤,以使Tesseract能够识别图像,但我找不到合适的设置。我尝试过分割通道、均衡、阈值,但似乎找不到正确的方法:( 以下是我为测试拍摄的一些图像:

干燥器:

洗衣机:

这也是我目前的“播放代码”。有些东西被注释掉了,因为我一直在尝试不同的组合。此外,裁剪部分在我的代码中更精确,只关注数字

import cv2
import pytesseract

dryer_fn = 'dryer.jpg'
washer_fn = 'washer.jpg'
fileName = 'on_dw_light3.jpg'

# cmd = "raspistill -o " + fileName
# subprocess.call(cmd, shell=True)
# Black and White (gray scale)
img = cv2.imread(fileName, 1)

# Dryer
# x_d = 2130
x_d = 1930
y_d = 485
image_d = img[y_d:y_d + 30, x_d:x_d + 70]
image_d = cv2.resize(image_d, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)
b, g, r = cv2.split(image_d)
# cv2.imshow('blue', b)
# cv2.imshow('green', g)
# cv2.imshow('red', r)
(rows_d, cols_d) = image_d.shape[:2]
# image_d = cv2.cvtColor(image_d, cv2.COLOR_BGR2GRAY)
# image_d = cv2.equalizeHist(image_d)
# cv2.imshow("Equalized D", eq_d)
ret, image_d = cv2.threshold(image_d, 150, 255, cv2.THRESH_BINARY_INV)

# gray_d = cv2.cvtColor(thresh_d, cv2.COLOR_BGR2GRAY)
# gray = cv2.bilateralFilter(gray, 5, 70, 70)
# ret, thresh_d = cv2.threshold(gray_d, 1, 255, cv2.THRESH_BINARY)
# Washer
# Crop
x_w = 1818
y_w = 2260
image_w = img[y_w:y_w + 30, x_w:x_w + 70]
image_w = cv2.resize(image_w, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)
(rows_w, cols_w) = image_w.shape[:2]
image_w = cv2.cvtColor(image_w, cv2.COLOR_BGR2GRAY)
image_w = cv2.equalizeHist(image_w)
# cv2.imshow("Equalized W", eq_w)
ret, image_w = cv2.threshold(image_w, 220, 255, cv2.THRESH_BINARY_INV)

# gray_w = cv2.cvtColor(thresh_w, cv2.COLOR_BGR2GRAY)
# image_w = cv2.bilateralFilter(image_w, 5, 20, 20)
# ret, thresh_w = cv2.threshold(gray_w, 1, 255, cv2.THRESH_BINARY)
# image_w = cv2.Canny(image_w, 100, 200)
cv2.imshow("Dryer time", image_d)
cv2.imshow("Washer time", image_w)
cv2.imwrite(dryer_fn, image_d)
cv2.imwrite(washer_fn, image_w)
text_d = pytesseract.image_to_string(image_d, config='-l eng --oem 3 --psm 8')
text_w = pytesseract.image_to_string(image_w, config='-l eng --oem 3 --psm 8')
print(text_d)
print(text_w)
cv2.waitKey(0)
cv2.destroyAllWindows()
任何关于如何正确处理这些图像的想法都将受到欢迎