pytesseract не распознает числа на картинке с помощью OCR

#python-3.x #python-tesseract

#python-3.x #python-tesseract

Вопрос:

Я пытаюсь использовать Python-tesseract для извлечения цифр из этого (изображения) с помощью оптического распознавания символов (OCR). По какой-то причине pytesseract не распознает цифры, и я не совсем понимаю, почему (расстояние между числами?).

Может ли кто-нибудь помочь мне понять, как правильно извлечь цифры из этого изображения?

Приведенный ниже код ничего не печатает

      im.save("sudo.png")
     text = pytesseract.image_to_string(im)
     print(text)
  

Ответ №1:

Небольшая предварительная обработка и использование ROI для указания, где находятся слова, помогут. По умолчанию OCR использует анализ макета страницы для определения блоков текста. В этом случае изображение не выглядит как обычная страница текста (например, статья в формате PDF). Чтобы упростить распознавание, сначала вы можете найти расположение слов с помощью regionprops, а затем передать расположение слов (в виде ограничивающих рамок) функции OCR. Смотрите приведенный ниже код и результаты. Они выглядят точными. Возможно, вам придется больше повозиться с предварительной обработкой, чтобы сделать это надежным для коллекции разных изображений. Но, надеюсь, это даст вам представление о том, как действовать дальше:

     capture = imread('Captura.PNG');
    % Increase image size by 3x
    my_image = imresize(capture, 3);
    figure
    imshow(my_image)
    % Localize words
    BW = imbinarize(rgb2gray(my_image));
    BW1 = imdilate(BW,strel('disk',6));
    s = regionprops(BW1,'BoundingBox');
    bboxes = vertcat(s(:).BoundingBox);
    % Sort boxes by image height
    [~,ord] = sort(bboxes(:,2));
    bboxes = bboxes(ord,:);
    % Pre-process image to make letters thicker
    BW = imdilate(BW,strel('disk',1));
    % Call OCR and pass in location of words. Also, set TextLayout to 'word'
    ocrResults = ocr(BW,bboxes,'CharacterSet','.0123456789','TextLayout','word');
    words = {ocrResults(:).Text}';
    words = deblank(words)