Трудность чтения текста с помощью pytesseract - PullRequest
0 голосов
/ 28 апреля 2020

Мне нужно прочитать самую высокую температуру на термографических c изображениях, как показано ниже:

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 .

Расположение изображения всегда одинаково, то есть температура всегда в одном и том же месте, поэтому я обрезал изображение до выделить только номер. Я хотел бы (97,7 здесь , и 85,2 здесь ).

Мой код должен найти по этим изображениям, чтобы всегда определять эту температуру и генерировать список, указывающий по наибольшему к наименьшему.

Что вы указали для меня, чтобы улучшить уверенность pytesseract в случае этих изображений?

Примечание 1: Когда я анализирую все изображение (без обрезки), оно возвращает данные, которых даже нет.

Примечание 2. На некоторых изображениях, даже с двоичным числом, pytesseract (image_to_string) не возвращает никаких данных.

Спасибо всем за извинения за опечатки, писать по-английски sh для меня все еще сложно.

1 Ответ

0 голосов
/ 29 апреля 2020

Поскольку у вас одинаковые изображения, вы можете обрезать нужную область, а затем выполнить там обработку. Обработка также проста. Измените на серый, получите порог, инвертируйте, измените размер, а затем выполните OCR. Вы можете увидеть это в моем коде ниже. Он работает на всех ваших прикрепленных изображений.

import cv2
import pytesseract
import os

image_path = "temperature"

for nama_file in sorted(os.listdir(image_path)):
    print(nama_file)

    img = cv2.imread(os.path.join(image_path, nama_file))
    crop = img[43:62, 278:319]
    gray = cv2.cvtColor(crop, cv2.COLOR_BGR2GRAY)
    thresh = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY)[1]
    thresh = cv2.bitwise_not(thresh)
    double = cv2.resize(thresh, None, fx=2, fy=2)

    custom_config = r'-l eng --oem 3 --psm 7 -c tessedit_char_whitelist="1234567890." '
    text = pytesseract.image_to_string(double, config=custom_config)
    print("detected: " + text)

    cv2.imshow("img", img)
    cv2.imshow("double", double)

    cv2.waitKey(0)

cv2.destroyAllWindows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...