OCR文件夹中的每个.png文件

时间:2018-07-03 14:58:18

标签: python ocr

我想遍历文件夹中的每个.png文件并打印图像中包含的每个文本。第一次迭代工作正常,但第二次迭代出现错误。

代码:

import pytesseract
from PIL import Image
import os

directory = (r'C:\folder...')

for filename in os.listdir(directory):
    if filename.endswith('.png'):
        Image = Image.open(filename)
        im = pytesseract.image_to_string(Image)
        print(im)

输出:

  

回溯(最近通话最近):文件   “ C:\ Users \ Artur \ Desktop \ Pytesseract_test.py”,第9行,在       图片= Image.open(文件名)AttributeError:'PngImageFile'对象没有属性'open'

“ PngImageFile”对象没有属性“ open”是什么意思? Image = Image.open(filename)不能做到这一点吗?

预先感谢

编辑:

最初的PngError问题已解决,但现在发生了另一个PIL库错误:

import pytesseract
from PIL import Image
import os

directory = (r'C:\folder...')

for filename in os.listdir(directory):
    if filename.endswith('.png'):
        img = Image.open(filename)
        im = pytesseract.image_to_string(img)
        print(im)

输出:(然后是'frame_0000.png'的ocr是正确的)

Traceback (most recent call last):
  File "C:\Users\Artur\Desktop\Pytesseract_test.py", line 9, in <module>
    img = Image.open(filename)
  File "C:\Users\Artur\AppData\Local\Programs\Python\Python36\lib\site-packages\PIL\Image.py", line 2580, in open
    fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: 'frame_0001.png'

Edit2:

这很奇怪。当我这样做时:

for filename in os.listdir(r'folderpath...'):
    print(filename)

它工作得很好,遍历每个文件,打印每个文件名。

但是当我这样做时:

for filename in os.listdir(r'folderpath...'):
    print(filename)
    print(pytesseract.image_to_string(Image.open(filename)))

给出错误:

Bewegung_UHF_Plots.m
Traceback (most recent call last):
  File "C:\Users\Artur\Desktop\Pytesseract_test.py", line 19, in <module>
    print(pytesseract.image_to_string(Image.open(filename)))
  File "C:\Users\Artur\AppData\Local\Programs\Python\Python36\lib\site-packages\PIL\Image.py", line 2580, in open
    fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: 'Bewegung_UHF_Plots.m'

2 个答案:

答案 0 :(得分:3)

将变量Image的名称更改为picpicture

答案 1 :(得分:0)

您的第一遍创建了一个Image对象Image.open(filename),或者是文件“文件名”上“图像”类的“打开”方法的实现。这是您每次迭代都想要的。不幸的是,您要做的是引导“ Image”类以使用新的“ Image”对象,因此在第二遍中,Image.open(filename)中的“ Image”未引用“ Image”类,而是按您的“图片”对象。

通过更改解决问题:

Image = Image.open(filename)
im = pytesseract.image_to_string(Image)

收件人:

img = Image.open(filename)
im = pytesseract.image_to_string(img)