我正在开发一个从7 7Seg中预测数字的系统,我使用的是tesseract OCR引擎和python pytesseract的包装器。
我用相机拍照,然后剪切感兴趣的区域,我发现我必须提高我的图像质量,以提高OCR引擎的准确性。
我使用了一些图像处理技术(灰度->高斯模糊->阈值),我得到了一幅安静的好图像,但tesseract仍然无法检测到图像中的数字。
我使用代码:
image = cv2.imread('test.jpg')
image = image[50:200, 300:540]
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image = cv2.GaussianBlur(image, (3,3), 0)
_, image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
cv2.imshow('result', image)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.imwrite('enhanced.jpg', image)
tess_dir_config = r'--tessdata-dir "C:\Program Files\Tesseract-OCR\tessdata"'
text = image_to_string(image, lang='letsgodigital', config=tess_dir_config)
print(text)输出图像:

输入图像:

发动机通常有一个空的输出,如果没有,它将无法正确地检测数字。
有没有其他的图像处理,我可以用它来获得引擎的潜力。
注:我使用的是数字权值
发布于 2022-08-12 02:59:53
如果我稍微改进一下裁剪,并使用页面分段模式7 (这种模式可以实现no page segmentation and assumes a single line of text),这对我来说是可行的。
import cv2
import matplotlib.pyplot as plt
import pytesseract
image = cv2.imread('seven_seg_disp.jpg')
# Strip off top of meter and little percent symbol.
image = image[90:200, 300:520]
# plt.imshow(image)
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image = cv2.GaussianBlur(image, (3,3), 0)
_, image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
# plt.imshow(image)
tess_dir_config = r'--tessdata-dir "../.tesseract" --psm 7'
text = pytesseract.image_to_string(image, lang='letsgodigital', config=tess_dir_config)
text = text.strip()
print(text) # prints 75注意:我更改了tessdata-dir的值,因为它在我的计算机上的另一个位置。
https://stackoverflow.com/questions/73328587
复制相似问题