Интеграция Tesseract OCR для распознавания текста

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Интеграция Tesseract OCR для распознавания текста
Простая
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1240
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1167
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    867
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1084
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    829

Интеграция Tesseract OCR для распознавания текста

Tesseract — открытый OCR-движок от Google, стандарт для встраивания OCR в собственные системы. Работает полностью локально без cloud-зависимостей, поддерживает 100+ языков включая русский. Версия 5 добавила LSTM engine, который существенно улучшил качество распознавания по сравнению с классическим движком.

Установка и базовая интеграция

import pytesseract
from PIL import Image
import cv2
import numpy as np

# Базовое распознавание
def extract_text(image_path: str, lang: str = 'rus') -> str:
    image = Image.open(image_path)
    text = pytesseract.image_to_string(image, lang=lang, config='--psm 3')
    return text

# Детальный вывод с позициями
def extract_with_positions(image_path: str, lang: str = 'rus') -> list[dict]:
    image = Image.open(image_path)
    data = pytesseract.image_to_data(
        image,
        lang=lang,
        output_type=pytesseract.Output.DICT
    )

    results = []
    for i, text in enumerate(data['text']):
        if text.strip() and int(data['conf'][i]) > 0:
            results.append({
                'text': text,
                'confidence': int(data['conf'][i]),
                'x': data['left'][i],
                'y': data['top'][i],
                'w': data['width'][i],
                'h': data['height'][i]
            })
    return results

Параметры PSM (Page Segmentation Mode)

PSM Описание Использование
0 Только ориентация Редко
3 Авто (default) Общий текст
6 Одиночный блок текста Абзацы
7 Одна строка Поля форм
8 Одно слово Штампы, печати
11 Разреженный текст Накладные, счета
13 Raw line Технические строки

Оптимизация под русский язык

custom_config = (
    '--psm 6 '
    '--oem 3 '                          # LSTM engine
    '-c preserve_interword_spaces=1 '
    '-c tessedit_char_whitelist='
    'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя'
    'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 .,!?-:;'
)

text = pytesseract.image_to_string(image, lang='rus+eng', config=custom_config)

Предобработка для повышения точности

def prepare_for_tesseract(image: np.ndarray,
                           scale_factor: float = 2.0) -> np.ndarray:
    # Upscale — Tesseract работает лучше при 300+ DPI
    h, w = image.shape[:2]
    image = cv2.resize(image, (int(w * scale_factor), int(h * scale_factor)),
                       interpolation=cv2.INTER_CUBIC)

    # Grayscale
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # Adaptive threshold — лучше для неравномерного освещения
    processed = cv2.adaptiveThreshold(
        gray, 255,
        cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
        cv2.THRESH_BINARY, 31, 2
    )

    # Dilate для улучшения соединений символов
    kernel = np.ones((1, 1), np.uint8)
    processed = cv2.dilate(processed, kernel, iterations=1)
    processed = cv2.erode(processed, kernel, iterations=1)

    return processed

Обучение кастомной языковой модели

Для специфических доменов (медицинские термины, технические аббревиатуры) — добавление custom wordlist:

# Создание custom .traineddata
combine_tessdata -u rus.traineddata rus.
# Добавляем кастомный словарь в rus.user-words
echo "ЭКГ МРТ КТ УЗИ" > rus.user-words
Сценарий Точность Скорость
Печатный текст, хорошее качество 95–98% 0.5–2 сек/страница
Печатный текст, сканы среднего качества 85–92% 1–3 сек/страница
Смешанный текст (рус+eng) 88–95% 1–3 сек/страница
Задача Срок
Базовая интеграция Tesseract 3–5 дней
Оптимизация под конкретные документы 1–2 недели
Custom training для специальных шрифтов 2–4 недели