pytesseract 0.3.10
Python-tesseract is an optical character recognition (OCR) tool for python. That is, it will recognize and “read” the text embedded in images.
Python-tesseract is a wrapper for Google’s Tesseract-OCR Engine. It is also useful as a stand-alone invocation script to tesseract, as it can read all image types supported by the Pillow and Leptonica imaging libraries, including jpeg, png, gif, bmp, tiff, and others. Additionally, if used as a script, Python-tesseract will print the recognized text instead of writing it to a file.
USAGE
Note: Test images are located in the tests/data folder of the Git repo.
Support for OpenCV image/NumPy array objects
If you need custom configuration like oem / psm , use the config keyword.
Add the following config, if you have tessdata error like: “Error opening data file…”
- get_languages Returns all currently supported languages by Tesseract OCR.
- get_tesseract_version Returns the Tesseract version installed in the system.
- image_to_string Returns unmodified output as string from Tesseract OCR processing
- image_to_boxes Returns result containing recognized characters and their box boundaries
- image_to_data Returns result containing box boundaries, confidences, and other information. Requires Tesseract 3.05+. For more information, please check the Tesseract TSV documentation
- image_to_osd Returns result containing information about orientation and script detection.
- image_to_alto_xml Returns result in the form of Tesseract’s ALTO XML format.
- run_and_get_output Returns the raw output from Tesseract OCR. Gives a bit more control over the parameters that are sent to tesseract.
image_to_data(image, lang=None, config=», nice=0, output_type=Output.STRING, timeout=0, pandas_config=None)
- image Object or String — PIL Image/NumPy array or file path of the image to be processed by Tesseract. If you pass object instead of file path, pytesseract will implicitly convert the image to RGB mode.
- lang String — Tesseract language code string. Defaults to eng if not specified! Example for multiple languages: lang=’eng+fra’
- config String — Any additional custom configuration flags that are not available via the pytesseract function. For example: config=’—psm 6′
- nice Integer — modifies the processor priority for the Tesseract run. Not supported on Windows. Nice adjusts the niceness of unix-like processes.
- output_type Class attribute — specifies the type of the output, defaults to string . For the full list of all supported types, please check the definition of pytesseract.Output class.
- timeout Integer or Float — duration in seconds for the OCR processing, after which, pytesseract will terminate and raise RuntimeError.
- pandas_config Dict — only for the Output.DATAFRAME type. Dictionary with custom arguments for pandas.read_csv. Allows you to customize the output of image_to_data.
pytesseract lang image_file
INSTALLATION
- Python-tesseract requires Python 3.6+
- You will need the Python Imaging Library (PIL) (or the Pillow fork). Under Debian/Ubuntu, this is the package python-imaging or python3-imaging.
- Install Google Tesseract OCR (additional info how to install the engine on Linux, Mac OSX and Windows). You must be able to invoke the tesseract command as tesseract. If this isn’t the case, for example because tesseract isn’t in your PATH, you will have to change the “tesseract_cmd” variable pytesseract.pytesseract.tesseract_cmd . Under Debian/Ubuntu you can use the package tesseract-ocr. For Mac OS users. please install homebrew package tesseract. Note: In some rare cases, you might need to additionally install tessconfigs and configs from tesseract-ocr/tessconfigs if the OS specific package doesn’t include them.
Check the pytesseract package page for more information.
pip install -U git+https://github.com/madmaze/pytesseract.git
git clone https://github.com/madmaze/pytesseract.git pytesseract pip install -U .
conda install -c conda-forge pytesseract
TESTING
To run this project’s test suite, install and run tox . Ensure that you have tesseract installed and in your PATH.
LICENSE
Check the LICENSE file included in the Python-tesseract repository/distribution. As of Python-tesseract 0.3.1 the license is Apache License Version 2.0
CONTRIBUTORS
- Originally written by Samuel Hoffstaetter
- Juarez Bochi
- Matthias Lee
- Lars Kistner
- Ryan Mitchell
- Emilio Cecchini
- John Hagen
- Darius Morawiec
- Eddie Bedada
- Uğurcan Akyüz
Применение OCR Tesseract совместно с Python
Как показывают исследования, Tesseract лучше всего справляется с работой, когда существует чёткое отделение текста переднего плана от фона. На практике это гарантировать чрезвычайно сложно. Следовательно, необходимо обучать классификаторы и детекторы, специфичные для данной задачи.
Тем не менее будет полезно воспользоваться OCR tesseract через язык программирования Python, когда нужно применить OCR к собственным проектам, при условии, что будут получены хорошие и чистые тексты.
Примеры таких проектов с OCR могут быть мобильный сканер документов, из которых нужно извлечь текстовую информацию или служба, которая сканирует бумажные медицинские карточки для размещения этой информации в базе данных…
В этой статье будет рассказано, как установить пакет Tesseract OCR для Python, а затем напишем простой Python скрипт для распознавания текста с картинок.
Установка пакета Tesseract для Python
Чтобы установить pytesseract воспользуемся менеджером пакетов Python pip. Также рекомендуется использовать виртуальную среду чтобы устанавливать свой набор пакетов для разных проектов. В данном случае virtualenv называется cv.
$ python3 –m venv cv $ cd cv; source bin/activate
Затем установим Pillow (удобный клон PIL для Python) от которого зависит pytesseract.
$ pip install pillow $ pip install pytesseract
Примечание: pytesseract не обеспечивает настоящей привязки к Python. Скорее, он является простой обёрткой для двоичного файла tesseract. Если познакомиться с проектом по подробнее, то станет ясно, что библиотека сохраняет изображение во временный файл на диске, а затем вызывает двоичный файл tesseract и полученный результат записывает в файл.
Рассмотрим код, который отделяет текст переднего плана от фона, а затем применим установленный pytesseract.
Распознавание текста с помощью Tesseract и Python
Создадим файл с именем ocr.py:
from PIL import Image import pytesseract import cv2 import os image = '/tmp/tests.png' preprocess = "thresh" # загрузить образ и преобразовать его в оттенки серого image = cv2.imread(image) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # проверьте, следует ли применять пороговое значение для предварительной обработки изображения if preprocess == "thresh": gray = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1] # если нужно медианное размытие, чтобы удалить шум elif preprocess == "blur": gray = cv2.medianBlur(gray, 3) # сохраним временную картинку в оттенках серого, чтобы можно было применить к ней OCR filename = "<>.png".format(os.getpid()) cv2.imwrite(filename, gray)
Теперь применим OCR к изображению, используя pytesseract:
# загрузка изображения в виде объекта image Pillow, применение OCR, а затем удаление временного файла text = pytesseract.image_to_string(Image.open(filename)) os.remove(filename) print(text) # показать выходные изображения cv2.imshow("Image", image) cv2.imshow("Output", gray) input(‘pause…’)
Вызов оператора pytesseract.image_to_string преобразует изображение в строку текста. Обратите внимание, что была передана ссылка на временный файл картинки.
print(text) – распечатывает результата распознавания скрипта в терминал. В ваших собственных приложениях вы можете выполнить некоторые дополнительные действия, например, проверку орфографии или обработку естественного языка.
В заключении, строки с cv2.imshow обрабатывают исходное и предварительно обработанное изображение на экране в отдельных окнах. input(‘pause…’) сообщает программе, что нужно ожидать пользовательского нажатия клавиши перед выходом из сценария.
Результаты OCR
Теперь, когда готов ocr.py протестируем его для выполнения OCR на некоторых примерах входных изображений.
В этом разделе проверим OCR двух образцов изображений.
- Сначала пропустим каждое изображение через двоичный файл Tesseract.
- Затем передадим каждое изображение скрипту ocr.py (который выполняет предварительную обработку перед отправкой их в tesseract).
- Сравним результаты обоих этих методов и выявим ошибки.
Это изображение содержит на переднем плане текст черного цвета на фоне, который частично белый и частично рассеянный с искусственно создаваемыми круговыми пятнами.
$ tesseract /tmp/example_01.png stdout Noisy image to test Tesseract OCR
В этом случае Tesseract отлично справился с ошибками. Теперь подтвердим, что скрипт ocr.py также работает:
$ python ocr.py Noisy image to test Tesseract OCR
Скрипт правильно распознал текстовое содержимое из изображения выведя его в консоль.
Затем протестируем Tesseract и наш скрипт на изображении, предварительно обработанным фильтром с шумом «соль и перец».
Результаты работы двоичного файла tesseract:
$ tesseract /tmp/example_02.png stdout Detected 32 diacritics " Tesséra‘c't Will Fail With Noisy Backgrounds
К сожалению, tesseract не смог распознать текст без ошибок.
Однако, используя метод предварительной обработки blur в ocr.py, можем получить лучшие результаты, для этого установим переменную preprocess в blur.
# image =/tmp/example_02.png и preprocess=blur $ python ocr.py Tesseract Will Fail With Noisy Backgrounds
Этап предварительной обработки blur позволило Tesseract правильно распознать OCR и вывести желаемый текст.
Таким образом были получены приемлемые результаты с tesseract для OCR, но лучшая точность будет получена от обучения пользовательских классификаторов символов на определенных наборах шрифтов, которые используются на реальных изображениях.
Примечание. Если текст повернут, нужно также выполнить предварительную обработку.
Резюме
В этой статье было продемонстрировано применение OCR движка tesseract с языком программирования Python. Что позволило нам применять алгоритмы OCR из собственных сценариев Python.
Самый большой недостаток связан с ограничениями самого Tesseract – он работает когда на переднем плане есть чрезвычайно чистые фрагменты текста. Кроме того, эти фрагменты должны быть как можно более высокого разрешения (DPI), а символы входного изображения не были подвергнуты «пикселированию» после сегментации.
OCR не является новой технологией, но по-прежнему является областью исследований в компьютерной науке, особенно при применении OCR к реальным изображениям. Глубокое обучение и сверточные нейронные сети (CNN), безусловно, позволяют получать более высокую точность, но до почти идеальной системы распознавания ещё очень далеко. Кроме того, сейчас предлагается много OCR приложений на разных сайтах, в которых применены лучшие из алгоритмов распознавания, но они являются коммерческими и требуют лицензирования для использования в собственных проектах.
Если ни Tesseract, ни сторонние сервисы не предоставят достаточной точности, то нужно переосмыслить свой набор данных и задуматься о обучении своего классификатора символов. Это особенно предпочтительно, если набор данных зашумлён и/или содержит очень специфические шрифты. Примеры конкретных шрифтов включают в себя цифры на кредитной карте, номера счета и номера маршрута, найденные в проездных билетах или стилизованный текст, используемый в графическом дизайне.