pytesseract难以阅读文本

时间:2020-04-28 13:23:07

标签: python-3.x text ocr python-tesseract string-decoding

我需要读取热成像图像上的最高温度,如下所示:

IR_1544_INFRA.jpg

IR_1546_INFRA.jpg

IR_1560_INFRA.jpg

IR_1564_INFRA.jpg

我使用了以下代码,这是最好的结果。 我还尝试了其他几种方法,例如:模糊,灰度,二值化等,但是都失败了。

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r"C:\Users\User\AppData\Local\Tesseract-OCR\tesseract.exe"

# Load image, grayscale, Otsu's threshold
entrada = cv2.imread('IR_1546_INFRA.jpg')

image = entrada[40:65, 277:319]

#image = cv2.imread('IR_1546_INFRA.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = 255 - cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Blur and perform text extraction
thresh = cv2.GaussianBlur(thresh, (3,3), 0)
data = pytesseract.image_to_string(thresh, lang='eng', config='--psm 6')
print(data)

cv2.imshow('thresh', thresh)
cv2.waitKey()

在第一张图片中,我发现 this

在第二张图片中,我找到了this

imagem布局始终相同,也就是说,温度始终在同一位置,因此我裁剪了图像以仅隔离数字。我想要(97.7 here和85.2 here)。

我的代码需要从这些图像中查找,以始终检测该温度并生成一个从最高到最低的列表。

在这些图像的情况下,您对我有什么建议来提高pytesseract的自信?

注1:当我分析整个图像(不进行裁剪)时,它返回的数据甚至不存在。

注2:在某些带有二进制数的图像中,pytesseract(image_to_string)不返回任何数据。

谢谢大家,对错字感到抱歉,用英语写对我来说仍然是个挑战。

1 个答案:

答案 0 :(得分:0)

由于图像相同,因此可以裁剪所需的区域,然后在此处进行处理。处理也很简单。更改为灰色,获取阈值,反转,调整大小,然后执行OCR。您可以在下面的代码中看到它。它适用于所有附加的图像。

import json
json1 = '{ "key": {"a": "1", "b": "2", "c": "3", "list": ["5", "6", "7"] } }'
json2 = '{ "key": {"b": "9", "list": ["8"] } }'

json1 = json.loads(json1)
json2 = json.loads(json2)

print(json1) # {'key': {'a': '1', 'b': '2', 'c': '3', 'list': ['5', '6', '7']}}
print(json2) # {'key': {'b': '9', 'list': ['8']}}
print(combine(json1,json2)) # {'key': {'a': '1', 'b': '9', 'c': '3', 'list': ['5', '6', '7', '8']}}