Распознать определенные c номера из изображения таблицы с помощью Pytesseract OCR - PullRequest
2 голосов
/ 02 февраля 2020

Я хочу прочитать столбец числа из прикрепленного изображения (файл png).

click to see image

Мой код

import cv2
import pytesseract
import os

img = cv2.imread(os.path.join(image_path, image_name), 0)
config= "-c 
        tessedit_char_whitelist=01234567890.:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

pytesseract.image_to_string(img, config=config)

Этот код дает мне выходная строка: 'n113 \ nun \ n1.08'. Как мы видим, есть две проблемы:

  1. Не удается распознать десятичную точку в 1.13 (см. Прилагаемое изображение).
  2. Абсолютно не может прочитать 1.11 (см. Прилагаемое изображение) , Он просто возвращает «монахиня».

Какое решение этих проблем?

Лучи

1 Ответ

0 голосов
/ 04 февраля 2020

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

image

Результат от распознавания символов

1.13
1.11
1.08

Код

import cv2
import pytesseract
import imutils

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# Resize, grayscale, Otsu's threshold
image = cv2.imread('1.png')
image = imutils.resize(image, width=400)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

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

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