Tesseract OCR Integration for Text Recognition

We design and deploy artificial intelligence systems: from prototype to production-ready solutions. Our team combines expertise in machine learning, data engineering and MLOps to make AI work not in the lab, but in real business.
Showing 1 of 1 servicesAll 1566 services
Tesseract OCR Integration for Text Recognition
Simple
from 1 business day to 3 business days
FAQ
AI Development Areas
AI Solution Development Stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1212
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    852
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_logo-advance_0.png
    B2B Advance company logo design
    561
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    822

Integration 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 Технические строки

Optimization под русский язык

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

Training кастомной языковой модели

Для специфических доменов (медицинские термины, технические аббревиатуры) — добавление 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 дней
Optimization под конкретные документы 1–2 недели
Custom training для специальных шрифтов 2–4 недели