OCR на Python с Tesseract: пошаговая инструкция
Как за полчаса собрать распознавание текста на Python: установить Tesseract, подключить pytesseract, добавить русский язык и вытащить текст из скана — с проверкой на каждом шаге.

К концу этой инструкции у вас будет Python-скрипт, который открывает картинку со сканом или фотографией документа и печатает распознанный текст в консоль. На чистой системе весь процесс занимает 20–40 минут: большая часть времени уходит на установку самого движка Tesseract и языковых пакетов, а не на код. Код на Python здесь короткий — три строки.
Tesseract — это отдельная программа-движок OCR1, а pytesseract — тонкая обёртка на Python, которая её вызывает. Поэтому одной командой pip install не обойтись: движок ставится отдельно.
Что нужно иметь до начала
- Python 3.8 или новее (проверьте:
python --version). - Установленный движок Tesseract 5.x — ставим ниже, до Python-части.
- Языковые данные для нужных языков: английский идёт в комплекте, русский часто нужно доставить отдельно.
- Картинка для теста — скан, фото документа или скриншот с текстом. Форматы PNG, JPEG, TIFF.
- Права на установку программ в системе (на Linux — sudo, на Windows — запуск установщика).
Если движок не установить, при первом запуске скрипта вы получите ошибку TesseractNotFoundError — это самая частая проблема новичков, о ней в разделе «Если не получилось».
Шаг 1. Установить движок Tesseract
Способ зависит от вашей операционной системы.
Linux (Ubuntu/Debian)
# движок и русский языковой пакет
sudo apt update
sudo apt install tesseract-ocr tesseract-ocr-rus
Пакет tesseract-ocr-rus — это русский язык. Английский (eng) обычно уже входит в базовый пакет.
macOS (Homebrew)
brew install tesseract
# языковые пакеты в Homebrew ставятся отдельным пакетом
brew install tesseract-lang
Пакет tesseract-lang содержит данные для всех поддерживаемых языков, включая русский.
Windows
Скачайте установщик от UB Mannheim (это самая распространённая сборка Tesseract под Windows) и в процессе установки в разделе выбора компонентов отметьте Russian в списке дополнительных языков. Актуальную ссылку и версию сверяйте в репозитории проекта — не берите сборку с случайных сайтов.
Проверка шага. Откройте терминал и выполните:
tesseract --version
Должна появиться строка вида tesseract 5.x.x. Затем проверьте, что русский язык виден движку:
tesseract --list-langs
В списке должны быть как минимум eng и rus. Если rus нет — языковой пакет не встал, вернитесь к установке.
Шаг 2. Установить pytesseract и Pillow
Создайте виртуальное окружение и поставьте две библиотеки. Pillow нужен, чтобы открывать изображения.
python -m venv venv
# Linux/macOS:
source venv/bin/activate
# Windows:
venv\Scripts\activate
pip install pytesseract Pillow
Проверка шага. Выполните pip show pytesseract — команда должна вывести версию пакета. Ошибок при установке быть не должно.
Шаг 3. Распознать текст
Положите тестовую картинку рядом со скриптом, назовите её, например, document.png. Создайте файл ocr.py:
from PIL import Image
import pytesseract
# открываем изображение
kartinka = Image.open("document.png")
# распознаём: lang="rus" — русский, "eng" — английский,
# "rus+eng" — смешанный текст
tekst = pytesseract.image_to_string(kartinka, lang="rus+eng")
print(tekst)
Запустите:
python ocr.py
Проверка шага. В консоли появится распознанный текст с картинки. Если строки перепутаны или полны мусора вроде |_| и случайных символов — это не поломка, а низкое качество исходного изображения. Как это лечить — ниже.
Tesseract распознаёт ровно то, что видит. 80% качества результата задаётся не кодом на Python, а тем, насколько чистая и контрастная картинка приходит на вход.
Шаг 4. Указать путь к движку (только Windows и нестандартная установка)
Если на предыдущем шаге вы получили TesseractNotFoundError, значит pytesseract не нашёл движок в системном PATH. Пропишите путь явно в начале скрипта:
import pytesseract
# путь к исполняемому файлу — подставьте свой
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
На Linux и macOS этот шаг обычно не нужен — движок уже в PATH.
Если качество распознавания плохое
Простейшая предобработка часто поднимает точность заметно больше, чем любые параметры движка. Три приёма, которые стоит попробовать первыми:
- Перевести в оттенки серого. Цвет мешает движку.
kartinka.convert("L"). - Увеличить масштаб. Мелкий текст (меньше ~20 пикселей по высоте буквы) распознаётся плохо. Увеличьте изображение в 2 раза перед подачей.
- Выровнять поворот. Скан под углом даёт мусор. Разверните картинку так, чтобы строки шли горизонтально.
from PIL import Image
import pytesseract
kartinka = Image.open("document.png")
# оттенки серого
kartinka = kartinka.convert("L")
# увеличить в 2 раза
shirina, vysota = kartinka.size
kartinka = kartinka.resize((shirina * 2, vysota * 2))
tekst = pytesseract.image_to_string(kartinka, lang="rus")
print(tekst)
Если не получилось
Пять типичных ошибок и что с ними делать:
pytesseract.pytesseract.TesseractNotFoundError— движок не установлен или не в PATH. Проверьтеtesseract --versionв терминале. Если команда не работает — вернитесь к шагу 1. Если работает, а Python всё равно не находит — пропишите путь как в шаге 4.Error opening data file ... rus.traineddata— русский языковой пакет не установлен. Выполнитеtesseract --list-langs; еслиrusнет, доставьте языковой пакет (шаг 1).ModuleNotFoundError: No module named 'PIL'— не установлен Pillow. Импортируется он какPIL, а ставится какPillow:pip install Pillow.- Результат — пустая строка. Картинка слишком тёмная, размытая или текста на ней нет там, где вы думаете. Откройте её глазами, попробуйте предобработку.
- Русские буквы заменяются латиницей (например «о» на «o»). Вы не указали
lang="rus"— по умолчанию используется английский.
Полезные параметры движка
У функции image_to_string есть параметр config, куда передаются флаги движка. Самый нужный новичку — режим сегментации страницы --psm:
| Значение | Когда использовать |
|---|---|
--psm 3 | По умолчанию: автоматическая разметка страницы с несколькими блоками текста |
--psm 6 | Один блок текста — часто лучше для сканов ровного абзаца |
--psm 7 | Одна строка текста — для номеров, ценников, коротких надписей |
--psm 8 | Одно слово |
Пример: pytesseract.image_to_string(kartinka, lang="rus", config="--psm 6"). Полный список режимов смотрите в выводе tesseract --help-psm.
Что делать дальше
Скрипт работает — дальше углубляйтесь в те места, где у вас реально болит:
- Если картинки грязные — предобработка через OpenCV (бинаризация, удаление шума, выравнивание перекоса) поднимает точность сильнее любых флагов. Это отдельная большая тема.
- Нужны координаты слов, а не просто текст — используйте
pytesseract.image_to_data, он возвращает рамки и уверенность по каждому слову. - Много файлов — оборачивайте вызов в очередь и учитывайте, что Tesseract нагружает CPU: на пакетной обработке это узкое место.
1 OCR (Optical Character Recognition) — оптическое распознавание символов: преобразование изображения с текстом в редактируемый текст.
Проверка грамотности: Орфография, пунктуация, стиль — с объяснением каждой правки
Спросить за 10 ₽Источники: Tesseract OCR — официальный репозиторий и документация, pytesseract — страница пакета на PyPI
Частые вопросы
А если у меня Tesseract 4, а не 5?
Скрипт выдаёт TesseractNotFoundError, хотя я всё установил. Что делать?
Можно ли распознавать русский и английский одновременно?
Распознавание работает медленно на большом количестве файлов. Это нормально?
Почему текст распознаётся с ошибками, хотя код правильный?
Tesseract распознаёт рукописный текст?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.