Преобразование pytesseract.Output.DATAFRAME в байты или ocr'ed pdf

Можно ли записать в файл pdf задним числом с помощью вывода?

Для моего конвейера OCR мне требовался детальный доступ к записанным данным в моем PDF-файле. Я просил, используя этот метод:

      ocr_dataframe = pytesseract.image_to_data(
            tesseract_image, 
            output_type=pytesseract.Output.DATAFRAME,
            config=PYTESSERACT_CUSTOM_CONFIG
        )

Теперь я хочу извлечь некоторые табличные данные из PDF с помощью pdfplumber. Однако pdfplumber должен подаваться с использованием одного из трех входных параметров:

  • путь к вашему файлу PDF
  • файловый объект, загруженный в байтах
  • файловый объект, загружаемый в байтах

Я знаю, что могу использовать pytesseract для преобразования моего исходного PDF-файла в доступный для поиска (в байтовом представлении), используя следующий метод:

      # Get a searchable PDF
pdf = pytesseract.image_to_pdf_or_hocr('test.png', extension='pdf')

Тем не менее, я бы хотел, чтобы мои PDF-файлы не появлялись дважды. Можно ли объединить вывод из с исходным изображением и создать какое-то байтовое представление?

Любая помощь приветствуется!

1 ответ

Решение

Хорошо, поэтому я почти уверен, что это была невыполнимая задача, которую я пытался выполнить.

По природе pytesseract.Output.DATAFRAMEсоздает фрейм данных pandas. Нигде в этой структуре данных нет исходного изображения. На выходе получаются просто строки и столбцы текстовых данных. Ни пикселей, ни ничего.

Вместо этого я создал класс, который мог одновременно содержать исходное изображение и фрейм данных вывода ocr. Вот как выглядит инициализация экземпляра:

       def __init__(self, temp_image_path):
        

        self.image_path = pathlib.Path(temp_image_path)
        self.image = cv2.imread(temp_image_path, cv2.IMREAD_GRAYSCALE)
        self.ocr_dataframe = self.ocr()

  def ocr(self):

     
        #########################################
        # Preprocess image in prep for pytesseract ocr
        ########################################
        tesseract_image = ocr_preprocess(self.image)

        ########################################
        # OCR image using pytesseract
        ########################################
        ocr_dataframe = pytesseract.image_to_data(
            tesseract_image, 
            output_type=pytesseract.Output.DATAFRAME,
            config=PYTESSERACT_CUSTOM_CONFIG
        )

      
        return ocr_dataframe


Это может потребовать небольшого количества памяти, но я не хочу писать много изображений.

Другие вопросы по тегам