python-3.x PyTesseract多页TIFF图像错误

ovfsdjhp  于 2023-05-23  发布在  Python
关注(0)|答案(1)|浏览(211)

当我读取一个15页的多页Tiff图像,并且是一个白色背景中的黑色字母/单词的文档时,PyTesseract抛出一个“OSError:-9”错误在我循环页面并转换为字符串的步骤。
我使用pytesseract包沿着pyocr.builders。单页似乎工作正常,但我相信错误时,图像不是在RGB的程序转换为RGB。

img = Image.open(r'\users\ai\text.tiff')
img.load()
txt = ""
for frame in range(0, img.n_frames):
    img.seek(frame)
    txt += tool.image_to_string(img,builder=pyocr.builders.TextBuilder())

预期输出为jupyter窗口中显示的所有15页。
错误信息

---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-17-e59bdf3b773c> in <module>
      2 for frame in range(0, img.n_frames):
      3     img.seek(frame)
----> 4     txt += tool.image_to_string(img,builder=pyocr.builders.TextBuilder())
      5 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pyocr\tesseract.py in image_to_string(image, lang, builder)
    357     with tempfile.TemporaryDirectory() as tmpdir:
    358         if image.mode != "RGB":
--> 359             image = image.convert("RGB")
    360         image.save(os.path.join(tmpdir, "input.bmp"))
    361         (status, errors) = run_tesseract("input.bmp", "output", cwd=tmpdir,

~\AppData\Local\Continuum\anaconda3\lib\site-packages\PIL\Image.py in convert(self, mode, matrix, dither, palette, colors)
    932         """
    933 
--> 934         self.load()
    935 
    936         if not mode and self.mode == "P":

~\AppData\Local\Continuum\anaconda3\lib\site-packages\PIL\TiffImagePlugin.py in load(self)
   1097     def load(self):
   1098         if self.use_load_libtiff:
-> 1099             return self._load_libtiff()
   1100         return super(TiffImageFile, self).load()
   1101 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\PIL\TiffImagePlugin.py in _load_libtiff(self)
   1189 
   1190         if err < 0:
-> 1191             raise IOError(err)
   1192 
   1193         return Image.Image.load(self)

OSError: -9
odopli94

odopli941#

对于这样的问题,您应该提供一个Minimum Reproducible Example,因为有一些代码被遗漏了。此外,您还应该提供测试映像。但是,对于本例,您不能附加多页TIFF,因此最好提供指向多页TIFF的链接。
我可以从this question中找到this test image。这是一个10页的TIFF。
下面是一个使用pyocr的解决方案:

from PIL import Image

import pytesseract
import pyocr
import pyocr.builders

tools = pyocr.get_available_tools()
tool = tools[0]

# pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe'

image = Image.open('multipage_tiff_example.tif')

# set Page Segmentation Mode to 6 
# (i.e. assume a single uniform block of text)
config = ("--psm 6")

txt = ''
for frame in range(image.n_frames):
    image.seek(frame)
    txt = tool.image_to_string(image, builder=pyocr.builders.TextBuilder())
    print(txt)

下面是一个使用pytesseract的解决方案:

from PIL import Image
import pytesseract

# pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe'

image = Image.open('multipage_tiff_example.tif')

# set Page Segmentation Mode to 6 
# (i.e. assume a single uniform block of text)
config = ("--psm 6")

txt = ''
for frame in range(image.n_frames):
    image.seek(frame)
    txt += pytesseract.image_to_string(image, config = config, lang='eng') + '\n'
    
print(txt)

两者都给予这个输出:

Multipage
TIFF
Example
Page 1
Multipage
TIFF
Example
Page 2
Multipage
TIFF
Example
Page 3
Multipage
TIFF
Example
Page 4
Multipage
TIFF
Example
Page5
Multipage
TIFF
Example
Page 6
Multipage
TIFF
Example
Page /
Multipage
TIFF
Example
Page 8
Multipage
TIFF
Example
Page 9
Multipage
TIFF

Example

Page 10

相关问题