Время прочтения: 3 мин.
PyTesseract — это пакет python для разработки OCR. OCR или же Оптическое распознавание символов (англ. Optical Character Recognition – OCR) – это технология, которая позволяет преобразовывать различные типы документов, такие как отсканированные документы, PDF-файлы или фото с цифровой камеры, в редактируемые форматы с возможностью поиска.
Так же, для задачи распознавания PDF сканов подходят модули и библиотеки PDF для Python. Таких библиотек большое множество, для примера рассмотрим PyMuPDF.
PyTesseract
Первым делом, как и всегда, импортируем все необходимые библиотеки и так же указываем путь к cmd PyTesseract:
- Cv2(OpenCV) – тоже библиотека компьютерного зрения и машинного обучения, будем применять её для перевода в градации серого и в чёрно-белое изображение
- PyTesseract
- 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. Если же вы столкнулись с некачественным сканом, то тогда стоит использовать компьютерное зрение и пытаться менять различные параметры.