Преобразование 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
Это может потребовать небольшого количества памяти, но я не хочу писать много изображений.