pytesseract无法使用OCR识别图片中的数字

时间:2019-03-14 19:33:03

标签: python-3.x python-tesseract

我正在尝试使用Python-tesseract通过光学字符识别(OCR)从此(picture)中提取数字。出于某种原因,pytesseract无法识别数字,我也不完全理解为什么(数字之间的距离?)。

有人可以协助我了解如何从这张图片中正确提取数字吗?

下面的代码无法显示任何内容

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

2 个答案:

答案 0 :(得分:0)

  

出于某种原因,pytesseract无法识别数字,我也不完全理解为什么(数字之间的距离?)。

准确-它是数字之间的距离。例如spaceOCR对于您的图像有相同的问题。

解决方案是进行预处理以将所有数字排列在一行中。或者-如果您始终只有1-9相同的数字-请使用OpenCV查找图像(模板匹配)。

答案 1 :(得分:0)

进行一些预处理并使用ROI指定单词的位置将有所帮助。默认情况下,OCR使用页面布局分析来确定文本块。在这种情况下,图像看起来不像是普通的文本页面(例如,像PDF文章)。 为了使OCR更容易,首先可以使用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)