openpaperwork / pyocr

A Python wrapper for Tesseract and Cuneiform -- Moved to Gnome's Gitlab
https://gitlab.gnome.org/World/OpenPaperwork/pyocr
930 stars 152 forks source link

Potential bug: output of Tesseract (C-API) and Tesseract (sh) is different #50

Open mathiasimmer opened 7 years ago

mathiasimmer commented 7 years ago

I got this simple example:

from PIL import Image
from pyocr import pyocr

py_img = Image.open('text.png')
for tool in pyocr.get_available_tools():
    print("Using pyocr tool '%s'" % (tool.get_name()))
    print(tool.image_to_string(py_img))

Where text.png is: text

As this is a fairly simple case I would have expected the outcome to be the same however the outcome is:

Using pyocr tool 'Tesseract (C-API)'
Empty page!!

Using pyocr tool 'Tesseract (sh)'
3/2

Is this a bug or are the two tools configured differently by default? I know the Tesseract (C-API) works properly on my computer as I have used it successfully with similar but different input, however in this very particular case, it fails.

mathiasimmer commented 7 years ago

Maybe I should add an example where the output is there same: text2 gives:

Using pyocr tool 'Tesseract (C-API)'
l/Z
Using pyocr tool 'Tesseract (sh)'
l/Z

Which was more like what I would've expected. Ignore that the text is wrong; I know how to fix that, but at least the output is consistent.

jflesch commented 7 years ago

I observed a similar problems when making the tests. The output of libtesseract and tesseract (sh) are slightly different. Quite frankly I'm not sure where this difference comes from.

Currently, my main theory is that it comes from the way images are read:

amitdo commented 6 years ago

I don't know if it's related to this issue, but one difference between tesseract and libtesseract is the default psm. The default psm in tesseract is '3', while in libtesseract it's '6'.

https://github.com/tesseract-ocr/tesseract/blob/cdc35338c53a1af1fcb95473445f2aabfdb3f6d1/api/tesseractmain.cpp#L222

jflesch commented 6 years ago

Good point. It might explain the differences. I'll have a look later.