MMOCR: инструкция от гика, возможности, установка, распознавание, обучение моделей и ограничения версии 1.0.1

MMOCR — не настольная программа с кнопкой «Открыть PDF», а открытый Python-инструментарий OpenMMLab для исследований и разработки OCR-систем. Он объединяет модели обнаружения текста, распознавания символов и слов, извлечения структурированной информации из документов, подготовку наборов данных, обучение, оценку и визуализацию. Основные рабочие интерфейсы — Python API, командная строка, конфигурационные файлы и утилиты из репозитория. Такой формат делает MMOCR подходящим для разработчиков и исследователей, но заметно повышает порог входа для человека, которому нужен только готовый текст из скана.

Что такое MMOCR и какой продукт рассматривается

В этом обзоре рассматривается именно MMOCR из семейства OpenMMLab, репозиторий которого называется open-mmlab/mmocr. Полное назначение проекта — text detection, text recognition, text spotting и downstream-задачи, среди которых извлечение значимой информации из документов. Проект написан на Python, построен вокруг PyTorch и связан с MMEngine, MMCV и MMDetection.

Название легко спутать с приложениями, сервисами или небольшими библиотеками, которые используют сочетание букв «OCR». У OpenMMLab MMOCR нет отдельного настольного редактора, мобильного клиента и браузерной рабочей панели как основной формы продукта. Базовый способ работы — установить библиотеку и зависимости, выбрать модель или конфигурацию, затем запускать inference, обучение или служебные утилиты из Python либо терминала.

Актуальная стабильная версия пакета в PyPI и последний GitHub Release — 1.0.1, опубликованный 4 июля 2023 года. Код и документация 1.x продолжают быть публично доступны, а GitHub-репозиторий остаётся открытым, однако пользователь должен учитывать возраст стабильного релиза: его таблица совместимости привязана к поколениям MMEngine, MMCV и MMDetection начала ветки OpenMMLab 2.0. Это важнее номера версии самого MMOCR, потому что большая часть проблем установки возникает именно на границах совместимости этих компонентов.

Параметр Подтверждённое состояние
Разработчик и экосистема OpenMMLab; публичный репозиторий open-mmlab/mmocr
Тип продукта Открытый Python-инструментарий для OCR и связанных задач машинного обучения
Стабильный релиз 1.0.1, 4 июля 2023 года
Лицензия Apache License 2.0
Основные задачи обнаружение текста, распознавание текста, end-to-end OCR, извлечение значимой информации; стандартный API также содержит TextSpottingInferencer
Интерфейсы Python API, tools/infer.py, tools/train.py, tools/test.py, конфигурационные файлы, визуализаторы
Операционные системы в руководстве по установке перечислены Linux, Windows и macOS
Базовый стек Python, PyTorch, MMEngine, MMCV, MMDetection
Вход inference путь или URL изображения, папка с изображениями, NumPy-массив, список входов
Выход inference структура Python с предсказаниями; при сохранении — JSON и визуализация изображения
Наборы данных для основных OCR-задач 1.x использует унифицированную JSON-разметку; migration guide отдельно сохраняет исходный WildReceipt-формат для KIE; есть Dataset Preparer и средства миграции
Стоимость плата за пакет MMOCR отсутствует; код распространяется по Apache 2.0
Регистрация для локальной установки и запуска пакета не требуется пользовательский аккаунт MMOCR
Мобильный клиент отдельное мобильное приложение не является частью проекта
Русский графический интерфейс отдельного графического интерфейса нет; документация предоставляет английскую и китайскую версии

Текущий статус и зависимостный стек

Стабильная ветка 1.x относится к OpenMMLab 2.0 и использует MMEngine как общий runner и инфраструктурный слой. Для MMOCR 1.0.1 таблица совместимости фиксирует диапазоны MMEngine 0.7.1 ≤ version < 1.1.0, MMCV 2.0.0rc4 ≤ version < 2.1.0 и MMDetection 3.0.0rc5 ≤ version < 3.2.0. Установка «последних версий всего подряд» поэтому не является эквивалентом поддерживаемой конфигурации.

В разделе prerequisites перечислены Linux, Windows и macOS, Python 3.7, PyTorch 1.6 или новее, torchvision 0.7.0, CUDA 10.1, NCCL 2 и GCC 5.4 или новее. В примере окружения создаётся среда Python 3.8. Эти числа следует воспринимать как зафиксированную матрицу документации стабильного релиза, а не как обещание совместимости со всеми современными версиями Python, CUDA и PyTorch.

Для установки зависимостей OpenMMLab используется MIM. Это снижает количество ручных сочетаний при выборе MMEngine, MMCV и MMDetection, но не отменяет необходимость проверять диапазоны версий. На Linux подготовку окружения удобнее делать в отдельной среде Conda; базовые сведения о работе в этой системе можно освежить в руководстве по Linux для начинающих, а общий принцип установки приложений описан в материале как установить приложение в Linux.

CPU-only режим поддерживается для сборки, обучения, тестирования и inference, но документация отдельно предупреждает об отсутствующих операциях: deformable convolution, modulated deformable convolution, ROI pooling и SyncBatchNorm. Из-за этого некоторые конфигурации DBNet, DBNet++, FCENet, PANet и PSENet не подходят для CPU-only без изменения модели или окружения. Для обучения и тяжёлой оценки GPU остаётся более практичным вариантом, но универсальных цифр скорости MMOCR не публикует как свойства самого пакета.

Интерфейс: из чего состоит рабочая среда

У MMOCR нет одного «главного окна». Рабочая среда складывается из нескольких уровней, и каждый отвечает за отдельный этап: Python API запускает модели из кода; скрипты в каталоге tools дают командную строку; configs описывают архитектуру, данные и обучение; dataset_zoo и конвертеры готовят данные; visualizers показывают исходную разметку, предсказания и ошибки; work_dir хранит логи и checkpoints после обучения.

MMOCRInferencer как верхний уровень

MMOCRInferencer — наиболее короткий путь к готовому результату. Он умеет связать детектор, recognizer и при необходимости KIE-модель в одну цепочку. Пользователь передаёт модели как имена из метаданных либо пути к собственным конфигурациям и checkpoints, затем передаёт изображение, папку, массив NumPy или список входов. Результат возвращается в Python-структуре, пригодной для сериализации в JSON.

На уровне high-level inferencer документация перечисляет режимы text detection, text recognition, OCR как связку detection + recognition и KIE как связку detection + recognition + information extraction. При этом text spotting в high-level списке помечен как coming soon. Отдельный стандартный TextSpottingInferencer присутствует в API, поэтому важно различать два уровня: высокоуровневая связка MMOCRInferencer и стандартные inferencer-классы OpenMMLab.

Визуализация результата OCR в MMOCR с найденными областями текста
Пример визуализации OCR из документации MMOCR: модель локализует текстовые области и связывает их с результатами распознавания.

Стандартные Inferencer-классы

Для интеграции в собственный код предусмотрены TextDetInferencer, TextRecInferencer, TextSpottingInferencer и KIEInferencer. У них более единообразный для OpenMMLab интерфейс, чем у MMOCRInferencer. Разработчик получает более явное разделение задач и может независимо выбирать модель, checkpoint, device, формат возвращаемых данных и режим визуализации.

Результат обнаружения текста через TextDetInferencer в MMOCR
Стандартный TextDetInferencer визуализирует найденные текстовые области без обязательного этапа распознавания символов.

Командная строка

Скрипт tools/infer.py предоставляет CLI для MMOCRInferencer. Обязательный аргумент — путь к изображению или папке. Параметры Python API преобразуются в CLI-параметры заменой подчёркиваний на дефисы и добавлением двойного дефиса: например out_dir становится —out-dir. Логический параметр считается включённым, если он присутствует в команде.

CLI по умолчанию не печатает предсказание в терминал. Для вывода используется —print-result. Для показа визуализации применяется —show, а для сервера без GUI практичнее сохранять результат в каталог. Такое устройство объясняет частую ситуацию, когда команда завершилась без ошибки, но пользователь «не видит OCR»: отсутствие печати не означает отсутствие inference.

Конфигурационные файлы

Конфиги MMOCR описывают модель, preprocessing, datasets, train/validation/test dataloaders, оптимизатор, scheduler, evaluators и визуализацию. Для detection, recognition и KIE используются разные типы компонентов и метрик. В 1.x конфигурационная логика унифицирована с другими проектами OpenMMLab, поэтому переход между MMDetection и MMOCR проще для разработчика, уже знакомого с MMEngine.

Конфиг — это редактируемый исходный артефакт проекта, а не декоративный пресет. Он определяет, какие изображения и annotations будут прочитаны, какие transforms применятся и какая метрика будет вычислена. Перед обучением его полезно проверять через browse_dataset, потому что ошибки в путях, разметке и preprocessing часто проявляются раньше, чем первая эпоха обучения.

Визуализаторы и каталоги результата

Встроенные visualizers показывают изображения, ground truth и predictions. Для text detection предусмотрен TextDetLocalVisualizer; для training/test результаты могут сохраняться через LocalVisBackend и другие backends. В inference high-level API можно сохранить предсказания и визуализации в out_dir, где создаются подпапки preds и vis.

При стандартном сохранении prediction получает расширение JSON, а визуализация — изображение с именем исходного файла. Такой выход удобен для последующей обработки: JSON можно прочитать программно, а картинку быстро проверить глазами. Это не экспорт «документа» в DOCX или PDF; MMOCR возвращает данные OCR и изображение-проверку, а документные форматы формируются уже внешним кодом.

Основные функции и что они дают

Обнаружение текста

Text detection отвечает на вопрос, где на изображении находятся текстовые области. В модельном наборе MMOCR присутствуют DBNet, DBNet++, Mask R-CNN, PANet, PSENet, TextSnake, DRRG и FCENet. Результат детектора включает polygons или bounding boxes и scores. Это основа для сцен с вывесками, фотографиями, сканами и документами, где текст сначала нужно локализовать.

Детектор не обязан распознавать символы. Такое разделение полезно при обучении собственного recognizer, оценке качества локализации или подготовке crop-областей для другого движка. Визуализатор позволяет увидеть predicted polygons поверх исходного изображения.

Распознавание текста

Text recognition принимает область текста и выдаёт строку вместе с оценкой уверенности. В модельном наборе перечислены ABINet, ASTER, CRNN, MASTER, NRTR, RobustScanner, SAR, SATRN и SVTR. Выбор recognizer зависит от алфавита, геометрии текста, подготовки данных и соответствия pretrained checkpoint конкретной задаче.

MMOCR не является «универсальным языковым пакетом» в смысле Tesseract или EasyOCR, где пользователь прежде всего выбирает язык. Здесь значительная часть возможностей привязана к конкретной архитектуре, словарю и набору данных. Для собственной предметной области обычно важнее подобрать или дообучить конфигурацию, чем просто изменить один языковой переключатель.

End-to-end OCR

В режиме OCR MMOCRInferencer связывает text detector и recognizer. На выходе появляются списки распознанных строк, confidence scores и геометрия найденных областей. Это наиболее близкий к привычному OCR сценарий: одно изображение проходит локализацию и распознавание в едином вызове.

Сильная сторона такого подхода — возможность независимо выбирать detector и recognizer. Ограничение — совместимость и качество пары нужно оценивать на собственных данных. Сам факт наличия двух pretrained моделей не гарантирует точность на конкретном шрифте, языке или типе съёмки.

Извлечение структурированной информации

KIE-режим добавляет этап, который связывает распознанные текстовые узлы с метками и отношениями. В модельном списке MMOCR для этой задачи представлен SDMGR. High-level MMOCRInferencer требует одновременно задать detection, recognition и KIE компоненты.

Результат KIE отличается от обычной строки OCR: он содержит labels, scores, edge scores и edge labels. Это подходит для исследований чеков, форм и документов, где важна не только последовательность символов, но и роль отдельных фрагментов.

Визуализация KIE в MMOCR на примере чека с классификацией текстовых узлов
В KIE-визуализации MMOCR показаны исходный документ, распознанные узлы, классы и связи между элементами.

Пакетный inference

Inferencer принимает папку или список изображений, а параметр batch_size задаёт общий размер batch. Для high-level MMOCRInferencer отдельно предусмотрены det_batch_size, rec_batch_size и kie_batch_size, которые могут переопределять общий batch для соответствующего этапа. Это позволяет обрабатывать коллекции изображений без собственного цикла по одному файлу.

Пакетность не следует путать с гарантией ускорения. Реальный throughput зависит от модели, размера входов, GPU, памяти, versions PyTorch/CUDA и batch. Документация даёт механизм управления batch, но не обещает одну производительность для всех конфигураций.

Подготовка datasets

Dataset Preparer автоматизирует download, extraction, format conversion и generation базовой конфигурации для поддерживаемых наборов данных. Команда prepare_dataset.py принимает task textdet, textrecog, textspotting или kie, splits, число процессов и дополнительные параметры. Этот инструмент относится к исследовательскому циклу MMOCR, а не к конечному OCR пользователя.

Для text detection и text recognition MMOCR 1.x использует унифицированную JSON-разметку с metainfo и data_list. Внутри data_list хранятся image path и instances, а для OCR-задач применяются поля bbox, polygon, text и ignore в зависимости от типа dataset. Migration guide отдельно отмечает исключение: KIE продолжает использовать исходный annotation format WildReceipt. Старые txt/jsonl форматы recognition из 0.x считаются устаревшими; для миграции предоставлены специальные скрипты.

Обучение, тестирование и оценка

tools/train.py запускает обучение по конфигурации, поддерживает work-dir, resume, AMP, автоматическое масштабирование learning rate и launcher для distributed запуска. tools/test.py тестирует checkpoint по конфигурации и умеет показывать либо сохранять визуализацию predictions.

Для оценки встроены task-specific metrics: HmeanIOUMetric для detection; WordMetric, CharMetric и OneMinusNEDMetric для recognition; F1Metric для KIE. Это позволяет сравнивать checkpoints на одной методике, но метрики не заменяют ручную проверку ошибок на собственных изображениях.

Типичный рабочий процесс от изображения до результата

Наиболее короткий сценарий начинается с выбора detector и recognizer, затем MMOCRInferencer получает изображение. Detector возвращает геометрию текстовых областей, recognizer формирует строки и scores, после чего high-level слой объединяет данные в одну структуру. Пользователь либо забирает возвращённый словарь в Python, либо включает печать, либо сохраняет JSON и visualization в out_dir.

Для исследовательского проекта процесс длиннее. Сначала готовится dataset в формате MMOCR 1.x, затем выбирается базовый config, проверяются transforms через browser datasets, запускается training, после него test с метриками и визуализацией. Итоговый checkpoint можно подать обратно в Inferencer вместе с собственным config. Такой цикл показывает, почему MMOCR разумнее воспринимать как framework/toolbox, а не как готовый OCR-конвертер.

Форматы, импорт и экспорт

Inference API документирует вход как путь или URL к изображению, NumPy-массив, список таких входов или путь к папке. Для KIEInferencer возможен структурированный dict с изображением или его размером, bboxes и текстами. Формат NumPy для обычных inferencer ожидается в BGR-порядке, если массив получен через mmcv.imread.

Прямой PDF-вход не перечислен среди типов MMOCRInferencer. Это важное отличие от библиотек, ориентированных на документы. Для PDF-потока страницы требуется преобразовать в изображения вне MMOCR, а затем передать их в pipeline. Сам MMOCR сохраняет prediction как JSON и visualization как изображение, а не собирает распознанный материал обратно в PDF или офисный документ.

Dataset layer 1.x использует JSON как основной унифицированный annotation format для text detection и text recognition; для KIE migration guide сохраняет WildReceipt annotation format. Для старых recognition datasets доступны migration utilities из txt, jsonl и LMDB. Dataset Preparer умеет готовить поддерживаемые наборы данных и генерировать базовый config, поэтому ручная конвертация нужна не для каждого академического dataset.

Карта форматов и совместимости

Объект Что принимает или создаёт MMOCR Редактируемость и переносимость Что учитывать
Одиночный inference путь/URL изображения или NumPy-массив вход остаётся обычным изображением; prediction возвращается структурой Python для массива важен ожидаемый порядок каналов; URL требует сетевого доступа
Пакетный inference папка или список входов каждое изображение обрабатывается отдельно, результаты можно сериализовать batch_size влияет на память и throughput
Prediction JSON при save_pred машиночитаемый текст, confidence и геометрия структура зависит от типа inferencer
Visualization изображение при save_vis удобно для визуального контроля, но это не редактируемая OCR-разметка визуализация не заменяет JSON
Dataset 1.x JSON с metainfo и data_list редактируется как структурированный текст и переносится между конфигами MMOCR поля instances различаются между detection, recognition и spotting
Старые recognition annotations txt, jsonl, LMDB через migration tools преобразуются в новый JSON старые форматы помечены как deprecated
Checkpoint файл весов, обычно .pth в примерах OpenMMLab используется вместе с model/config metadata должен соответствовать архитектуре и зависимостям
PDF не указан как прямой input MMOCRInferencer нужен внешний этап рендеринга страниц в изображения MMOCR не является PDF-конвертером

Задача → инструмент → результат → что проверить

Задача Инструмент MMOCR Результат Контроль
Найти текст на фотографии TextDetInferencer или det-компонент MMOCRInferencer polygons/bboxes и scores визуально сверить, что текстовые области не пропущены и фон не принят за текст
Прочитать подготовленный crop TextRecInferencer строка и confidence сопоставить распознанную строку с изображением, особенно редкие символы
Получить end-to-end OCR MMOCRInferencer с det и rec геометрия, строки и scores в одном prediction проверять отдельно ошибки локализации и ошибки чтения
Разметить роли элементов документа MMOCRInferencer с det, rec и kie labels и отношения между узлами проверить не только текст, но и присвоенный класс
Обработать каталог изображений путь к папке или список + batch_size набор predictions сверить количество входных файлов и сохранённых результатов
Подготовить academic dataset prepare_dataset.py распакованные данные, конвертированные annotations и базовый config проверить split, task и итоговые пути
Проверить transforms до обучения browse_dataset.py визуализация original/transformed samples проверить bboxes/polygons, scale, crop и ignore-разметку
Обучить собственную модель tools/train.py logs и checkpoints в work-dir следить за метриками, сохранением checkpoint и соответствием config
Оценить checkpoint tools/test.py и task metric метрики и при необходимости visualization сравнивать одинаковые datasets и одинаковые настройки evaluator

Автоматизация, облако и работа без интернета

MMOCR автоматизирует batch inference, data preparation, training/testing scripts и distributed запуск через PyTorch. Это программная автоматизация: пользователь строит pipeline в коде или shell, а не задаёт задания в визуальной очереди. Для массовой обработки можно передавать папку, список входов и batch_size, а для обучения — использовать launcher none, pytorch, slurm или mpi.

Проект не является облачным OCR-сервисом. При локальном checkpoint и локальном изображении inference выполняется в локальном Python-процессе. Интернет нужен на этапах установки пакетов, получения pretrained weights по имени модели, загрузки datasets и при передаче URL как input. В версии 1.0.1 также добавлена поддержка AWS S3 obtainer для Dataset Preparer, но это опциональный источник данных, а не обязательная облачная обработка.

Для закрытой среды разумно заранее зафиксировать пакетные версии, загрузить нужные checkpoints и хранить inputs локально. Тогда сетевой доступ не нужен для самого вызова inference. Важно не смешивать это с полной автономностью проекта: если окружение пересобирается с нуля, зависимости и веса всё равно нужно получить из доверенного источника.

Безопасность и приватность

MMOCR распространяется как открытый код по Apache 2.0 и не требует отправлять изображения на централизованный сервис для стандартного локального inference. Это позволяет держать документы внутри собственной машины или инфраструктуры. Однако источник входа может быть URL, а pretrained weights при указании model name автоматически загружаются из OpenMMLab model zoo, поэтому сетевое поведение зависит от выбранного способа запуска.

Checkpoint следует получать только из доверенного источника. MMOCR построен на PyTorch, а PyTorch прямо предупреждает не загружать сериализованные данные из недоверенных источников через torch.load. Для проекта с чувствительными документами безопасная схема — использовать проверенные official checkpoints или собственные веса, хранить inputs локально и не добавлять сторонние network backends без необходимости.

Dataset licenses также требуют отдельной проверки. Лицензия Apache 2.0 относится к коду MMOCR, но академические datasets в dataset zoo имеют собственные условия. Это особенно важно при коммерческом обучении и распространении производных моделей: наличие dataset в preparer не превращает его автоматически в данные без ограничений.

Производительность и аппаратные ограничения

MMOCR не задаёт одной производительности для всей библиотеки, потому что DBNet, CRNN, SAR, SDMGR и другие модели различаются по вычислительной стоимости. Производительность зависит от input resolution, выбранной архитектуры, batch size, device и versions CUDA/PyTorch. Поэтому корректнее оценивать конкретный config на собственном hardware, а не переносить результаты одной модели на весь toolbox.

GPU можно выбрать явно через device, например cuda:0; CPU также допустим. Для training tools поддерживается AMP, distributed training и auto-scale-lr. CPU-only имеет ограничения на некоторые CUDA/C++ operations, поэтому отдельные model configs не запускаются без изменений. Если задача — разовое распознавание пары изображений, сложность этого стека может быть неоправданной; если задача — обучение и сравнение моделей, возможность управлять device, datasets и evaluator становится центральным преимуществом.

Стоимость, лицензия и ограничения бесплатного использования

MMOCR не имеет платного тарифа, подписки, trial-периода и отдельной коммерческой редакции самого пакета. Исходный код публикуется по Apache License 2.0, а пакет доступен через PyPI/MIM и репозиторий. Регистрация для локального использования не нужна.

Нулевая цена лицензии не означает нулевую стоимость проекта. Обучение может потребовать GPU, дисковое пространство для datasets и checkpoints, время на совместимость зависимостей и инженерную интеграцию. Эти расходы относятся к инфраструктуре и разработке, а не к лицензии MMOCR.

У зависимостей и datasets могут быть собственные условия. При внедрении в продукт нужно отдельно проверять лицензии model weights, данных и сторонних packages, которые включены в конкретное окружение.

Плюсы

  • Один toolbox охватывает detection, recognition, end-to-end OCR, KIE, datasets, training, testing, evaluation и visualization.
  • Python API и CLI дают два воспроизводимых способа запуска без обязательного GUI.
  • Модульная архитектура позволяет менять backbones, necks, heads, preprocessing, losses, optimizers и evaluator через конфигурации OpenMMLab.
  • MMOCRInferencer упрощает связку detector + recognizer и возвращает результат в JSON-serializable структуре.
  • Batch input через папку или список и отдельные batch sizes для det/rec/kie подходят для автоматизированных pipeline.
  • Dataset Preparer и унифицированный JSON-формат 1.x уменьшают разнобой между академическими наборами данных.
  • Встроенные metrics и visualizers позволяют проверять не только итоговую строку, но и локализацию, разметку и ошибки модели.
  • Код распространяется по Apache 2.0 и может работать локально без обязательной отправки изображений в сторонний OCR-сервис.

Минусы

  • Стабильный релиз 1.0.1 датирован июлем 2023 года, поэтому его dependency ranges не совпадают с принципом «ставить самые новые версии».
  • MMOCR не предоставляет настольный GUI и не подходит пользователю, который ожидает визуальный OCR-редактор без Python и терминала.
  • Прямой PDF-input не входит в задокументированные типы MMOCRInferencer; документный поток требует внешнего преобразования страниц.
  • CPU-only режим не поддерживает ряд operations, из-за чего некоторые configs DBNet, DBNet++, FCENet, PANet и PSENet недоступны без корректировки.
  • Высокоуровневый MMOCRInferencer не закрывает text spotting тем же способом: в его списке эта функция помечена как coming soon, хотя стандартный TextSpottingInferencer существует.
  • Распознавание не сводится к выбору языка: качество зависит от модели, словаря, dataset и соответствия предметной области.
  • Установка включает несколько взаимозависимых OpenMMLab packages, поэтому version mismatch является реальным источником сбоев.
  • Экспорт ориентирован на JSON и visualizations, а не на готовые DOCX, searchable PDF или верстку исходного документа.

Кому подойдёт

  • Исследователям OCR, которым нужно сравнивать архитектуры detection и recognition на воспроизводимых configs.
  • Разработчикам Python, которые хотят встроить локальный OCR в собственный pipeline и контролировать модель, device и формат результата.
  • Командам, обучающим собственные модели на размеченных datasets и использующим единый OpenMMLab stack.
  • Проектам, где важны polygons, confidence, labels и task-specific metrics, а не только финальная строка текста.
  • Пользователям MMDetection/MMEngine, для которых единая архитектура OpenMMLab снижает стоимость освоения.

Кому не подойдёт

  • Пользователю без Python, которому нужен OCR через обычное окно приложения и кнопки импорта/экспорта.
  • Сценарию «открыть многостраничный PDF и сохранить редактируемый Word» без собственного кода вокруг OCR.
  • Мобильной задаче, где нужен готовый iOS/Android-клиент из магазина приложений.
  • Проекту, который требует свежий стабильный пакет с официальной матрицей для последних поколений Python, PyTorch и CUDA без фиксации legacy-диапазонов.
  • Разовой простой задаче, где стоимость установки OpenMMLab stack выше ценности тонкого контроля над моделями.

Жизненный цикл MMOCR

Ветка 0.x и ветка 1.x различаются не косметически. При переходе к OpenMMLab 2.0 main branch была обновлена до 1.0, а старый код 0.6.3 перенесён в ветку 0.x. В 1.x появились MMEngine runner, унифицированные interfaces training/testing/datasets/models/evaluation/visualization и новый формат datasets.

Релиз 1.0.0 вышел 6 апреля 2023 года. Версия 1.0.1 от 4 июля 2023 года добавила scheduler visualization, AWS S3 obtainer support, исправления и обновления документации. На момент подготовки материала 1.0.1 остаётся latest release в GitHub и latest version в PyPI.

Для старого проекта на MMOCR 0.x это означает реальную migration task. Прежние recognition annotations txt/jsonl помечены deprecated, а 1.x использует unified JSON. Configs, datasets, interfaces и часть utility paths менялись. Надёжнее переносить проект по migration guide и конвертировать annotations, чем подменять package version в существующем environment и ожидать совместимости.

Как пользоваться программой — советы гика

1. Установить MMOCR и проверить совместимость окружения

Цель. Получить рабочее изолированное окружение, в котором версии MMOCR, MMEngine, MMCV и MMDetection соответствуют стабильной матрице 1.0.1.

Подготовка. Нужны Python/Conda и подходящая установка PyTorch. Для GPU заранее выбирают совместимые PyTorch и CUDA; для CPU можно ставить CPU build, помня об ограничениях отдельных operations. В Linux полезно заранее убедиться в правах на рабочий каталог; отдельный разбор есть в материале о правах доступа к файлам и каталогам Linux.

  1. Создайте отдельную среду Conda, например с Python 3.8, и активируйте её.
  2. Установите PyTorch и torchvision способом, соответствующим CPU или вашей CUDA.
  3. Установите OpenMIM командой pip install -U openmim.
  4. Через MIM установите mmengine, mmcv и mmdet, контролируя диапазоны совместимости MMOCR 1.0.1.
  5. Для разработки клонируйте open-mmlab/mmocr, перейдите в каталог репозитория и выполните pip install -v -e .; для использования как dependency допускается mim install mmocr.
  6. Проверьте, что импорт mmocr проходит без ImportError и что tools/infer.py доступен из корня source installation.

Важные параметры. Для 1.0.1 ориентируйтесь на mmengine 0.7.1–<1.1.0, mmcv 2.0.0rc4–<2.1.0 и mmdet 3.0.0rc5–<3.2.0. Не обновляйте эти packages независимо до latest без проверки.

Проверка результата. Интерпретатор должен импортировать MMOCR, а команды tools должны запускать help/argument parsing без ошибки модулей.

Типичная ошибка. Установлен несовместимый MMCV или MMDetection, из-за чего импорт заканчивается assertion/import error.

Безопасный откат. Не исправляйте environment поверх рабочего проекта десятками обновлений. Создайте новую Conda environment с зафиксированными версиями, а старую оставьте до подтверждения результата.

2. Сквозной сценарий: распознать текст на изображении и сохранить результат

Цель. Выполнить end-to-end OCR на одном изображении, получить строки, confidence и геометрию, затем сохранить prediction и visualization.

Подготовка. Нужен source installation MMOCR и тестовое изображение. Для первого запуска pretrained model name потребуется доступ к model zoo, потому что веса загружаются автоматически.

  1. Из корня репозитория запустите tools/infer.py и передайте путь к изображению.
  2. Укажите detector параметром —det, например DBNet.
  3. Укажите recognizer параметром —rec, например SAR.
  4. Добавьте —print-result, если хотите увидеть JSON-like prediction в терминале.
  5. Чтобы сохранить файлы вместо всплывающего окна, задайте —out-dir для отдельного каталога и включите параметры, соответствующие save_pred и save_vis.
  6. После завершения откройте JSON в подпапке preds и изображение в подпапке vis.

Важные параметры. —det и —rec определяют пару моделей; —print-result управляет выводом в консоль; out_dir задаёт место сохранения. На сервере без GUI не полагайтесь на —show.

Проверка результата. В prediction должны присутствовать rec_texts, rec_scores, det_polygons или det_bboxes и det_scores. В visualization текстовые области должны соответствовать изображению.

Типичная ошибка. Команда завершилась, но в терминале нет распознанных строк, потому что —print-result не задан.

Безопасный откат. Используйте новый out_dir для каждого эксперимента. При неудачном выборе моделей удаляется только каталог результатов; исходное изображение и environment не меняются.

3. Выполнить только обнаружение текста

Цель. Получить геометрию текстовых областей без этапа распознавания символов.

Подготовка. Выберите text detection model из model zoo и входное изображение.

  1. В Python импортируйте TextDetInferencer из mmocr.apis.
  2. Создайте inferencer, передав model с именем pretrained detector либо путь к config.
  3. При необходимости передайте weights как путь к собственному checkpoint.
  4. Передайте путь к изображению, URL, NumPy-массив или список входов в вызов inferencer.
  5. Для визуального контроля включите return_vis/show либо сохранение visualization в out_dir.

Важные параметры. model должен соответствовать типу TextDetInferencer; device можно задать как cpu или cuda:0. draw_pred относится к detection/spotting visualizers.

Проверка результата. В predictions ожидаются polygons, bboxes и scores, а не распознанные строки.

Типичная ошибка. Пользователь ждёт текстовую строку от detection-only pipeline. Detector отвечает только за локализацию.

Безопасный откат. Если geometry неудовлетворительна, смените detector или checkpoint, не меняя исходные файлы. Сохраните сравниваемые outputs в разные каталоги.

4. Выполнить только распознавание подготовленной области

Цель. Прочитать изображение, где текст уже выделен или обрезан, без отдельного detector.

Подготовка. Нужен crop текстовой строки/слова и recognition model.

  1. Импортируйте TextRecInferencer из mmocr.apis.
  2. Инициализируйте его recognition model или config/checkpoint своей модели.
  3. Передайте путь к crop или NumPy-массив.
  4. Получите predictions из возвращаемого словаря.
  5. Сохраните JSON через стандартные save options, если результат нужен внешней программе.

Важные параметры. Для recognition output содержит text и score; геометрия detector здесь не формируется.

Проверка результата. Сопоставьте text с crop, а confidence используйте как сигнал для ручной проверки, а не как абсолютную гарантию.

Типичная ошибка. В recognizer передают фотографию целой страницы с несколькими разрозненными областями и ожидают поведение end-to-end OCR.

Безопасный откат. Не перезаписывайте crops после preprocessing. Сохраняйте исходные изображения отдельно, чтобы можно было повторить распознавание другой моделью.

5. Запустить end-to-end text spotting через стандартный Inferencer

Цель. Использовать модель, которая в одном standard Inferencer возвращает и геометрию текстовых областей, и распознанные строки, не собирая high-level пару detector + recognizer.

Подготовка. Нужны TextSpottingInferencer и совместимая с ним text spotting model. В MMOCR 1.0.1 этот standard Inferencer существует, хотя режим OCR (text spotting) в списке возможностей MMOCRInferencer помечен как coming soon.

  1. Импортируйте TextSpottingInferencer из mmocr.apis.
  2. Создайте inferencer, передав в model имя text spotting модели из metafile/model index либо путь к её config.
  3. Для собственного checkpoint передайте weights вместе с соответствующим config.
  4. Передайте изображение как path/URL, NumPy-массив, список входов или каталог изображений.
  5. Получите predictions; для standard text spotting output содержит polygons или bboxes, scores и texts.
  6. Для контроля результата включите visualization либо сохраните prediction и visualization через out_dir, save_pred и save_vis.

Важные параметры. Тип model должен соответствовать TextSpottingInferencer. Device задаётся так же, как у других standard Inferencers; batch_size управляет пакетным inference.

Проверка результата. В одной prediction должны одновременно присутствовать геометрия найденных областей и список распознанных texts. Это отличает text spotting от detection-only и recognition-only вызовов.

Типичная ошибка. TextSpotting model передают в MMOCRInferencer и ожидают отдельный high-level параметр для spotting. В документации 1.0.1 этот high-level режим ещё помечен как coming soon.

Безопасный откат. Сохраните config/checkpoint и outputs отдельно. При несовместимости вернитесь к документированной цепочке MMOCRInferencer с det + rec, не изменяя исходные изображения и разметку.

6. Извлечь структуру из документа через KIE

Цель. Получить не только распознанный текст, но и labels/relations между фрагментами документа.

Подготовка. Для high-level режима должны быть одновременно заданы detector, recognizer и KIE model. В примерах MMOCR используется SDMGR как KIE-компонент.

  1. Создайте MMOCRInferencer с параметрами det, rec и kie.
  2. Передайте изображение документа.
  3. Включите visualization для проверки узлов и связей.
  4. Получите prediction и анализируйте kie_labels, kie_scores, kie_edge_scores и kie_edge_labels вместе с OCR-результатом.
  5. При необходимости сохраните JSON и visualization в отдельный out_dir.

Важные параметры. KIE high-level pipeline не активируется без detector и recognizer. Checkpoint KIE должен соответствовать своей конфигурации и label schema.

Проверка результата. Проверяйте два уровня: правильно ли прочитан текст и правильно ли assigned role/relationship. Хорошая строка OCR не гарантирует корректный KIE label.

Типичная ошибка. Пользователь задаёт только kie model и ожидает, что high-level pipeline самостоятельно создаст det/rec stages.

Безопасный откат. Храните OCR prediction отдельно от KIE postprocessing. При смене KIE checkpoint можно сравнить labels, не теряя исходный OCR результат.

7. Обработать папку изображений пакетно

Цель. Пропустить через одну модель множество изображений без ручного запуска по одному.

Подготовка. Сложите нужные изображения в отдельную папку или сформируйте Python list. Исключите посторонние файлы, чтобы контроль количества результатов был однозначным.

  1. Передайте path к папке в inferencer либо tools/infer.py.
  2. Выберите det/rec/kie так же, как для одиночного изображения.
  3. Установите batch_size; при high-level pipeline при необходимости задайте det_batch_size, rec_batch_size и kie_batch_size.
  4. Укажите out_dir и включите сохранение predictions/visualizations.
  5. После завершения сопоставьте число input images с количеством JSON/visualization files.

Важные параметры. Batch size влияет на память; отдельные stage-specific batch sizes переопределяют общий batch для соответствующего этапа.

Проверка результата. Не ограничивайтесь наличием файлов. Выберите несколько простых и сложных изображений и сравните geometry/text вручную.

Типичная ошибка. Слишком большой batch приводит к нехватке GPU memory либо резкому падению стабильности процесса.

Безопасный откат. Уменьшите batch size и повторите обработку в новый каталог. Исходную папку не используйте как out_dir.

8. Сохранить JSON и визуализацию без графического окна

Цель. Работать на сервере, в контейнере или SSH-сессии без X11/GUI.

Подготовка. Выберите каталог, доступный для записи. При проблемах с правами на Linux полезно проверить owner/permissions, а не запускать процесс с избыточными привилегиями.

  1. Не используйте show как единственный способ контроля.
  2. В Python вызове задайте out_dir и save_pred=True.
  3. Добавьте save_vis=True, если нужна картинка-проверка.
  4. В CLI передайте соответствующие параметры с дефисами.
  5. Проверьте подпапки preds и vis после завершения.

Важные параметры. show отвечает за popup, save_vis — за файл visualization, save_pred — за JSON prediction. Это независимые действия.

Проверка результата. JSON должен открываться как структурированный текст, а visualization — как изображение с тем же базовым именем, что и input.

Типичная ошибка. На headless server используется —show, но окно не появляется. Документация прямо предупреждает об этом случае.

Безопасный откат. Удалите только output directory и повторите с правильными save flags; не меняйте display configuration системы ради разовой проверки.

9. Подготовить dataset через Dataset Preparer

Цель. Автоматизировать получение, распаковку и conversion поддерживаемого academic dataset в структуру MMOCR.

Подготовка. Работайте в source repository; проверьте свободное место и лицензию dataset. Dataset Preparer остаётся beta-инструментом.

  1. Запустите tools/dataset_converters/prepare_dataset.py.
  2. Передайте имя dataset.
  3. Задайте —task из textdet, textrecog, textspotting или kie.
  4. При необходимости укажите —splits и —nproc.
  5. Не используйте overwrite options до проверки существующего config/data.
  6. После завершения проверьте images, annotations и сгенерированный base config.

Важные параметры. —nproc задаёт число процессов; —task определяет целевую task; —splits ограничивает части dataset; —overwrite-cfg может перезаписать конфигурацию.

Проверка результата. Убедитесь, что data_root и generated config указывают на реально созданные файлы, а annotation JSON содержит ожидаемые instances.

Типичная ошибка. Пользователь считает, что one-click preparer универсален для любого произвольного dataset. Он опирается на описания поддерживаемых наборов и их preparation rules.

Безопасный откат. Для собственных данных готовьте отдельный каталог. Перед overwrite сохраняйте config; при сбое удаляйте только частично созданную копию, не исходный dataset.

10. Визуально проверить dataset до обучения

Цель. Увидеть original или transformed samples и обнаружить ошибки разметки/preprocessing до долгого training.

Подготовка. Нужен config training или dataset config, который уже читает подготовленные annotations.

  1. Запустите tools/visualizations/browse_dataset.py и передайте config.
  2. Для просмотра исходных данных используйте mode original; transformed показывает результат pipeline transforms.
  3. При необходимости задайте output-dir вместо popup.
  4. Ограничьте количество показываемых samples параметром show-number.
  5. Сверьте polygons/bboxes, text labels, crop/resize и ignore flags.

Важные параметры. —output-dir сохраняет visualization; —phase выбирает dataset phase; —mode переключает original/transformed; —task задаёт task; —show-number ограничивает sample count.

Проверка результата. Разметка должна лежать на фактическом тексте, а transforms не должны разрушать содержание или геометрию labels.

Типичная ошибка. Training запускают сразу после conversion, не замечая неверный data_root или некорректный transform.

Безопасный откат. Исправляйте config копией и повторно запускайте browser. Исходные annotations сохраняйте отдельно до подтверждения conversion.

11. Обучить модель по конфигурации

Цель. Получить собственный checkpoint на подготовленном dataset.

Подготовка. Dataset должен открываться и визуализироваться корректно; config — содержать train/val dataloaders, model, optimizer и evaluator.

  1. Запустите python tools/train.py и передайте путь к config.
  2. Задайте —work-dir для отдельного каталога эксперимента.
  3. При поддерживаемом hardware можно включить —amp.
  4. При изменении effective batch size используйте —auto-scale-lr только понимая назначение автоматического scaling.
  5. Для продолжения существующего experiment используйте —resume, а не новый пустой work-dir.
  6. После training сохраните config и нужный checkpoint вместе.

Важные параметры. —work-dir, —resume, —amp, —auto-scale-lr, —cfg-options и —launcher являются основными средствами управления training script.

Проверка результата. В work-dir должны появиться logs/checkpoints; validation metrics должны вычисляться на ожидаемом dataset. Полезно хранить логи отдельно; основы чтения системных журналов разобраны в материале о log-файлах Linux.

Типичная ошибка. Запуск неподходящей CUDA/model combination либо изменение batch без контроля memory.

Безопасный откат. Каждый experiment запускайте в новом work-dir. Исходный config не перезаписывайте: храните копию, соответствующую checkpoint.

12. Протестировать checkpoint и сохранить visualization

Цель. Получить task metric и качественно проверить predictions после training.

Подготовка. Нужны config и совместимый checkpoint. Test dataset и evaluator должны быть определены в config.

  1. Запустите python tools/test.py, передав config и checkpoint.
  2. Для локальной машины можно добавить —show и при необходимости —wait-time.
  3. Для headless environment задайте —show-dir и каталог визуализаций.
  4. Для text recognition при подходящем config доступен —tta.
  5. Сопоставьте metric с visualization: отдельные ошибки могут быть скрыты средним значением.

Важные параметры. —show, —show-dir и —wait-time отвечают за visualization. TTA в документации отмечен как доступный только для text recognition models.

Проверка результата. Detection оценивайте через HmeanIOUMetric, recognition — через WordMetric/CharMetric/OneMinusNEDMetric, KIE — через F1Metric в соответствии с config.

Типичная ошибка. Сравниваются metrics, полученные на разных datasets или с разными evaluator settings, и вывод воспринимается как прямое сравнение моделей.

Безопасный откат. Не заменяйте checkpoint после теста. Сохраняйте evaluation outputs в отдельные directories и фиксируйте config, чтобы сравнение можно было повторить.

Типичные проблемы и диагностика

MMOCR не импортируется после установки

Симптом: import mmocr или запуск tools заканчивается ошибкой зависимости. Возможная подтверждённая причина: версия MMEngine, MMCV или MMDetection выходит за диапазон, зафиксированный для MMOCR 1.0.1. Диагностика: выведите versions всех четырёх packages и сравните их с compatibility table. Исправление: создайте чистое environment и установите согласованные версии через MIM. Проверка: import mmocr проходит, а tools/infer.py запускает parsing arguments.

Pretrained model не загружается при первом inference

Симптом: инициализация по model name завершается ошибкой загрузки weights. Возможная подтверждённая причина: для model name weights автоматически загружаются из OpenMMLab model zoo, а сеть недоступна. Диагностика: проверьте, использован ли model name без local weights и есть ли сетевой доступ. Исправление: заранее получите доверенный checkpoint и передайте локальный path вместе с config/model metadata. Проверка: повторный запуск начинает inference без сетевого скачивания.

На сервере не появляется окно visualization

Симптом: —show или show=True не отображает картинку. Возможная подтверждённая причина: environment работает без GUI либо SSH tunnel не имеет X11 forwarding. Диагностика: проверьте, есть ли графическая сессия; сравните поведение с локальной машиной. Исправление: используйте out_dir/save_vis для inference или —show-dir для test. Проверка: visualization появляется как файл в указанном каталоге.

В терминале нет OCR-результата, хотя процесс завершился

Симптом: tools/infer.py отработал, но prediction не напечатан. Возможная подтверждённая причина: CLI не печатает inference result по умолчанию. Диагностика: проверьте наличие —print-result. Исправление: добавьте —print-result либо save_pred. Проверка: prediction виден в console или в JSON-файле.

KIE не активируется

Симптом: high-level pipeline не возвращает KIE labels. Возможная подтверждённая причина: параметр kie эффективен только вместе с det и rec. Диагностика: проверьте initialization MMOCRInferencer и наличие трёх компонентов. Исправление: задайте compatible detector, recognizer и KIE model/checkpoint. Проверка: prediction содержит kie_labels и связанные scores/edges.

CPU-only environment падает на отдельной модели

Симптом: training/test/inference на CPU сообщает об отсутствующей operation. Возможная подтверждённая причина: CPU-only build не включает deformable convolution, modulated deformable convolution, ROI pooling и SyncBatchNorm; отдельные configs используют эти operations. Диагностика: сопоставьте выбранную model config со списком CPU-only limitations. Исправление: используйте compatible config без этих operations либо подходящий GPU environment. Проверка: модель проходит initialization и один inference/test batch.

Batch inference упирается в память GPU

Симптом: процесс завершается Out Of Memory при увеличении batch. Возможная подтверждённая причина: batch_size и stage-specific batch sizes увеличивают одновременный объём inference. Диагностика: повторите запуск с batch_size=1, который является default. Исправление: уменьшите общий batch либо det_batch_size/rec_batch_size/kie_batch_size. Проверка: полный набор изображений обрабатывается без OOM и без пропусков.

Старый dataset 0.x не читается как ожидается

Симптом: recognition annotations из старого проекта не соответствуют 1.x dataset classes. Возможная подтверждённая причина: txt/jsonl formats 0.x deprecated, а 1.x использует unified JSON. Диагностика: определите исходный annotation format и branch, для которой он создавался. Исправление: используйте migration script с format txt, jsonl или lmdb и создайте новый JSON. Проверка: OCRDataset загружает samples, а browse_dataset визуализирует labels.

Dataset после conversion выглядит неправильно

Симптом: polygons, crops или labels не совпадают с изображениями. Возможная подтверждённая причина: ошибочный data_root, annotation conversion или transforms в config. Диагностика: сравните original и transformed modes browse_dataset. Исправление: поправьте пути/format/config до training. Проверка: несколько samples визуально совпадают с исходной разметкой.

Checkpoint не соответствует config

Симптом: model initialization выдаёт несовпадение параметров или architecture. Возможная подтверждённая причина: weights переданы модели другого типа либо custom config не соответствует checkpoint. Диагностика: проверьте model/config pair и metadata, из которой получен checkpoint. Исправление: используйте конфигурацию, с которой веса были обучены, либо совместимый checkpoint. Проверка: model загружается без shape mismatch и выполняет inference на тестовом изображении.

Есть visualization, но нет JSON или наоборот

Симптом: в out_dir присутствует только один тип результата. Возможная подтверждённая причина: save_pred и save_vis управляются независимо. Диагностика: проверьте flags в Python call или CLI. Исправление: включите оба параметра, если нужны обе формы результата. Проверка: каталог содержит preds/*.json и vis/* с соответствующими именами.

Сравнение с другими аналогами

Решение Основная задача Платформа Порог освоения Вход/выход Автоматизация Модель оплаты Ограничение и подходящий сценарий
MMOCR 1.0.1 исследование и разработка detection/recognition/KIE, training/evaluation Python на Linux, Windows, macOS; CPU/GPU высокий: OpenMMLab stack, configs, CLI/API изображения/arrays/folders → dict/JSON + visualization; datasets JSON batch inference, dataset preparer, training/test, distributed Apache 2.0, без платы за пакет нет готового desktop workflow и direct PDF; подходит для кастомных OCR-моделей
PaddleOCR OCR и современный document parsing, включая structured output Python и варианты deployment; проект активно развивает local/server backends средний PDF/images → structured JSON/Markdown в актуальных pipelines готовые pipelines, local deployment, serving, hardware backends Apache 2.0 крупнее и быстрее меняется; разумнее, когда нужны PDF/document parsing и более свежая экосистема
EasyOCR готовое multilingual recognition с простым Python API Python/PyTorch, CPU или GPU низкий-средний image path, bytes, NumPy, raw image URL → list с bbox/text/confidence простая интеграция через Reader.readtext Apache 2.0 меньше research infrastructure; подходит, когда важнее быстро получить OCR на 80+ языках
Tesseract OCR классическое OCR engine для печатного текста CLI/API, множество систем; можно компилировать для разных targets средний PNG/JPEG/TIFF/WebP и другие изображения через Leptonica → TXT, searchable PDF, hOCR или TSV CLI легко включается в scripts и batch workflows Apache 2.0 не читает PDF как input и не предоставляет OpenMMLab-style detection/KIE research stack; подходит для зрелого OCR engine с традиционным CLI
docTR двухэтапный document OCR detection + recognition Python/PyTorch средний PDF, images, URL → Document object, text или JSON-serializable dict pretrained predictor, Docker, API template Apache 2.0 ориентирован на документы и проще принимает PDF; подходит, когда нужна end-to-end document abstraction без OpenMMLab configs

MMOCR выигрывает там, где нужны исследовательская модульность, configs OpenMMLab, training/evaluation и явное разделение detection/recognition/KIE. PaddleOCR и docTR рациональнее для document-centric pipeline с прямым PDF input. EasyOCR проще для быстрого multilingual OCR из Python. Tesseract остаётся самостоятельным OCR engine с зрелым CLI/API и более традиционной моделью использования.

FAQ

MMOCR распознаёт PDF напрямую?

В документации MMOCRInferencer среди input types перечислены image path/URL, folder, NumPy array и списки этих входов. PDF не указан как direct input. Для PDF нужен внешний этап преобразования страниц в изображения. Если PDF является основным форматом проекта, docTR или современный PaddleOCR предлагают более прямой document workflow.

Можно ли использовать MMOCR без NVIDIA GPU?

Да. Документация описывает CPU-only build и допускает training, testing и inference на CPU. Ограничение в том, что CPU-only mode не содержит ряда operations, поэтому некоторые model configs, включая варианты с deformable convolution и SyncBatchNorm, не подойдут без изменений.

Нужно ли платить за коммерческое использование?

Код MMOCR распространяется по Apache License 2.0. У пакета нет отдельного платного тарифа. Для коммерческого проекта отдельно проверяют условия datasets, pretrained weights и сторонних dependencies, входящих в конкретную сборку.

Есть ли русская версия интерфейса?

У MMOCR нет отдельного desktop GUI, поэтому понятие локализации меню здесь неприменимо. Рабочие interfaces — Python, CLI и configs. Официальная документация доступна на английском и китайском.

MMOCR подходит для русского текста?

MMOCR не построен вокруг единого списка языков, как EasyOCR. Возможность recognition определяется конкретной model, dictionary, checkpoint и training data. Для production-задачи с кириллицей нужно выбирать или обучать recognizer, чей словарь и данные включают требуемые символы; наличие самого toolbox не является гарантией качества на русском тексте.

Чем MMOCRInferencer отличается от TextDetInferencer и TextRecInferencer?

MMOCRInferencer — high-level wrapper, который умеет связывать несколько stages и упрощает быстрый end-to-end inference. Стандартные Inferencer-классы разделяют task и лучше соответствуют общей API-модели OpenMMLab. Для собственной интеграции стандартные classes дают более явный контроль.

Почему latest release такой старый?

GitHub Releases и PyPI показывают 1.0.1 от 4 июля 2023 года как latest stable version. Публичный repository и documentation доступны, но нового стабильного package release после 1.0.1 нет. Поэтому compatibility следует строить вокруг зафиксированной 1.0.1 matrix, а не вокруг сегодняшних latest dependencies.

Можно ли сохранить результат как Word?

Стандартный inference MMOCR сохраняет prediction в JSON и visualization как изображение. DOCX не является встроенным export target. Для Word требуется внешний код, который прочитает JSON и сформирует документ.

Что лучше сохранять: JSON или visualization?

Для автоматизации нужен JSON: там находятся text, scores и geometry. Visualization полезна для ручного контроля. Эти outputs дополняют друг друга и включаются независимыми save flags.

Можно ли использовать собственный checkpoint?

Да. Inferencer принимает path к custom config и path к weights. Для корректной загрузки architecture config должна соответствовать checkpoint. Не загружайте неизвестные checkpoints из недоверенных источников.

Вывод

MMOCR рационален для разработчика или исследователя, которому нужен не просто OCR, а управляемый экспериментальный стек: отдельные детекторы и recognizers, KIE, datasets, configs, training, testing, metrics и visualizers. Здесь его архитектура OpenMMLab даёт больше контроля, чем «готовые» OCR-библиотеки с одним вызовом.

Для разового распознавания текста этот контроль оборачивается лишней сложностью: нужно собирать совместимое Python environment, понимать зависимости и работать без desktop GUI. Для document-centric pipeline также заметно отсутствие direct PDF input и готового экспорта в офисные форматы.

Главный практический критерий — не количество моделей, а сценарий. Для собственного OCR research pipeline MMOCR остаётся содержательным framework. Для быстрого multilingual OCR проще EasyOCR; для зрелого классического engine — Tesseract; для прямой работы с PDF и document structure логичнее смотреть в сторону docTR или актуального PaddleOCR. При выборе MMOCR 1.0.1 центральным техническим условием становится фиксация совместимого OpenMMLab stack и воспроизводимого environment.