Время прочтения: 3 мин.

PyTesseract — это пакет python для разработки OCR. OCR или же Оптическое распознавание символов (англ. Optical Character Recognition – OCR) – это технология, которая позволяет преобразовывать различные типы документов, такие как отсканированные документы, PDF-файлы или фото с цифровой камеры, в редактируемые форматы с возможностью поиска.

Так же, для задачи распознавания PDF сканов подходят модули и библиотеки PDF для Python. Таких библиотек большое множество, для примера рассмотрим PyMuPDF.

PyTesseract

Первым делом, как и всегда, импортируем все необходимые библиотеки и так же указываем путь к cmd PyTesseract:

  1. Cv2(OpenCV) – тоже библиотека компьютерного зрения и машинного обучения, будем применять её для перевода в градации серого и в чёрно-белое изображение
  2. PyTesseract
  3. pdf2image – библиотека для конвертации pdf в формат изображения
import cv2
import pytesseract
from pdf2image import convert_from_path
pages = convert_from_path('Zajavlenie_na_zagranpasport_obrazec.pdf', 100)
pages[0].save('out.jpg', 'JPEG')

Следующим шагом конвертируем PDF в JPG. Обращаемся к нулевому элементу, т.к. в нашем документе несколько страниц, а нам не нужны все.

Далее с помощью библиотеки cv2 считываем получившееся изображение и переводим в другую цветовую градацию. С помощью PyTesseract в команде print преобразуем картинку в текст и выводим в консоль.

imgcv=cv2.imread('out.jpg')
imgcv=cv2.cvtColor(imgcv, cv2.COLOR_BGR2RGB)
print(pytesseract.image_to_string(imgcv,  lang='rus'))

Для примера я брал скан образца заполнения загран. паспорта.

PyMuPDF

Эта библиотека известна своей высокой производительностью и высоким качеством рендеринга. Отлично подходит для перевода больших PDF документов, как, например, в нашем случае — PDF учебника.

Так же импортируем библиотеки, но в этом примере нам потребуется только одна – PyMuPDF, импортируется как fitz.

import fitz

Теперь открываем сам PDF файл и в цикле по его страницам получаем и выводим текст.

file=fitz.open('Bakulin_A_Gravitaciya_I_Yefir.a6.pdf')
for pageNum, page in enumerate(file.pages(), start = 1):
    text= page.getText()
    print(text)

Текст распознан, сохранены абзацы, учебник размером в 400 страниц был преобразован в текст за 2 секунды.

Итог

PyTesseract мощный инструмент компьютерного зрения, может распознавать текст с изображений многих форматов (например, текст на дорожном знаке). Имеет возможность изменения параметров, что может повысить точность распознавания.

PyMuPDF отличная библиотека для преобразования PDF файлов в текст, но при условии, что отсканированный PDF документ в хорошем качестве. Отличается своей скоростью и простотой использования.

В заключение можно сказать, что если в вашей задаче есть качественные экземпляры сканов, то не стоит сразу пытаться усложнять и использовать компьютерное зрение, а лучше попробовать модули и библиотеки предназначенные для распознавания PDF. Если же вы столкнулись с некачественным сканом, то тогда стоит использовать компьютерное зрение и пытаться менять различные параметры.