首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >7seg检测中的图像增强技术

7seg检测中的图像增强技术
EN

Stack Overflow用户
提问于 2022-08-12 02:12:20
回答 1查看 70关注 0票数 1

我正在开发一个从7 7Seg中预测数字的系统,我使用的是tesseract OCR引擎和python pytesseract的包装器。

我用相机拍照,然后剪切感兴趣的区域,我发现我必须提高我的图像质量,以提高OCR引擎的准确性。

我使用了一些图像处理技术(灰度->高斯模糊->阈值),我得到了一幅安静的好图像,但tesseract仍然无法检测到图像中的数字。

我使用代码:

代码语言:javascript
复制
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)

输出图像:

输入图像:

发动机通常有一个空的输出,如果没有,它将无法正确地检测数字。

有没有其他的图像处理,我可以用它来获得引擎的潜力。

注:我使用的是数字权值

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-12 02:59:53

如果我稍微改进一下裁剪,并使用页面分段模式7 (这种模式可以实现no page segmentation and assumes a single line of text),这对我来说是可行的。

代码语言:javascript
复制
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的值,因为它在我的计算机上的另一个位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73328587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档