繁体   English   中英

后处理和读取模糊数字 - OpenCV / tesseract

[英]Post-process and read blurred digits - OpenCV / tesseract

我的老板刚刚给了我 9000 张显示万用表输出的图像,他要我阅读所有图像并将电压输出写在一个文本文件上,以便周一早上使用!

我没有办法手动完成,所以我非常需要你的帮助来自动化这个过程。

在此处输入图片说明

我已经做了一些编码。 万用表屏幕位置固定在 9000 张图像上,所以我只是裁剪了图片并放大了屏幕。

到目前为止,这是我的代码:

import pytesseract as tess
tess.pytesseract.tesseract_cmd = r'D:\Programs\Tesseract-OCR\tesseract.exe'
from PIL import Image
from matplotlib import pyplot as plt
import cv2
import numpy as np

img = cv2.imread('test1.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (7,7), 0)
ret, BW = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)

plt.imshow(BW)
plt.show()

print(tess.image_to_string(img,config='digits --oem 3'))

我的代码输出这种图片: 在此处输入图片说明

对于这张图片,tesseract 读取以下数字:138

我在这里有两个问题:第一个是我不知道如何正确预处理我的图片以便 tesseract 轻松阅读它们。

第二个问题:我不知道如何处理小数点。 事实上,有些图片上没有小数点,所以我需要找到一种方法让tesseract读取它。

您认为我需要手动“训练”tesseract,以便达到接近 100% 的准确率吗?

非常感谢您的帮助,同时我会继续研究 OpenCv 函数!

这是原件之一: 在此处输入图片说明

更新后的版本:

好的,所以到目前为止我更新了一点我的代码:

# Loading the picture
img = cv2.imread('test1.JPG')

# Crop - Rotate - Scale up
x = 1400
y = 1375
h = 325
w = 800
img = img[y:y+h, x:x+w]
image = cv2.rotate(img, cv2.ROTATE_180)

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

thresh = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,10))
close = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel, iterations=1)

cv2.imshow('close', close)

x = 0
y = 0
h = 300
w = 750
img = close[y:y+h, x:x+w]

plt.imshow(img)
plt.show()

print(tess.image_to_string(img,config='--psm 7 -c tessedit_char_whitelist=0123456789 --oem 0'))

我得到了一张更精细的图像供 tesseract 分析。 但是小数点仍然没有运气:/。

在此处输入图片说明

您需要大约 3-4 个小时来手动输入它们,只需花费 1 个小时来编写一个包装器来打开图像并让您输入一个值。

在自动化时,我最大的担忧是如果所有测量值都具有相同的千欧单位,您真的应该在您的 open-cv 代码中包含该检查。

祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM