Получение выходных данных только с первой страницы TIFF для извлечения hocr

Получение выходных данных только с первой страницы TIFF для извлечения hocr

[Пример изображения]

Я ищу вашего руководства по коду, приведенному ниже. Я запускаю этот код для извлечения текста из многостраничного TIFF в формат hocr. Я получаю вывод с 1-й страницы TIFF, но остальные страницы пропущены.

# Python program to extract text from all the images in a folder
# storing the text in corresponding files in a different folder
# This is for hocr output, but there is error of getting only 1 page
    
from PIL import Image
import pytesseract as pt
import os
pt.pytesseract.tesseract_cmd = r'C:\Users\admin\AppData\Local\Programs\Tesseract-OCR\tesseract.exe'
     
def main():
    # path for the folder for getting the raw images
    path ="D:\\input"
    # path for the folder for getting the output
    tempPath ="D:\\output"
 
    # iterating the images inside the folder
    for imageName in os.listdir(path):
             
        inputPath = os.path.join(path, imageName)
        img = Image.open(inputPath)
 
        # applying ocr using pytesseract for python
           
        text = pt.image_to_pdf_or_hocr(img, extension = 'hocr', config = (r'--oem 3 --psm 6'), lang ="eng")
         
        fullTempPath = os.path.join(tempPath, 'time_'+imageName+".hocr")
        print(text)
  
        # saving the text for every image in a separate .hocr file
        file1 = open(fullTempPath, "wb")
        file1.write(text)
        file1.close()
  
 
if __name__ == '__main__':
    main()

решение1

РЕДАКТИРОВАТЬ:

Я проверил, может получиться filenameвместоPILLOW.Image

text = pt.image_to_pdf_or_hocr('D:\\input\\Best time to visit.tiff', extension='hocr', config=(r'--oem 3 --psm 6'), lang="eng")

Таким образом, он может работать tesseractс оригиналом tiffи преобразовывать все страницы в один текст hocr.


ОРИГИНАЛЬНЫЙ ОТВЕТ:

Я взял ваш tiffкод и ссылку в моем комментарии и создал код, который сохраняет каждую страницу в отдельном файле. Он используется img.seek(page)для выбора страницы. И он работает у меня с вашим файлом.

from PIL import Image
import os

folder = '/home/furas/Desktop'
filename = 'Best time to visit.tiff'

img = Image.open(os.path.join(folder, filename))

page = 0

while True:
    try:
        img.seek(page)

        filename = f'page-{page+1}.png'
        print('saving...', filename)

        img.save(os.path.join(folder, filename))

        page += 1
    except EOFError:
        # Not enough frames in img
        break

Что-то похожее работает у меня в вашем коде

from PIL import Image
import pytesseract as pt
import os

pt.pytesseract.tesseract_cmd = r'C:\Users\admin\AppData\Local\Programs\Tesseract-OCR\tesseract.exe'
     
# path for the folder for getting the raw images
path = "D:\\input"

# path for the folder for getting the output
tempPath = "D:\\output"

# iterating the images inside the folder
for imageName in os.listdir(path):
 
    # only images   
    if imageName.lower().endswith(('.tiff', '.jpg', '.png')):
        print(imageName)
        
        inputPath = os.path.join(path, imageName)
        img = Image.open(inputPath)
    
        page = 0
        while True:
            try:
        
                img.seek(page)
                text = pt.image_to_pdf_or_hocr(img, extension='hocr', config=(r'--oem 3 --psm 6'), lang="eng")
        
                print('page...', page)
                page += 1
         
                fullTempPath = os.path.join(tempPath, f"time_{imageName}_{page}.hocr")
                #print(text)
        
                # saving the text for every image in a separate .hocr file
                file1 = open(fullTempPath, "wb")
                file1.write(text)
                file1.close()
            except EOFError:
                # Not enough frames in img
                break            

Он должен записывать каждую страницу отдельно, .hocrпотому что если вы попытаетесь записать много страниц .hocrв один файл, то это создаст испорченные данные..hocr

Чтобы записать все страницы в один файл, вам придется использовать обычный текст.

Связанный контент