OCR каждый файл .png в папке - PullRequest
0 голосов
/ 03 июля 2018

Я хочу перебирать каждый файл .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)

Выход:

Traceback (последний вызов был последним): File «C: \ Users \ Artur \ Desktop \ Pytesseract_test.py», строка 9, в Image = Image.open (имя файла) AttributeError: у объекта 'PngImageFile' нет атрибута 'open'

Что означает, что объект 'PngImageFile' не имеет атрибута 'open'? Разве Image = Image.open(filename) не делает именно это?

Заранее спасибо

Edit:

Первоначальная ошибка 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)

Вывод: (ocr 'frame_0000.png' правильный, а затем)

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 голосов
/ 03 июля 2018

Ваш первый проход создает объект Image, который является Image.open(filename), или реализацию метода 'open' из класса 'Image' в файле 'filename'. Это то, что вы хотите на каждой итерации. К сожалению, вы сделали загрузку класса 'Image' в пользу вашего нового объекта '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)
0 голосов
/ 03 июля 2018

Измените имя переменной Image на другое, например pic или picture

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...