【问题标题】:tesseract Image.open for multi page filestesseract Image.open 用于多页文件
【发布时间】:2021-10-29 07:45:14
【问题描述】:

此代码访问包含单页 .tif 文件的文件夹并提取文本数据。

data = []
data1 = []
listOfPages = glob.glob(r"C:/Users/name/folder/*.tif")
for entry in listOfPages:
    if os.path.isfile(entry):
        filenames = entry
    data1.append(filenames)
    text1 = pytesseract.image_to_string(
            Image.open(entry), lang="en"
        )
    text = re.sub(r'\n',' ', text1)     
    regex1 = re.compile(r'(www(i|ı)a\s+bbb(\:)?(\s+|\s+\.)?\s+(de(s|r(:)?))?)', flags = re.IGNORECASE)
        
    try:
        var1a = regex1.search(text)
        if var1a:
            var1 = var1a.group(1)
        else:
            var1 = None
    except:
        pass
        
    data.append([text, var1])
    
df0 = pd.DataFrame(data, columns =['raw_text', 'var1'])
df01= pd.DataFrame(data1,columns =['filename'])
df1 = pd.concat([df0, df01], axis=1)
df1 = df1.reset_index(drop = True)

如果我最终将 multipage.tif 文件添加到该文件夹​​中,我该如何使其工作?我无法将 Image.opn(entry) 部分转换成这样的:

img = Image.open(path)
images = []
for i in range(img.n_frames):
    img.seek(i)
    images.append(np.array(img))
return np.array(images)

【问题讨论】:

    标签: python tesseract python-tesseract


    【解决方案1】:
    1. 您可以将np.array 传递给image_to_string 方法。 Pytesseract 会自己处理(见https://github.com/madmaze/pytesseract/blob/master/pytesseract/pytesseract.py#L168)
        text1 = pytesseract.image_to_string(np.array(img), lang="en")
    
    1. 或者在将图像传递给 pytesseract 之前从数组而不是文件中创建图像:
        text1 = pytesseract.image_to_string(Image.fromarray(np.array(img)), lang="en")
    

    这是一个完整的例子(没有循环和进一步处理):

    import numpy as np
    from PIL import Image
    import pytesseract
    tif = Image.open('multipage_tif_example.tif')
    tif.seek(0)
    img_page1 = np.array(tif)
    
    # Variant 1
    text1 = pytesseract.image_to_string(img_page1, lang="eng")
    
    # Variant 2
    text1 = pytesseract.image_to_string(Image.fromarray(img_page1), lang="eng")
    

    我使用的版本是:

    • Python 3.9.7
    • pytesseract==0.3.8
    • numpy==1.21.3
    • 枕头==8.4.0

    tiff 来自http://www.nightprogrammer.org/development/multipage-tiff-example-download-test-image-file/

    【讨论】:

    • 感谢您的建议。当我执行text1 = pytesseract.image_to_string(np.array(entry), lang="en") 或text1 = pytesseract.image_to_string(Image.fromarray(np.array(entry)), lang="en") 时,会出现错误TypeError: Cannot handle this data type: (1, 1), <U52
    • 我自己试了试,上面的配置也行。可能与您的版本有关,或者您的 tif 图像损坏/不符合标准。这只是疯狂的猜测。
    • 我用python 3.9.7 pytesseract 0.3.8 numpy 1.21.2 pillow 8.3.2,网上说和dtype有关np.uint8
    猜你喜欢
    • 2018-12-13
    • 1970-01-01
    • 2018-08-09
    • 2013-09-26
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    相关资源
    最近更新 更多