Записать полученный с помощью OCR текст с каждого изображения в отдельный текстовый файл, соответствующий каждому изображению - PullRequest
0 голосов
/ 18 июня 2019

Я читаю файл PDF и преобразую каждую страницу в изображения и сохраняю. Далее мне нужно запустить OCR для каждого изображения, идентифицировать текст каждого изображения и записать его в новый текстовый файл.

Я знаюКак получить весь текст из всех изображений и выгрузить его в один текстовый файл.

pdf_dir = 'dir path'
os.chdir(pdf_dir)

for pdf_file in os.listdir(pdf_dir):
    if pdf_file.endswith(".pdf"):
        pages = convert_from_path(pdf_file, 300)
        pdf_file = pdf_file[:-4]
        for page in pages:
            page.save("%s-page%d.jpg" % (pdf_file,pages.index(page)), "JPEG") 

img_dir = 'dir path'
os.chdir(img_dir)

docs = []

for img_file in os.listdir(img_dir):
    if img_file.endswith(".jpg"):
        texts = str(((pytesseract.image_to_string(Image.open(img_file)))))
        text = texts.replace('-\n', '')  
        print(texts)
        img_file = img_file[:-4]
        for text in texts:
            file = img_file + ".txt"
#          create the new file with "w+" as open it
            with open(file, "w+") as f:
                for texts in docs:
                # write each element in my_list to file
                    f.write("%s" % str(texts))
                    print(file)   

Мне нужно написать один текстовый файл, соответствующий каждому изображению, которое распознало текст в этом изображении.Все файлы, которые сейчас записаны, пусты, и я не уверен, что происходит не так.Может кто-нибудь помочь?

1 Ответ

1 голос
/ 19 июня 2019

Здесь можно многое распаковать:

  1. Вы перебираете docs, который является пустым списком, для создания текстовых файлов, в результате каждый текстовый файл просто создается (пустой), а file.write никогда не бывает казнены.
  2. Вы присваиваете text = texts.replace('-\n', ''), но с этим ничего не делаете, вместо этого перебираете for text in texts, поэтому в этот цикл , text не является результатом replace а точнее предмет из повторяемого texts.
  3. Поскольку texts является str, каждый text in texts является символом .
  4. Затем вы используете texts (также ранее назначенный) в качестве итератора для docs (опять же, это пусто).

2 и 4 не обязательно проблематичны, но, вероятно, не являются хорошей практикой. Кажется, 1 является основной причиной того, почему вы создаете пустые текстовые файлы. Кажется, 3 также является логической ошибкой, поскольку вы почти наверняка не хотите записывать отдельные символы в файл (ы).

Так что я думаю это то, что вы хотите, но это не проверено:

for img_file in os.listdir(img_dir):
    if img_file.endswith(".jpg"):
        texts = str(((pytesseract.image_to_string(Image.open(img_file)))))
        print(texts)
        file = img_file[:-4] + ".txt"
        #create the new file with "w+" as open it
        with open(file, "w+") as f:
            f.write(texts)
            print(file) 
...