Я пытаюсь сделать OCR транспортных средств, таких как поезда или грузовики, чтобы идентифицировать числа и персонажи, написанные на них. (Обратите внимание, что это не идентификационный номер OCR)Как улучшить OCR текста, написанного на автомобилях?
Я взял это изображение. Идея состоит в том, чтобы иметь возможность извлекать текст - BN SF 721 734, написанный на нем.
Для предварительной обработки, я сначала превращаю это изображение в оттенки серого, а затем превращаю его в двоичную форме изображения, которое выглядит примерно так
Я написал код в тессеракте.
myimg = "image.png"
image = Image.open(myimg)
with PyTessBaseAPI() as api:
api.SetImage(image)
api.Recognize()
words = api.GetUTF8Text()
print words
print api.AllWordConfidences()
Этот код дал мне пустой выход с доверительным значением 95, что означает, что тессеракт был 95% уверен, что текст не существует в этом образе.
Затем я использовал setrectangle api в Tesseract, чтобы ограничить OCR в определенном окне внутри изображения, вместо того, чтобы делать OCR на всем изображении.
myimg = "image.png"
image = Image.open(myimg)
with PyTessBaseAPI() as api:
api.SetImage(image)
api.SetRectangle(665,445,75,40)
api.Recognize()
words = api.GetUTF8Text()
print words
print api.AllWordConfidences()
print "----"
координаты 665, 445, 75 и 40 соответствуют прямоугольника, который содержит текст BNSF 721 734 в изображении. 665 - верх, 445 - левый, 75 - ширина и 40 - высота.
Выход я получил это:
an s
m,m
Мой вопрос, как я могу улучшить результаты? Я играл со значениями в функции setrectangle, и результаты менялись немного, но все они были одинаково плохими.
Есть ли способ улучшить это?
Если вы заинтересованы в том, как я преобразовал изображения в двоичные изображения, я использовал OpenCV
img = cv2.imread(image)
grayscale_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
(thresh, im_bw) = cv2.threshold(grayscale_img, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
thresh = 127
binarized_img = cv2.threshold(grayscale_img, thresh, 255, cv2.THRESH_BINARY)[1]
Попробуйте извлечь области MSER с помощью OpenCV. Подайте это Tesseract –
@JeruLuke: Попробуй этот вариант. Мне нужно узнать о регионах MSER, потому что я не уверен, как они работают в настоящее время. Мой вопрос заключается в том, поможет ли это повысить точность OCR или просто поможет мне в автоматическом извлечении прямоугольника вокруг текста? Спасибо – Piyush
Попробуйте использовать Transform Width Transform, чтобы сначала определить местоположение текста на изображении. Он специально разработан для поиска текста. Как правило, избегайте бинаризации слишком рано. – Rethunk