Тессеракт обнаруживает 1 и 0 как L и O - PullRequest
1 голос
/ 08 февраля 2020

На этом изображении tesseract определяет текст как LOOOPCS, но это 1000PCS. Используемая мной команда:

tesseract "item_04.png" stdout --psm 6

Я перепробовал все значения psm от 0 до 13

actual image

Согласно предложениям других блогов также задаются вопросы о SO и inte rnet после обрезки изображения и порогового значения.

after clipping and thresholding

after clipping only

Также пробовал -c tessedit_char_whitelist=PCS0123456789, но это дает 00PCS . Но я не получаю 1000 шт. Может кто-нибудь попробовать это и сообщить мне, что мне не хватает?

Редактировать:
Согласно предложению @nathancy, попытался использовать - cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU, который работал с этими 1 и 0, но не получился для изображения ниже , Он определяется как LL8gPcs:
another failing image

1 Ответ

1 голос
/ 11 февраля 2020

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

enter image description here

Результат

1000PCS

Код

import cv2
import pytesseract

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

# Grayscale, Otsu's threshold
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Invert and perform text extraction
thresh = 255 - thresh
data = pytesseract.image_to_string(thresh, lang='eng',config='--psm 6')
print(data)

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