Kraken OCR: руководство от гика, локальное ATR, модели, форматы, обучение и работа из командной строки
Kraken OCR — не обычная программа с окнами и кнопками, а открытый движок автоматического распознавания текста, рассчитанный прежде всего на исторические документы, рукописи и письменности, с которыми универсальные OCR-системы работают нестабильно. Актуальная ветка Kraken 7.x объединяет анализ макета страницы, определение порядка чтения, распознавание строк, выгрузку результатов в архивные XML-форматы и обучение собственных нейросетевых моделей. Основной способ работы — командная строка kraken и отдельная утилита ketos для обучения; разработчики также предоставляют Python API. Поэтому продукт стоит оценивать не как настольный «сканер текста», а как конструктор локального ATR-конвейера, где качество зависит от корректной сегментации, выбранной модели и соответствия модели конкретному материалу.
Что такое Kraken OCR и кто его разрабатывает
Официальное название проекта — kraken; в документации и публикациях также используется формулировка Kraken OCR system. Автор проекта — Benjamin Kiessling. Разработка ведётся в École Pratique des Hautes Études, Université PSL, а исходный код распространяется по лицензии Apache License 2.0. Это самостоятельный open-source OCR/ATR-движок, а не сервис биржи Kraken, не инструмент для криптовалют и не одноимённый CI-проект.
Аббревиатура ATR в документации выбрана не случайно. Kraken ориентирован не только на печатный OCR, но и на handwritten text recognition, сложную верстку, нестандартные алфавиты и направления письма. Проект поддерживает сценарии с письмом справа налево, двунаправленным текстом и вертикальным направлением, умеет обучать собственные модели сегментации, порядка чтения и распознавания и сохраняет геометрию строк вместе с текстом в структурированных форматах.
На дату обзора актуальной стабильной версией является Kraken 7.1. В журнале изменений релиз датирован 5 августа 2026 года. Ветка 7.1 добавила архитектуру распознавания на базе PP-OCRv6 и готовые многоязычные базовые модели вариантов tiny, small и medium. Одновременно сохранилась поддержка традиционной архитектуры VGSL. PP-OCRv6-модели требуют Kraken 7.1 или новее и сохраняются в safetensors; Core ML остаётся вариантом для VGSL-моделей.
Основные параметры Kraken OCR
| Параметр | Актуальное состояние |
|---|---|
| Тип продукта | Open-source ATR/OCR engine, CLI и Python API |
| Автор | Benjamin Kiessling |
| Организация разработки | École Pratique des Hautes Études, Université PSL |
| Стабильная версия | 7.1, август 2026 года |
| Лицензия | Apache License 2.0 |
| Поддерживаемые ОС | Linux и macOS, x64 и ARM |
| Python | 3.10–3.13 |
| Основной интерфейс | Командная строка kraken; обучение через ketos; Python API для интеграции |
| Аппаратное ускорение | CPU, NVIDIA CUDA и Apple Silicon через MPS |
| Основные этапы | Бинаризация при необходимости, сегментация, порядок чтения, распознавание, сериализация |
| Выходные форматы | Plain text, native JSON для сегментации, ALTO, PageXML, hOCR, abbyyXML, пользовательский Jinja2-шаблон |
| Входные форматы | Растровые изображения; ALTO/PageXML как размеченный вход; PDF и многостраничные TIFF/JPEG2000 после установки PDF extras |
| Модели | .safetensors и .mlmodel; каталог HTRMoPo с загрузкой по DOI |
| Регистрация | Для локального распознавания не требуется; аккаунт Zenodo и токен нужны при публикации собственных моделей |
| Цена | Сам движок бесплатный; подписки и пробного периода нет |
Главное отличие Kraken от потребительских OCR-приложений видно уже по этой таблице: пользователь получает не один фиксированный распознаватель, а цепочку взаимозаменяемых этапов. Сегментацию можно выполнить встроенной моделью, распознавание — специализированной моделью из каталога или собственной, а результат сохранить либо как простой текст, либо как документ с координатами и структурой страницы.
Жизненный цикл продукта
Kraken развивается непрерывно с 2015 года и в 2026 году остаётся активным проектом. Переход с ветки 6.x на 7.x был не косметическим: поддержка Python 3.9 прекращена, параметры устройства и точности вычислений стали глобальными для kraken и ketos, API обучения и инференса был переработан, а safetensors стал стандартным форматом новых весов. Для автоматизированных сценариев это важно: командные строки, тренировочные манифесты и код, написанные под старые версии, требуют проверки перед обновлением.
В 7.0 появилась более явная пакетная обработка распознавания, параметры -B/—batch-size и —num-line-workers, а также новая система плагинов. Старый способ многомодельного распознавания по тегам объявлен устаревшим и запланирован к удалению в Kraken 8. Это не означает, что мультиязычные задачи исчезают: меняется именно старый механизм маршрутизации между несколькими моделями, поэтому длительно поддерживаемые скрипты лучше строить на текущем API и актуальных моделях.
Версия 7.1 расширила выбор архитектур распознавания за счёт PP-OCRv6. Для новых проектов это даёт отдельную развилку: VGSL сохраняет гибкую настройку архитектуры через network specification, а PP-OCRv6 предлагает варианты tiny, small и medium и требует новый формат весов. При переносе модели на старую установку Kraken совместимость нужно проверять по типу модели, а не только по расширению файла.
Интерфейс: почему у Kraken нет обычного главного окна
У Kraken нет собственного настольного GUI. Основной пользовательский интерфейс — команда kraken, в которой сначала задаются общие параметры ввода, вывода и вычислительного устройства, затем последовательно перечисляются этапы обработки. Такая архитектура заменяет графическую ленту инструментов: вместо отдельных окон пользователь формирует конвейер одной командой или разбивает его на несколько команд с промежуточными файлами.
Глобальная зона ввода и вывода
Пара -i источник результат связывает один входной файл с одним выходным. Опцию можно повторять для нескольких файлов. Для каталога используется -I/—batch-input с glob-шаблоном и -o/—suffix, который добавляет суффикс к именам результатов. Параметр -f/—format-type выбирает обработчик данных: image, pdf, xml, alto или page. Все эти параметры располагаются до этапов segment и ocr.
Цепочка этапов
Команды binarize, segment и ocr можно соединять в одной строке. Порядок имеет значение: глобальные параметры должны идти до подкоманды, а параметры конкретного этапа — после неё. За счёт этого одна строка может описывать полный путь «изображение → линии → распознанный текст», а при отладке тот же процесс можно разнести на отдельные операции и сохранить промежуточную сегментацию в JSON или XML.
Управление моделями
Каталог моделей встроен в CLI отдельными подкомандами. kraken list показывает доступные модели, kraken show DOI — карточку выбранной модели, kraken get DOI — загружает её в локальное хранилище. Фильтры позволяют искать модели по типу задачи, языку, письменности и словам из описания. Идентификатором служит DOI; concept DOI ведёт на актуальную версию записи, а version DOI фиксирует конкретный выпуск.
Отдельная утилита ketos
Обучение вынесено в ketos. Команды train, segtrain и rotrain обучают распознавание, сегментацию и порядок чтения. compile подготавливает бинарный набор для обучения, convert преобразует и объединяет веса, а конфигурации можно хранить в YAML experiment files. Это важное разделение: kraken ориентирован на применение моделей к документам, ketos — на создание и обслуживание самих моделей.
Python API
Для интеграции в собственный код доступны классы и функции загрузки изображения, сегментации, распознавания, чтения ALTO/PageXML и сериализации. В отличие от вызова внешней команды, API позволяет работать с объектами изображений и контейнерами сегментации в памяти, получать промежуточные данные, confidence и геометрию строк. В Kraken 7 API был существенно переработан, поэтому примеры для веток 5.x и 6.x нельзя автоматически переносить в новый проект.
Пользователю, которому нужен именно графический редактор страниц с ручным исправлением линий и транскрипции, стоит отличать Kraken от eScriptorium. eScriptorium — отдельное веб-приложение, которое использует Kraken как движок и добавляет GUI для импорта, разметки, сегментации, транскрипции и обучения. В самом Kraken этих визуальных панелей нет.
Основные функции и как они связаны
Анализ макета и сегментация
Сегментация находит текстовые линии и регионы до распознавания. Актуальный рекомендуемый режим — neural baseline segmentation через segment -bl. В поставке есть stock-модель baseline segmentation, поэтому для типовой разметки страницы не требуется отдельный файл модели. Для специализированной верстки можно подключить собственную segmentation model. Результат содержит координаты линий, их границы, регионы и порядок, необходимый следующему этапу.
Legacy bounding-box segmenter остаётся доступным через segment -x, но требует бинарное изображение. Для современных моделей предварительная бинаризация обычно не нужна: серое или цветное изображение можно передать напрямую. Это различие существенно при переносе старых команд — добавление binarize по привычке не является обязательным условием нового baseline workflow.
Распознавание текста
Подкоманда ocr принимает сегментированные строки и recognition model. Модель можно указать через -m/—model как путь к .safetensors или .mlmodel. Для XML-входа Kraken способен использовать тип линий, на котором обучалась модель, а параметр —linetype позволяет принудительно выбрать baselines или bbox. Несоответствие геометрии входа типу обучения модели ухудшает результат, поэтому этот параметр важнее косметических настроек.
В распознавании включена обработка Unicode BiDi; ею управляют —reorder/—no-reorder и —base-dir. Это предназначено для материалов, где визуальный порядок символов и логический Unicode-порядок различаются. Для уже нарезанных изображений отдельных строк доступен —no-segmentation: Kraken тогда не пытается анализировать страницу целиком.
Порядок чтения
Kraken умеет определять последовательность строк и регионов, что особенно важно для колонок, маргиналий и сложной страницы. Отдельные reading-order models обучаются через ketos rotrain на ALTO или PageXML с размеченным порядком. В актуальной версии можно обучать порядок на уровне baselines или regions, а затем объединять reading-order weights с segmentation model через ketos convert. Для простой линейной верстки эвристического порядка часто достаточно, а специализированная модель нужна там, где геометрия страницы неоднозначна.
Модели и HTRMoPo
Распознавание в Kraken не привязано к единственной «русской», «английской» или «рукописной» модели. HTRMoPo хранит модели с метаданными о языке, письменности, обучающем материале, лицензии и метриках. Поэтому выбор по одному языковому коду недостаточен: исторический шрифт, тип письма, нормализация транскрипции и устройство строк должны быть близки к данным, на которых модель обучалась. Команда kraken show нужна именно для чтения карточки перед применением.
Пакетная обработка
Для сотен изображений не требуется составлять сотни пар -i. Glob-ввод -I «data/*.png» обрабатывает набор файлов, а -o формирует имена результатов. На этапе распознавания параметр -B/—batch-size задаёт количество строк в одном forward pass, а —num-line-workers — число CPU-процессов, подготавливающих строки. Это механизмы производительности, а не гарантированные значения скорости: безопасное значение зависит от доступной памяти и размера документов.
PDF и многостраничные контейнеры
Базовая установка ориентирована на изображения. Для прямого чтения PDF и многостраничных TIFF/JPEG2000 устанавливается дополнительный пакет kraken[pdf]. Режим -f pdf извлекает страницы во временные изображения и генерирует отдельные файлы результата. Если цель — получить готовый searchable PDF с невидимым текстовым слоем, Kraken не является наиболее прямым инструментом; он ориентирован на транскрипцию и структурированную разметку, а не на пересборку пользовательского PDF.
Сериализация
Plain text удобен для чтения и дальнейшей языковой обработки, но теряет геометрию страницы. ALTO, PageXML, hOCR и abbyyXML сохраняют структуру и координаты, необходимые архивным и исследовательским системам. В native-режиме сегментация записывается как JSON, распознавание — как обычный текст. Для собственного формата можно использовать Jinja2 template, что позволяет встроить Kraken в существующую цепочку публикации без дополнительного конвертера.
Обучение и дообучение
Все три основных компонента обучаемы. Recognition model создаётся командой ketos train, segmentation model — ketos segtrain, reading order — ketos rotrain. ALTO и PageXML используются как основной обменный формат размеченных данных. Для recognition training набор можно предварительно собрать в .arrow через ketos compile. В 7.x —load означает новый запуск с существующими весами, а —resume восстанавливает состояние оптимизатора, scheduler и номер эпохи из checkpoint.
Карта форматов и совместимости
| Формат или тип | Роль в Kraken | Что сохраняется | Ограничение |
|---|---|---|---|
| PNG/JPEG/TIFF и другие растровые изображения | Обычный вход для сегментации и OCR | Пиксели страницы | Структура текста появляется только после сегментации |
| Многостраничный вход через -f pdf | Из страниц извлекаются изображения для обработки | Нужна установка kraken[pdf]; результат обычно выводится по страницам, а не как новый searchable PDF | |
| Многостраничные TIFF/JPEG2000 | Многостраничный вход | Отдельные изображения страниц | Для прямой работы нужны PDF extras |
| ALTO XML | Импорт готовой сегментации, обучение, экспорт | Текст, координаты, структура страницы и метаданные обработки | Для корректного OCR тип линий должен соответствовать обучению модели |
| PageXML | Импорт сегментации, обучение, экспорт | Regions, baselines, reading order и текст | Разные профили PAGE могут отличаться деталями разметки |
| hOCR | Экспорт OCR | Текст, word/line bounding boxes и confidence | Это HTML-подобное представление, а не редактируемый исходный проект Kraken |
| abbyyXML | Экспорт OCR | Структурированный OCR-результат | Используется как формат обмена, не как модель |
| Native JSON | Промежуточная сегментация | Внутреннее описание линий и регионов | Менее переносим между сторонними приложениями, чем ALTO/PageXML |
| Plain text | Простой конечный результат | Только распознанная строковая транскрипция | Теряются координаты и структура страницы |
| .safetensors | Современные веса моделей | Параметры нейросети и связанные метаданные | PP-OCRv6 требует Kraken 7.1+ |
| .mlmodel | Core ML веса VGSL-моделей и совместимость со старыми наборами | Параметры модели | PP-OCRv6 в этот формат не сохраняется |
| .ckpt | Checkpoint обучения | Веса и состояние тренировочного процесса | Для обычного инференса лучше использовать итоговые weights |
Выбор формата зависит от того, что нужно сохранить после распознавания. Для дальнейшей ручной правки и архивного обмена предпочтительнее ALTO или PageXML. Plain text подходит для поиска и анализа корпуса, но его нельзя использовать для восстановления расположения строк. Если исходная задача начинается с PDF, полезно отдельно понимать чем распознавание PDF отличается от преобразования PDF в Google Docs: Kraken извлекает и транскрибирует страницы, а не создаёт документ Google с восстановленной офисной версткой.
Задача → инструмент → результат → что проверить
| Задача | Инструмент Kraken | Результат | Контроль |
|---|---|---|---|
| Найти строки на странице | segment -bl | Segmentation с baselines и regions | Число линий, порядок и отсутствие склеенных соседних строк |
| Распознать подготовленную страницу | ocr -m model | Текст или XML с транскрипцией | Соответствие модели языку, письму и типу источника |
| Обработать каталог изображений | -I glob, -o suffix | Набор файлов результата | Что шаблон не захватил лишние файлы и имена не конфликтуют |
| Распознать готовую ALTO/PageXML-разметку | -f xml + ocr | Новая транскрипция поверх существующей геометрии | Тип baselines/bbox и ссылка XML на исходное изображение |
| Сохранить геометрию OCR | -a, -x, -h или -y | ALTO, PageXML, hOCR или abbyyXML | Координаты строк и правильный reading order |
| Ускорить GPU-инференс | —device, —precision, -B, —num-line-workers | Тот же OCR с другой схемой вычислений | Память GPU, стабильность и отсутствие численных проблем |
| Адаптировать распознавание под конкретный корпус | ketos train —load | Новая weights-модель | Validation set, codec и метрики на данных, не использованных в обучении |
| Научить новый анализ макета | ketos segtrain | Segmentation weights | Корректность baseline/region annotations и классов |
| Научить порядок чтения | ketos rotrain | Reading-order weights | Совместимость class mappings с segmentation model |
Эта карта показывает границы продукта: Kraken не выполняет «OCR одной кнопкой» в смысле универсального алгоритма для любых страниц. Каждому типу ошибки соответствует отдельный этап. Неверно найденные строки лечатся моделью сегментации или разметкой, а не заменой recognition model; ошибки символов исправляются выбором или дообучением recognition model, а не параметрами reading order.
Требования, производительность и зависимость от оборудования
Официально Kraken поддерживает Linux и macOS на x64 и ARM. Требуемый диапазон Python для ветки 7.x — 3.10–3.13. Рекомендуемый способ установки — изолированная среда: pipx либо virtual environment с pip. Для Linux это снижает риск конфликтов с системным пакетным менеджером; базовые принципы установки приложений в этой ОС разобраны в материале GeekHow о том, как устанавливать приложения в Linux.
Windows не указан среди поддерживаемых платформ Kraken 7.1. Поэтому описание продукта как «программы для Windows, macOS и Linux» было бы неверным. Мобильных приложений для Android и iOS у Kraken также нет: это Python-инструмент для настольных и серверных POSIX-сред, а не камера-сканер для телефона.
По умолчанию инференс можно выполнять на CPU. Для NVIDIA доступен —device cuda:N, для Apple Silicon — —device mps. Параметр —precision управляет числовой точностью; документация отдельно выделяет bf16/bf16-mixed для современных NVIDIA GPU. Параметры batch size и line workers позволяют загружать GPU эффективнее, но увеличивают потребление памяти. Универсального «лучшего» batch size нет: его подбирают по размеру страниц, модели и объёму VRAM, контролируя успешное завершение распознавания.
Фиксированного минимального объёма RAM или VRAM для всех сценариев нет: обучение и инференс имеют разную нагрузку, а PP-OCRv6 tiny, small и medium отличаются размером сети. Для слабой машины разумнее начинать с CPU и небольшого batch size, а затем увеличивать параллелизм только после стабильного результата. Для регулярной обработки больших коллекций ускоритель даёт смысл именно потому, что версия 7.x умеет группировать строки в batches и параллельно готовить их на CPU.
Интернет, приватность и безопасность данных
Сам процесс сегментации и распознавания выполняется локально: изображение читается с диска, модель загружается в локальный процесс, а результат записывается в указанный файл. Для локального инференса не требуется аккаунт и нет обязательной отправки документа в облачный сервис. Это принципиально для архивов, исследовательских коллекций и материалов, которые нельзя загружать во внешнюю OCR-платформу.
Интернет нужен в других точках жизненного цикла: при установке пакета из PyPI, поиске и загрузке моделей командами kraken list/get, а также при публикации модели в HTRMoPo/Zenodo. После загрузки конкретной модели её можно использовать по локальному пути. Публикация — отдельная операция: для неё нужен Zenodo Account и Personal Access Token, поскольку файл создаётся как постоянный депозит.
Модели из каталога имеют собственные карточки и лицензии. Перед использованием в проекте с требованиями к распространению данных нужно читать metadata выбранной модели, а не автоматически переносить лицензию Apache 2.0 с кода Kraken на чужие веса или обучающие наборы. Для закрытого корпуса особенно важно хранить локально исходные изображения, XML-разметку и модели, а доступ к каталогам ограничивать правами ОС; основы прав доступа к файлам и каталогам Linux здесь применимы напрямую.
Kraken не заменяет проверку распознанного текста человеком. Confidence и координаты помогают локализовать сомнительные места, но модель может систематически ошибаться на неизвестном шрифте, другом языке, повреждённой бумаге или разметке, отличающейся от тренировочной. Для научной публикации и архивного описания результат следует считать машинной транскрипцией, пока он не прошёл редакционную верификацию.
Цена, лицензирование и ограничения бесплатного режима
Kraken бесплатен: исходный код распространяется по Apache License 2.0, платной Pro-редакции, подписки, водяного знака и ограниченного trial-режима у движка нет. Локальное распознавание не требует регистрации. Это отличает его от коммерческих HTR-сервисов, где цена обычно привязана к страницам, кредитам или облачному времени.
Бесплатность кода не означает нулевую стоимость эксплуатации. Для сложного корпуса требуются разметка ground truth, обучение или fine-tuning, вычислительные ресурсы и ручная проверка. eScriptorium, которое часто используют рядом с Kraken, тоже отдельный open-source продукт, но его сервер, очередь задач и хранение данных нужно разворачивать и обслуживать самостоятельно. В исследовательском проекте основная стоимость чаще возникает не из лицензии Kraken, а из подготовки данных и контроля качества.
Центральный каталог моделей содержит свободно лицензированные модели, однако конкретные условия определяются карточкой конкретной записи. При публикации собственной модели Zenodo создаёт постоянный депозит: его нельзя считать временным черновиком. Проверять metadata, лицензию и набор обучающих данных нужно до загрузки.
Как пользоваться программой — советы гика
Ниже все рабочие последовательности относятся к Kraken 7.1 и его CLI. Поскольку у программы нет графического окна, «элементы интерфейса» здесь — команды и параметры. Перед любой операцией используйте отдельную папку проекта и не перезаписывайте исходные изображения: выходные файлы лучше давать с новым расширением или суффиксом.
Установить Kraken в изолированную среду
Цель: получить команду kraken без вмешательства в системный Python. Подготовка: Linux или macOS и Python 3.10–3.13. Шаги: при наличии pipx выполните pipx install kraken. Альтернатива — создайте virtual environment, активируйте его и выполните pip install kraken. Для прямого чтения PDF и многостраничных TIFF/JPEG2000 установите pip install «kraken[pdf]». Проверка: вызов kraken —help должен показать список глобальных параметров и подкоманд. Типичная ошибка: pipx использовал Python 3.14 или более новый неподдерживаемый интерпретатор. Исправление: установите совместимый Python и укажите его через pipx install —python python3.13 kraken. Откат: удалите pipx-пакет или virtual environment; системные файлы проекта при этом не затрагиваются.
Найти и скачать подходящую recognition model
Цель: выбрать модель до запуска OCR. Подготовка: установленный Kraken и интернет для обращения к каталогу. Шаги: выполните kraken list —recognition; при необходимости добавьте фильтр —language, —script или —keyword. Для кандидата выполните kraken show DOI и прочитайте язык, письменность, описание материала, метрики и лицензию. Затем скачайте модель командой kraken get DOI. В последней строке команда выводит имя локального model-файла. Проверка: файл должен находиться в локальном хранилище Kraken/HTRMoPo и открываться через kraken show по тому же DOI. Типичная ошибка: выбор модели только по языку. Исправление: сопоставьте тип источника, шрифт или почерк и правила транскрипции. Откат: удаление скачанной модели не изменяет исходные документы.
Выполнить сквозной сценарий «изображение → сегментация → текст»
Цель: получить обычный UTF-8 текст с одной страницы. Подготовка: файл page.tif и подходящая модель model.safetensors. Шаги: выполните kraken -i page.tif page.txt segment -bl ocr -m model.safetensors. Глобальная пара -i задаёт источник и выход; segment -bl находит baselines; ocr -m распознаёт найденные линии. Проверка: откройте page.txt, сопоставьте начало, конец и несколько сложных мест с изображением. Типичная ошибка: model-файл не найден. Исправление: передайте абсолютный путь или имя модели из локального каталога. Откат: удалите только page.txt; исходный TIFF не изменяется.
Сохранить сегментацию отдельно и проверить линии
Цель: отделить ошибки layout analysis от ошибок распознавания. Подготовка: исходное изображение. Шаги: выполните kraken -i page.tif page.seg.json -n segment -bl. Параметр -n оставляет native-формат, поэтому сегментация сохраняется как JSON. Для специализированной layout model укажите её параметром -i/—model после подкоманды segment. Проверка: JSON должен содержать найденные линии и регионы; для визуальной проверки его удобно загрузить в инструмент, который умеет отображать Kraken/PageXML-разметку, либо сериализовать в ALTO/PageXML. Типичная ошибка: строки склеены или пропущены при сложной верстке. Исправление: используйте более подходящую segmentation model вместо попытки исправить recognition model. Откат: сохраните исходный JSON под новым именем перед повторной сегментацией.
Использовать бинаризацию только там, где она нужна
Цель: подготовить 1-bit изображение для legacy workflow или модели, обученной на бинарных данных. Подготовка: исходное изображение и понимание, что современный baseline segmenter обычно работает без этого этапа. Шаги: выполните kraken -i page.tif page_bin.png binarize —threshold 0.5. Затем при необходимости используйте page_bin.png как вход. Проверка: текст и тонкие штрихи должны оставаться различимыми, фон — не превращаться в массив ложных точек. Типичная ошибка: бинаризация ухудшила тонкие исторические штрихи. Исправление: вернитесь к цветному или grayscale исходнику и используйте neural baseline segmentation без binarize. Откат: исходное изображение не меняется; удалите только производный PNG.
Экспортировать результат в ALTO, PageXML, hOCR или abbyyXML
Цель: сохранить координаты и структуру страницы, а не только текст. Подготовка: изображение и recognition model. Шаги: для ALTO выполните kraken -i page.tif page.xml -a segment -bl ocr -m model.safetensors. Для PageXML замените -a на -x, для hOCR — на -h, для abbyyXML — на -y. Флаг формата должен стоять среди глобальных параметров до segment. Проверка: XML/HTML должен содержать строки с координатами; порядок строк сопоставьте с изображением. Типичная ошибка: расширение файла изменено, но флаг сериализации не указан. Исправление: задайте реальный формат глобальным параметром, поскольку расширение само по себе не переключает serializer. Откат: храните native/предыдущий XML до повторной сериализации.
Распознать готовую ALTO или PageXML-сегментацию
Цель: не выполнять layout analysis повторно, если геометрия уже размечена вручную или другим инструментом. Подготовка: XML со ссылкой на исходное изображение и recognition model. Шаги: для набора файлов используйте kraken -f xml -I «data/*.xml» -o _ocr.xml -a ocr -m specialized.safetensors. Kraken автоматически разбирает ALTO/PageXML и передаёт имеющиеся линии в recognizer. При необходимости задайте —linetype baselines или —linetype bbox после ocr. Проверка: геометрия строк должна сохраниться, а текст появиться в тех же элементах. Типичная ошибка: модель обучалась на bbox, а XML интерпретируется как baselines, или наоборот. Исправление: выберите тип линий, соответствующий metadata модели. Откат: не перезаписывайте исходный XML; используйте суффикс _ocr.
Обработать папку изображений пакетно
Цель: запустить один и тот же OCR-конвейер для набора страниц. Подготовка: отдельная входная папка и шаблон, который захватывает только нужные изображения. Шаги: выполните kraken -I «data/*.png» -o .txt segment -bl ocr -m model.safetensors. Каждый исходный PNG получит свой файл результата с заданным суффиксом. Для GPU добавьте до подкоманд —device cuda:0 и подходящую —precision; после ocr можно задать -B и —num-line-workers. Проверка: число результатов должно соответствовать числу входных страниц, а имена — быть уникальными. Типичная ошибка: glob захватил служебные или уже обработанные изображения. Исправление: сузьте маску и разделите input/output каталоги. Откат: удалите только файлы с созданным суффиксом.
Распознать многостраничный PDF
Цель: извлечь и распознать страницы PDF без ручного сохранения каждой страницы в PNG. Подготовка: установка kraken[pdf] и PDF, содержащий изображения страниц. Шаги: используйте -f pdf и batch input для файла, например kraken -I book.pdf -o .txt -f pdf segment -bl ocr -m model.safetensors. Kraken извлекает страницы как изображения и создаёт выходы по страницам. Проверка: убедитесь, что обработано ожидаемое число страниц и не потеряна нумерация. Типичная ошибка: параметр -f pdf используется в базовой установке без extras. Исправление: установите kraken[pdf]. Откат: исходный PDF не изменяется; удаляются только сгенерированные транскрипции.
Настроить направление письма и BiDi
Цель: корректно получить логический порядок текста для RTL и смешанных строк. Подготовка: модель, обученная на нужной письменности, и корректная segmentation. Шаги: при распознавании оставьте —reorder включённым; при необходимости задайте —base-dir R или —base-dir L. Для анализа страницы параметр -d/—text-direction у segment задаёт направление эвристики чтения. Проверка: сравните порядок слов и знаков пунктуации в нескольких смешанных строках с эталонной транскрипцией. Типичная ошибка: визуально «правильная» строка записана в неверном Unicode-порядке. Исправление: верните BiDi reordering и используйте правильное базовое направление. Откат: сохраните предыдущий текст/XML и создайте новый результат с другим суффиксом.
Дообучить recognition model на своём корпусе
Цель: адаптировать распознавание к конкретному почерку, шрифту или правилам транскрипции. Подготовка: размеченные ALTO/PageXML, отдельные training и validation manifests. Для ускорения подготовки можно выполнить ketos compile -f xml -o training_data.arrow *.xml. Шаги: обучение с нуля запускается как ketos train -t training_manifest.txt -e validation_manifest.txt. Для fine-tuning существующей модели используйте ketos train —load existing_model.safetensors -t training_manifest.txt -e validation_manifest.txt. Для PP-OCRv6 добавьте —arch ppocrv6 и при необходимости —variant tiny|small|medium. Проверка: ориентируйтесь на validation metric и отдельно проверяйте страницы, не участвовавшие в обучении. Типичная ошибка: новые символы не входят в codec исходной модели. Исправление: осознанно выберите —resize union или —resize new; default fail полезен как защита от случайной смены алфавита. Откат: не заменяйте исходные weights; сохраняйте новую модель под отдельным именем.
Обучить segmentation model и reading order
Цель: адаптировать layout analysis к нетипичной странице. Подготовка: ALTO/PageXML с baselines, regions и, для reading order, размеченной последовательностью. Шаги: segmentation model обучается командой ketos segtrain -t training_manifest.txt -e validation_manifest.txt. Reading-order model — ketos rotrain -t training_manifest.txt -e validation_manifest.txt; для порядка регионов добавьте —level regions. После обучения совместимые weights можно объединить через ketos convert -o combined_model.safetensors segmentation_model.ckpt reading_order_model.ckpt. Проверка: на validation pages оцените отдельно полноту линий, регионы и последовательность чтения. Типичная ошибка: class mappings reading-order model не совпадают с segmentation model. Исправление: обучайте порядок с —class-mapping-from-ckpt segmentation_model.ckpt. Откат: checkpoints храните отдельно; не удаляйте предыдущую рабочую segmentation model до сравнения.
Продолжить прерванное обучение без потери состояния
Цель: восстановить training run после остановки. Подготовка: checkpoint, например checkpoint_0005.ckpt. Шаги: для recognition используйте ketos train —resume checkpoint_0005.ckpt; для segmentation и reading order соответствующие команды принимают свой —resume. Проверка: training должен продолжиться с сохранённым состоянием optimizer, scheduler и номером эпохи. Типичная ошибка: использование —load вместо —resume в надежде продолжить тот же run. Исправление: —load оставляйте для нового fine-tuning запуска, а для продолжения используйте checkpoint и —resume. Откат: не удаляйте checkpoint после первого успешного продолжения; сохраните его до появления нового стабильного checkpoint.
Плюсы и минусы
Плюсы
- Открытая лицензия Apache 2.0 и отсутствие платной редакции позволяют строить локальные исследовательские и серверные конвейеры без лицензионной подписки.
- Сильная специализация на исторических документах, рукописях и не-латинских письменностях, включая RTL, BiDi и вертикальный текст.
- Раздельно обучаются segmentation, reading order и recognition, поэтому сложность можно исправлять на том этапе, где она возникает.
- ALTO, PageXML, hOCR и abbyyXML позволяют сохранять координаты, структуру страницы и confidence, а не только плоский текст.
- Каталог HTRMoPo доступен прямо из CLI и поддерживает карточки моделей, DOI и фильтры по языку, script и типу задачи.
- Локальный инференс не требует загрузки документов в облако и подходит для чувствительных коллекций при корректной настройке доступа на стороне ОС.
- Есть CPU, CUDA и MPS, а в 7.x распознавание поддерживает batches и параллельную подготовку строк.
- Python API и plugin system позволяют встраивать Kraken в собственные приложения и большие пайплайны.
Минусы
- Собственного графического интерфейса нет; пользователю нужно уверенно работать с терминалом, путями, virtual environments и параметрами CLI.
- Windows не входит в официально поддерживаемые платформы Kraken 7.1.
- Для качественного OCR необходимо подобрать подходящую recognition model; одна универсальная модель не гарантирует хороший результат на исторических материалах.
- Сложная страница может потребовать отдельной segmentation model и ручной разметки данных для обучения.
- Прямая поддержка PDF и многостраничных TIFF/JPEG2000 требует установки extras.
- Переход с 6.x на 7.x затронул API, тренировочные параметры и форматы weights, поэтому старые автоматизированные сценарии нужно пересматривать.
- Старый tag-based multi-model workflow уже deprecated и будет удалён в Kraken 8.
- Результат машинного распознавания требует верификации, особенно когда модель и исходный материал отличаются по почерку, типографике или правилам транскрипции.
Кому подойдёт и кому не подойдёт
Кому подойдёт
- цифровым гуманитариям, архивам и библиотекам, которые распознают исторические книги, рукописи и документы с нетипичной версткой;
- исследовательским группам, которым нужны ALTO/PageXML и сохранение геометрии для последующей аннотации и публикации;
- командам, готовым собирать ground truth и обучать модели под конкретный фонд, автора, типографию или письменность;
- разработчикам, которым нужен локальный OCR/HTR engine с Python API и возможностью автоматизировать большие партии документов;
- проектам с ограничениями на передачу изображений во внешние облачные сервисы.
Кому не подойдёт
- пользователю Windows, который ожидает официальный установщик и графическое окно;
- человеку, которому нужно один раз распознать современный печатный PDF и сразу получить searchable PDF без работы с моделями;
- тем, кто хочет фотографировать документ телефоном и распознавать его в мобильном приложении;
- команде, которой нужны совместная ручная правка, роли, веб-интерфейс и визуальная разметка из коробки — для этого ближе eScriptorium;
- проекту без ресурсов на выбор модели и проверку качества, если исходный материал сильно отличается от готовых моделей.
Перед оцифровкой крупной коллекции полезно обеспечить качественный исходный скан. На GeekHow есть отдельный обзор сканеров; для OCR важнее всего стабильная геометрия страницы, читаемые штрихи и отсутствие агрессивного JPEG-сжатия, потому что программная модель не восстанавливает потерянные детали исходника.
Сравнение с другими аналогами
Kraken корректнее сравнивать не с «офисными OCR-программами», а с движками и платформами, которые решают часть того же конвейера. Ниже одинаковые критерии: основная задача, платформа, порог освоения, форматы, автоматизация, модель оплаты, ограничения и подходящий сценарий.
| Решение | Задача и платформа | Порог освоения | Форматы и автоматизация | Модель оплаты | Главное ограничение и сценарий |
|---|---|---|---|---|---|
| Kraken 7.1 | Исторический ATR/HTR; Linux/macOS | Высокий: CLI, модели, Python, разметка для обучения | Images, PDF extras, ALTO, PageXML, hOCR, abbyyXML; batch CLI, API, trainable pipeline | Open source Apache 2.0 | Нет GUI и официальной Windows-версии; лучший выбор для кастомных исторических коллекций и низкоресурсных письменностей |
| Tesseract 5 | OCR печатного текста; кроссплатформенный движок и API | Средний: CLI проще, много готовых language packs | Большинство image formats; TXT, PDF, hOCR, TSV, ALTO, PAGE; легко автоматизируется CLI/API | Open source Apache 2.0 | Ориентирован прежде всего на печатный OCR; подходит для современных сканов и типовых языков |
| OCRmyPDF | Добавление searchable text layer в существующие PDF | Средний: CLI, но задача более узкая и предсказуемая | Вход/выход PDF; использует Tesseract, имеет plugin API и обработку страниц | Open source | Не является универсальным HTR-тренажёром; рациональнее Kraken, когда конечный результат должен остаться PDF |
| eScriptorium | Веб-рабочее место для разметки и транскрипции исторических документов; серверное развертывание | Средний: GUI упрощает ручную работу, но сервер требует администрирования | Импорт изображений, разметка, segmentation/transcription через Kraken, обучение и правка в браузере | Open source, MIT; расходы связаны с инфраструктурой | Тяжелее как инфраструктура, зато удобнее для совместной ручной проверки и визуальной аннотации |
| PaddleOCR 3.x | Современный OCR/document AI; локальный Python/CLI и отдельный hosted API | Средний–высокий: много моделей и движков инференса | Images/PDF, JSON и визуализированные результаты; CLI/Python, detection/recognition/document pipelines | Open source Apache 2.0 для локального проекта; hosted API отдельный | Более широкий document-AI стек; рациональнее для современных многоязычных документов, а Kraken — для кастомных исторических корпусов |
Если задача сводится к обычному печатному OCR, Tesseract проще по экосистеме и наличию готовых пакетов. Если нужен searchable PDF, OCRmyPDF целенаправленно решает именно эту задачу и не заставляет отдельно проектировать сериализацию. eScriptorium стоит выбирать, когда важна визуальная разметка и ручная коррекция с Kraken под капотом. PaddleOCR сильнее ориентирован на современный document AI и готовые многоязычные pipelines. Kraken остаётся наиболее логичным там, где исследователь готов обучать модель под конкретный исторический материал и хочет полностью контролировать локальный ATR-конвейер.
Для уже распознанного PDF последующая правка содержимого — отдельная задача. В таком случае полезнее сравнение бесплатных редакторов PDF, потому что Kraken не является визуальным редактором страниц.
Типичные проблемы и диагностика
1. Команда kraken не находится после установки
Симптом: shell сообщает, что kraken не найден. Возможная причина: пакет установлен в virtual environment, который не активирован, либо executable pipx не попал в PATH. Диагностика: проверьте, каким Python/pip выполнена установка и доступен ли pipx list. Исправление: активируйте нужную среду или переустановите через pipx с корректным Python 3.10–3.13. Проверка результата: kraken —help должен открываться без ImportError.
2. Установка завершается ошибкой из-за версии Python
Симптом: pip не может подобрать совместимую версию Kraken или зависимостей. Возможная причина: используется Python вне диапазона 3.10–3.13. Диагностика: выполните python —version в той же среде, где запускается pip. Исправление: создайте новую среду на поддерживаемом интерпретаторе, например 3.13. Проверка результата: пакет устанавливается, а kraken —help запускается.
3. PDF не открывается напрямую
Симптом: режим -f pdf недоступен или обработка PDF падает на зависимостях. Возможная причина: установлена базовая версия без PDF extras. Диагностика: проверьте, устанавливался ли пакет как kraken[pdf]. Исправление: добавьте extras в ту же virtual environment. Проверка результата: тот же PDF разбирается по страницам и создаёт выходные файлы.
4. OCR запускается, но модель не найдена
Симптом: ocr -m сообщает, что model path отсутствует. Возможная причина: неверное имя, путь или модель не загружена через HTRMoPo. Диагностика: повторно выполните kraken get DOI и запишите имя файла из финальной строки. Исправление: передайте абсолютный путь или точное локальное имя. Проверка результата: recognizer начинает загружать weights и обрабатывать строки.
5. Текст распознаётся заметно хуже, чем ожидается
Симптом: много замен символов и неверных слов при корректных найденных строках. Возможная причина: recognition model обучалась на другом материале, почерке, нормализации или языке. Диагностика: сначала проверьте сегментацию, затем карточку модели через kraken show DOI и сравните её training data с документом. Исправление: выберите более близкую модель или выполните fine-tuning на размеченном корпусе. Проверка результата: сравните одинаковый контрольный набор до и после смены модели.
6. Строки объединяются, пропускаются или идут в неверном порядке
Симптом: recognizer получает плохие line crops, хотя символы внутри найденных строк распознаются приемлемо. Возможная причина: layout не соответствует stock segmentation model или эвристике reading order. Диагностика: сохраните segmentation отдельно и просмотрите baselines/regions. Исправление: примените специализированную segmentation model, исправьте разметку либо обучите segmentation/reading-order model. Проверка результата: одинаковые страницы должны давать полный набор строк в правильной последовательности.
7. Legacy box segmenter отказывается работать с изображением
Симптом: segment -x сообщает, что вход не binary/bi-level. Возможная причина: legacy bounding-box segmenter требует бинарное изображение. Диагностика: проверьте, действительно ли нужен старый bbox workflow. Исправление: либо предварительно выполните binarize, либо перейдите на рекомендуемый segment -bl, который работает с обычными изображениями. Проверка результата: сегментация завершается и создаёт линии ожидаемого типа.
8. OCR по ALTO/PageXML даёт резкое ухудшение после обновления
Симптом: та же модель на XML-входе стала выдавать плохой текст. Возможная причина: модель обучена на bbox, а вход разбирается как baselines, либо наоборот; в Kraken 7.0/7.0.3 логика выбора типа линий была уточнена. Диагностика: выясните segmentation type в metadata модели и проверьте формат линий XML. Исправление: задайте корректный —linetype или пересоберите dataset тем же способом, что использовался при обучении. Проверка результата: line crops соответствуют тренировочному представлению и точность возвращается к ожидаемому уровню.
9. На GPU возникает нехватка памяти
Симптом: процесс падает при batched recognition на CUDA. Возможная причина: -B/—batch-size слишком велик для модели и доступной VRAM; параллельные workers также увеличивают нагрузку на память системы. Диагностика: повторите тот же файл на CPU или с меньшим batch size. Исправление: уменьшите -B, затем при необходимости сократите —num-line-workers или используйте более лёгкую модель. Проверка результата: полный набор страниц завершается без OOM и создаёт все выходы.
10. Скрипт под Kraken 6.x ломается на 7.x
Симптом: старые training flags, API imports или model conversion больше не работают. Возможная причина: ветка 7.x изменила API, названия manifest options, поведение —load/—resume, глобальные device/precision параметры и стандартный формат weights. Диагностика: сравните команду с migration guide 6.0→7.0 и текущим —help. Исправление: обновите скрипт под актуальные subcommands и safetensors. Проверка результата: тренировочный или inference pipeline проходит на копии проекта от начала до конца.
11. Reading-order model нельзя объединить с segmentation model
Симптом: ketos convert или дальнейший inference сообщает о несовместимых классах. Возможная причина: модели обучены с разными class mappings. Диагностика: сравните line/region mappings в checkpoints. Исправление: переобучите reading-order model с —class-mapping-from-ckpt от нужной segmentation model. Проверка результата: объединённые weights создаются и применяются без рассинхронизации классов.
12. Пакетная обработка создаёт неожиданные имена файлов
Симптом: результаты получают лишний суффикс, дублируют расширение или смешиваются с исходниками. Возможная причина: -I использует исходное имя, а -o именно добавляет suffix, а не заменяет расширение. Диагностика: выполните команду на двух тестовых файлах в отдельной папке. Исправление: подберите однозначный suffix и разделите input/output каталоги. Проверка результата: каждый вход имеет ровно один ожидаемый выход и повторный запуск не захватывает результаты как новые входы.
FAQ
Kraken распознаёт русский язык?
Сам движок не ограничен фиксированным списком языков. В 7.1 доступны многоязычные базовые модели PP-OCRv6, в опубликованных данных есть русский и другие кириллические языки. Реальное качество определяется конкретной моделью и материалом; для исторической кириллицы специализированная или дообученная модель обычно важнее самого факта наличия языка в общем наборе.
Есть ли у Kraken русский интерфейс?
Графического интерфейса у проекта нет. CLI, help и основная документация используют английские названия команд и параметров. Это не связано с языком распознаваемого текста: модель может быть кириллической при полностью англоязычном CLI.
Можно ли использовать Kraken без интернета?
Да, после установки зависимостей и загрузки нужных model-файлов инференс выполняется локально. Сеть нужна для первоначальной установки, поиска/загрузки моделей и публикации собственных weights, но не для каждой страницы.
Нужно ли обязательно бинаризовать скан?
Нет. Современный baseline segmenter и recognition models обычно принимают grayscale или color input напрямую. Бинаризация нужна для legacy bounding-box segmentation и некоторых специальных моделей, обученных на бинарных данных.
Можно ли получить searchable PDF прямо из Kraken?
Kraken умеет читать PDF при установке extras и выдавать распознанный текст/структурированный XML по страницам, но его основной выход — транскрипция и разметка, а не пересобранный PDF с невидимым текстовым слоем. Для такой задачи OCRmyPDF специализирован лучше.
Чем ALTO отличается от обычного TXT?
TXT хранит только последовательность символов. ALTO сохраняет координаты и структуру страницы, поэтому подходит для архивных коллекций, ручной верификации и повторного использования разметки. Для исследования, где нужно связать текст с местом на изображении, ALTO/PageXML информативнее plain text.
Можно ли обучить Kraken на одном почерке?
Да. Recognition model можно дообучить на размеченных строках конкретного автора или корпуса через ketos train —load. Данные должны включать правильную транскрипцию, а качество следует оценивать на отдельном validation/test наборе, который не использовался для обучения.
Поддерживает ли Kraken современные PP-OCRv6-модели?
Да, начиная с 7.1. Для них доступны варианты tiny, small и medium. Такие модели сохраняются только в safetensors и не работают в версиях Kraken до 7.1.
Можно ли исправлять текст вручную внутри Kraken?
Kraken не предоставляет редактор страницы и визуальную панель транскрипции. Ручную коррекцию удобнее выполнять во внешнем редакторе XML/текста или в eScriptorium, которое интегрирует Kraken в браузерный рабочий процесс.
Стоит ли использовать Kraken для обычных офисных сканов?
Для нескольких современных печатных документов Kraken часто сложнее, чем требуется: нужно подобрать модель и работать через CLI. Его преимущества проявляются на историческом материале, нетипичных письменностях, кастомном обучении и задачах, где нужно сохранить структуру и геометрию. Для простого PDF-OCR рациональнее Tesseract или OCRmyPDF.
Что делать после распознавания, если PDF нужно отредактировать?
OCR и редактирование PDF — разные этапы. Kraken создаёт текст и структурированную разметку; последующую визуальную правку страниц выполняют PDF-редакторы. Если нужен именно обратный офисный документ, иногда проще использовать специализированное преобразование или конвертацию Google Docs в PDF уже после ручного переноса и проверки текста.
Итог
Kraken 7.1 имеет смысл выбирать для проекта, где распознавание является частью исследовательского конвейера, а не одноразовой кнопкой. Он особенно уместен для исторических книг, рукописей, сложного порядка чтения и письменностей, для которых требуется собственная модель. В этом сценарии сильными сторонами становятся локальная обработка, обучаемые этапы, ALTO/PageXML и возможность автоматизировать весь процесс через CLI или Python API.
Для разового современного скана Kraken обычно избыточен: отсутствие GUI и необходимость разбираться в моделях увеличивают порог входа. Если конечная цель — searchable PDF, проще использовать OCRmyPDF; для типового печатного OCR без кастомного обучения — Tesseract; для ручной визуальной разметки и совместной работы с тем же движком — eScriptorium.
Главный критерий успеха в Kraken — не число параметров и не мощность GPU, а согласованность трёх вещей: геометрии страницы, recognition model и реального исторического материала. Когда эти части совпадают, движок даёт воспроизводимый локальный ATR-процесс. Когда не совпадают, правильная стратегия — диагностировать конкретный этап, подобрать или дообучить модель и проверять результат на независимых страницах, а не пытаться компенсировать систематические ошибки случайной сменой настроек.





















