Детекторы

Поддерживаемые модели:

ConsensusWBFDetector

class manuscript.detectors.ConsensusWBFDetector(detectors, *, weights=None, cluster_iou=0.5, consensus_fraction=0.5, minimum_votes=2, memory_policy='keep')[исходный код]

Базовые классы: ModelComposition

Объединяет детекции, подтверждённые достаточным числом независимых участников.

detectors — непустой упорядоченный итерируемый набор объектов с predict(image) -> Page (или словарём с page). Их Page должны использовать координаты и размеры исходного изображения. Все геометрические потомки считаются плоскими детекциями, сгруппированными по (type, label). Настройте эквивалентные метки у участников для сопоставления объектов.

weights=None использует средние арифметические с равными весами для согласованного слияния рамок. Иначе задайте один конечный положительный вес на детектор. Веса влияют на представителей кластеров и итоговые координаты, но не на число голосов. Уверенность детекций не используется. Итоговая уверенность остаётся None.

Детекторы выполняются в заданном порядке. На каждом шаге представители кластеров фиксируются, а пары по IoU жадно сопоставляются взаимно однозначно. Равенства разрешаются сортировкой по убыванию (IoU, индекс рамки, индекс кластера). Каждый детектор даёт не более одного голоса на кластер. Пустые ответы не уменьшают необходимое число голосов; ошибки прерывают работу. Дополнительный NMS не применяется. Алгоритм зависит от порядка участников.

cluster_iou и consensus_fraction находятся в [0, 1], minimum_votes — положительное целое число. Необходимое число голосов равно максимуму из minimum_votes и ceil(число детекторов * consensus_fraction). Порог выше числа детекторов допустим и даёт пустой Page.

memory_policy соответствует композициям Pipeline и распознавателей: «keep» (по умолчанию) или «sequential»; второе значение требует close() у каждого участника. Pickle сохраняет вложенных участников, порядок, веса и параметры, если сами участники поддерживают сериализацию.

property required_votes
predict(image, return_raw=False, *, return_masks=False, return_outputs=False)[исходный код]

Возвращает плоский Page или стандартные необработанные детекции с метаданными голосования.

Любой флаг возврата включает вывод словаря. Слияние не создаёт маски или тензоры моделей. Необработанные детекции содержат box, polygon, type, label, votes и detector_indices; индексы соответствуют заданному порядку участников.

predict_batch(images, **kwargs)[исходный код]

Объединяет результаты каждого изображения независимо, в порядке входа; пустой итерируемый объект даёт [].

YOLO

class manuscript.detectors.YOLO(weights=None, config=None, device=None, force_download=False, *, score_thresh=0.1, class_ids=None, target_size=None, axis_aligned_output=None, containment_threshold=0.9, **kwargs)[исходный код]

Базовые классы: BaseDetector

Детектор текста YOLO на ONNX Runtime.

Параметры:
  • weights (str or Path, optional) – Путь или идентификатор весов ONNX-модели. Поддерживаются: - Локальный файл: "path/to/model.onnx" - HTTP/HTTPS URL: "https://example.com/model.onnx" - Релиз GitHub: "github://owner/repo/tag/file.onnx" - Google Drive: "gdrive:FILE_ID" - Имя пресета: "yolo26s_obb_text_g1" или "yolo26x_obb_text_g1" - None: автоматически скачивается пресет по умолчанию (yolo26x_obb_text_g1) ONNX-модель может возвращать обычные детекции в формате xyxy, score, class_id с формой [N, 6] / [1, N, 6] или ориентированные детекции в формате cx, cy, w, h, score, class_id, angle с формой [N, 7] / [1, N, 7].

  • config (dict, str or Path, optional) – Словарь, путь или идентификатор конфигурации модели в JSON/YAML. Поддерживаются те же схемы URL, что и для weights. При None используется конфигурация из реестра моделей. Для локальных весов конфигурацию нужно задать явно. Обязательное поле region_classes сопоставляет ID классов модели с полями элементов, например {0: {"type": "word"}, 1: {"type": "table"}}. Детекции возвращаются как плоский список дочерних элементов страницы; иерархию строит этап анализа структуры.

  • device (str, optional) – Вычислительное устройство: "cuda", "coreml" или "cpu". При None выбирается CUDA, если ONNX Runtime сообщает о поддержке GPU, иначе CPU. Для ускорения GPU/CoreML: - CUDA (NVIDIA): pip install onnxruntime-gpu - CoreML (Apple Silicon): входит в стандартные пакеты ONNX Runtime для macOS; явно задайте device="coreml". По умолчанию None (автоматический выбор).

  • score_thresh (float, optional) – Порог уверенности, применяемый к выходам модели после ONNX-инференса и до дополнительного этапа очистки по вложенности. По умолчанию 0.1.

  • class_ids (sequence of int or None, optional) – Необязательный белый список class ID, которые нужно сохранить. Если None, сохраняются все классы. По умолчанию None.

  • target_size (int or None, optional) – Размер квадратного входа при подготовке letterbox. Изображение вписывается в (target_size, target_size) перед ONNX-инференсом. При None значение imgsz берётся из явно заданной конфигурации или конфигурации пресета. Соседние файлы автоматически не ищутся. Если imgsz отсутствует, используется 1280.

  • axis_aligned_output (bool, optional, deprecated) – Устаревший параметр. При явно заданном True OBB-детекции преобразуются в прямоугольники со сторонами вдоль осей в Page. По умолчанию сохраняются повёрнутые полигоны. При return_raw=True каждая запись detections сохраняет исходный polygon и строку box в формате cx, cy, w, h, score, class_id, angle. На модели без OBB параметр не влияет.

  • containment_threshold (float or None, optional) – Удаляет меньший бокс, если не менее указанной доли его площади покрыто большим боксом того же класса. Например, 0.9 удаляет боксы, покрытые на 90% или более. Значение None отключает эту дополнительную фильтрацию. По умолчанию 0.9.

  • force_download (bool)

static create_config(source=None, *, imgsz=None, region_classes=None, output_path=None)[исходный код]

Создать JSON-конфигурацию инференса из обучающего YAML/JSON или явно заданных значений.

Сохраняются только размер входа и сопоставление классов. Класс 0 по умолчанию соответствует словам; для других моделей задайте region_classes. Возвращает словарь для YOLO(config=...) и при необходимости сохраняет его в output_path.

Пример:

YOLO.create_config("args.yaml", output_path="model.json")
YOLO.create_config(imgsz=1024,
                   region_classes={0: {"type": "line"}})
Тип результата:

Dict[str, Any]

predict(img_or_path, return_raw=False, *, return_masks=False, return_outputs=False)[исходный код]

Запустить YOLO ONNX-инференс на одном изображении и вернуть обнаруженную структуру страницы.

Параметры:
  • img_or_path (str or pathlib.Path or numpy.ndarray) – Путь к файлу изображения или RGB-изображение в виде массива NumPy формата uint8 с формой (H, W, 3).

  • return_raw (bool, optional) – Вернуть словарь с Page и декодированными детекциями.

  • return_masks (bool, optional) – Включить вывод в виде словаря. YOLO не создаёт маски.

  • return_outputs (bool, optional) – Включить исходные именованные выходные тензоры ONNX и вывод в виде словаря.

Результат:

Плоское дерево документа с размерами исходного изображения и элементами, чьи типы и метки заданы в region_classes. При включении любого флага результата возвращает page, detections, image_size и metadata, а по запросу — outputs.

Тип результата:

Page or dict

Примеры

Выполнить инференс и получить структурированный результат:

>>> from manuscript.detectors import YOLO
>>> model = YOLO(weights="yolo26x_obb_text_g1")
>>> page = model.predict("page.jpg")
>>> print(page.children[0].detection_confidence)

EAST

class manuscript.detectors.EAST(weights=None, device=None, force_download=False, *, config=None, target_size=1280, expand_ratio_w=1.4, expand_ratio_h=1.5, expand_power=0.6, score_thresh=0.6, iou_threshold=0.05, iou_threshold_standard=0.05, score_geo_scale=0.25, quantization=2, axis_aligned_output=None, remove_area_anomalies=False, anomaly_sigma_threshold=5.0, anomaly_min_box_count=30, use_tta=False, tta_iou_thresh=0.1, **kwargs)[исходный код]

Базовые классы: BaseDetector

Детектор текста EAST на ONNX Runtime.

Параметры:
  • weights (str or Path, optional) – Путь или идентификатор весов ONNX-модели. Поддерживаются: - Локальный файл: "path/to/model.onnx" - HTTP/HTTPS URL: "https://example.com/model.onnx" - Релиз GitHub: "github://owner/repo/tag/file.onnx" - Google Drive: "gdrive:FILE_ID" - Имя пресета: "east_50_g1" - None: автоматически скачивается пресет по умолчанию (east_50_g1)

  • device (str, optional) – Вычислительное устройство: "cuda", "coreml" или "cpu". При None выбирается CUDA, если ONNX Runtime сообщает о поддержке GPU, иначе CPU. Для ускорения GPU/CoreML: - CUDA (NVIDIA): pip install onnxruntime-gpu - CoreML (Apple Silicon): входит в стандартные пакеты ONNX Runtime для macOS; явно задайте device="coreml". По умолчанию None (автоматический выбор).

  • config (dict or path, optional) – Конфигурация сопоставления регионов. Обязательное поле region_classes сопоставляет ID классов с полями элементов, например {"0": {"type": "word"}}. Если не задана, используется конфигурация из реестра. Для локальных весов путь к конфигурации нужно задать явно.

  • target_size (int, optional) – Размер входного изображения для инференса. Изображения приводятся к (target_size, target_size). Значение по умолчанию — 1280.

  • expand_ratio_w (float, optional) – Коэффициент расширения обнаруженных боксов по горизонтали после NMS. По умолчанию 1.4.

  • expand_ratio_h (float, optional) – Коэффициент расширения обнаруженных боксов по вертикали после NMS. По умолчанию 1.5.

  • expand_power (float, optional) – Степень, от которой зависит расширение бокса с учётом его размера. При 1.0 маленькие и большие боксы расширяются одинаково; при значении меньше 1.0 сильнее расширяются маленькие, больше 1.0 — большие. Например, 0.5 рекомендуется для детекции символов. По умолчанию 0.6.

  • score_thresh (float, optional) – Порог уверенности для отбора кандидатов перед NMS. По умолчанию 0.6.

  • iou_threshold (float, optional) – Порог IoU для объединения на этапе locality-aware NMS. По умолчанию 0.05.

  • iou_threshold_standard (float, optional) – Порог IoU для стандартного NMS после локального объединения. При None используется iou_threshold. По умолчанию 0.05.

  • score_geo_scale (float, optional) – Коэффициент масштабирования при декодировании карт геометрии/оценок. По умолчанию 0.25.

  • quantization (int, optional) – Разрешение квантования координат точек при декодировании. По умолчанию 2.

  • axis_aligned_output (bool, optional, deprecated) – Устаревший параметр. Явное True задаёт прямоугольники со сторонами вдоль осей. По умолчанию сохраняются исходные четырёхугольники.

  • remove_area_anomalies (bool, optional) – Если True, удаляет четырёхугольники с аномально большой площадью относительно распределения. По умолчанию False.

  • anomaly_sigma_threshold (float, optional) – Порог сигмы для фильтрации аномальных площадей. По умолчанию 5.0.

  • anomaly_min_box_count (int, optional) – Минимальное количество боксов перед применением фильтрации аномалий. По умолчанию 30.

  • use_tta (bool, optional) – Включить аугментацию во время инференса (TTA). Обработка выполняется для исходного и горизонтально отражённого изображения. Сохраняются только исходные детекции, имеющие соответствие на отражённом изображении. По умолчанию False.

  • tta_iou_thresh (float, optional) – Порог IoU для сопоставления боксов исходного и отражённого изображения при TTA. Исходная детекция сохраняется, если IoU с боксом отражённого изображения выше порога. По умолчанию 0.1.

  • force_download (bool)

predict(img_or_path, return_raw=False, *, return_masks=False, return_outputs=False)[исходный код]

Запустить инференс EAST и вернуть обнаруженную структуру страницы.

Параметры:
  • img_or_path (str or pathlib.Path or numpy.ndarray) – Путь к файлу изображения или RGB-изображение в виде массива NumPy формата uint8 с формой (H, W, 3).

  • return_raw (bool)

  • return_masks (bool)

  • return_outputs (bool)

Результат:

Результат детекции как плоское дерево настроенных текстовых регионов. Каждый регион содержит координаты полигона и уверенность детекции. Порядок задаётся последовательностью дочерних элементов; этап анализа структуры может установить порядок чтения.

Тип результата:

Page

Примеры

Выполнить инференс и получить структурированный результат:

>>> from manuscript.detectors import EAST
>>> model = EAST()
>>> img_path = r"example/ocr_example_image.jpg"
>>> page = model.predict(img_path)
>>> # Access the first detected region, when present
>>> for region in page.children[:1]:
...     print(f"Confidence: {region.detection_confidence}")

Визуализировать результаты отдельно:

>>> from manuscript.utils import visualize_page, read_image
>>> page = model.predict(img_path)
>>> img = read_image(img_path)
>>> vis_img = visualize_page(img, page)
>>> vis_img.show()
static train(train_images, train_anns, val_images, val_anns, *, experiment_root='./experiments', model_name='resnet_quad', backbone_name='resnet50', pretrained_backbone=True, freeze_first=False, target_size=1024, score_geo_scale=None, score_map_shrink_ratio=0.3, epochs=500, batch_size=3, accumulation_steps=1, lr=0.0001, lr_scheduler='cosine_restart', lr_scheduler_params=None, augmentation_config=None, grad_clip=5.0, early_stop=100, use_sam=False, sam_type='asam', use_lookahead=False, use_ema=False, use_multiscale=True, use_ohem=False, ohem_ratio=0.5, use_focal_geo=True, focal_gamma=2.0, resume_from=None, val_interval=1, num_workers=0, log_collage=True, detection_level='word', device=None)[исходный код]

Обучение модели EAST на пользовательских датасетах.

Параметры:
  • train_images (str, Path or sequence of paths) – Путь к каталогу обучающих изображений или список путей.

  • train_anns (str, Path or sequence of paths) – Путь к JSON-файлу аннотаций COCO или список путей в том же порядке, что и train_images.

  • val_images (str, Path or sequence of paths) – Путь к каталогу валидационных изображений или список путей.

  • val_anns (str, Path or sequence of paths) – Путь к JSON-файлу аннотаций COCO или список путей в том же порядке, что и val_images.

  • experiment_root (str, optional) – Базовый каталог, в котором будут создаваться папки экспериментов. По умолчанию "./experiments".

  • model_name (str, optional) – Имя папки внутри experiment_root для логов и чекпоинтов. По умолчанию "resnet_quad".

  • backbone_name ({"resnet50", "resnet101"}, optional) – Используемая архитектура backbone. Варианты: - "resnet50" — ResNet-50 (быстрее, меньше параметров) - "resnet101" — ResNet-101 (медленнее, больше ёмкость) По умолчанию "resnet50".

  • pretrained_backbone (bool, optional) – Использовать веса backbone, предобученные на ImageNet. По умолчанию True.

  • freeze_first (bool, optional) – Заморозить нижние слои backbone. По умолчанию False.

  • target_size (int, optional) – Изменить размер изображений до (target_size, target_size) без сохранения пропорций. По умолчанию 1024.

  • score_geo_scale (float, optional) – Множитель для восстановления исходных координат из карт оценок/геометрии. Если None, автоматически берётся из модели. По умолчанию None.

  • score_map_shrink_ratio (float, optional) – Коэффициент сжатия для карты оценок. По умолчанию 0.3.

  • epochs (int, optional) – Количество эпох обучения. По умолчанию 500.

  • batch_size (int, optional) – Размер батча на GPU. По умолчанию 3.

  • accumulation_steps (int, optional) – Количество шагов накопления градиента. Эффективный размер батча будет batch_size * accumulation_steps. Используйте это для обучения с большими эффективными батчами при ограниченной памяти GPU. Например: - batch_size=2, accumulation_steps=4 → эффективный размер батча = 8 - batch_size=1, accumulation_steps=8 → эффективный размер батча = 8 По умолчанию 1 (без накопления).

  • lr (float, optional) – Скорость обучения. По умолчанию 1e-4.

  • lr_scheduler ({"cosine_restart", "cosine", "linear", "step", "exponential", "plateau", "none"}, optional) – Тип планировщика скорости обучения. По умолчанию "cosine_restart".

  • lr_scheduler_params (dict, optional) – Дополнительные параметры планировщика (зависят от его типа). Часто используемые ключи: - cosine_restart: t0, t_mult, eta_min - cosine: t_max, eta_min - linear: final_factor - step: step_size, gamma - exponential: gamma - plateau: factor, patience, min_lr

  • augmentation_config (dict, optional) – Полная конфигурация аугментаций, передаваемая в EASTDataset. Это предпочтительное место для всех настроек аугментации. Любые ключи здесь переопределяют соответствующие значения по умолчанию. Поддерживаются, в частности: - quad_source для преобразования COCO-полигона в quad: "auto" сохраняет 4-точечные полигоны и для более длинных полигонов переходит к "min_area_rect", "as_is" принимает только 4-точечные полигоны, а "min_area_rect" всегда строит прямоугольник минимальной площади - flip_prob, color_jitter - small_rotate_prob, small_rotate_deg - perspective_prob, perspective_scale - blur_prob, blur_ksize_range - noise_prob, noise_std, salt_pepper_prob - jpeg_prob, jpeg_quality_range - shading_prob, shading_strength - gamma_prob, gamma_range - downscale_prob, downscale_range - negative_prob

  • grad_clip (float, optional) – Значение отсечения градиента (L2-норма). По умолчанию 5.0.

  • early_stop (int, optional) – Число эпох без улучшения, после которого обучение останавливается. По умолчанию 100.

  • use_sam (bool, optional) – Включить оптимизатор SAM. По умолчанию False.

  • sam_type ({"sam", "asam"}, optional) – Используемый вариант SAM. По умолчанию "asam".

  • use_lookahead (bool, optional) – Использовать Lookahead поверх оптимизатора. По умолчанию False.

  • use_ema (bool, optional) – Поддерживать EMA-версию весов модели. По умолчанию False.

  • use_multiscale (bool, optional) – Менять масштаб изображений случайным образом во время обучения. По умолчанию True.

  • use_ohem (bool, optional) – Использовать отбор сложных примеров во время обучения (OHEM). По умолчанию False.

  • ohem_ratio (float, optional) – Доля сложных негативных примеров для OHEM. По умолчанию 0.5.

  • use_focal_geo (bool, optional) – Применять focal loss к геометрическим каналам. По умолчанию True.

  • focal_gamma (float, optional) – Параметр gamma для focal loss геометрии. По умолчанию 2.0.

  • resume_from (str or Path, optional) – Возобновить обучение из предыдущего эксперимента или инициализировать его из локальных весов: a) каталог эксперимента, b) …/чекпоинтs/, c) прямой путь к чекпоинту с полным состоянием (last_state.pt). Если передан файл только с весами (например, best.pth), веса модели будут загружены, но обучение начнётся в текущем каталоге experiment_root/model_name. По умолчанию None.

  • val_interval (int, optional) – Запускать валидацию каждые N эпох. По умолчанию 1.

  • num_workers (int, optional) – Количество рабочих процессов для загрузки данных. Установите 0 для однопроцессной загрузки (безопаснее на Windows). По умолчанию 0.

  • log_collage (bool, optional) – Нужно ли генерировать и логировать коллажи валидационных изображений в TensorBoard. Отключите, чтобы сэкономить память на GPU с ограниченным объёмом VRAM. По умолчанию True.

  • device (torch.device, optional) – Устройство CUDA или CPU. Автоматически выбирается, если None.

  • detection_level (str)

Результат:

Модель после последней завершённой эпохи обучения: EMA, если включена, иначе основная модель. Лучшие валидационные веса сохраняются отдельно как best_loss.pth и best_dice.pth в каталоге checkpoints эксперимента.

Тип результата:

torch.nn.Module

Примеры

Обучение на двух датасетах с валидацией:

>>> from manuscript.detectors import EAST
>>>
>>> train_images = [
...     "/data/archive/train_images",
...     "/data/ddi/train_images"
... ]
>>> train_anns = [
...     "/data/archive/train.json",
...     "/data/ddi/train.json"
... ]
>>> val_images = [
...     "/data/archive/test_images",
...     "/data/ddi/test_images"
... ]
>>> val_anns = [
...     "/data/archive/test.json",
...     "/data/ddi/test.json"
... ]
>>>
>>> trained_model = EAST.train(
...     train_images=train_images,
...     train_anns=train_anns,
...     val_images=val_images,
...     val_anns=val_anns,
...     backbone_name="resnet50",
...     target_size=256,
...     epochs=20,
...     batch_size=4,
...     use_sam=False,
...     freeze_first=False,
...     val_interval=3,
... )
>>> print("Model after the last completed epoch:", trained_model)

Настройка аугментаций через augmentation_config:

>>> aug_cfg = {
...     "quad_source": "auto",
...     "flip_prob": 0.02,
...     "color_jitter": (0.1, 0.1, 0.1, 0.05),
...     "small_rotate_prob": 0.15,
...     "small_rotate_deg": 1.5,
...     "perspective_prob": 0.08,
...     "perspective_scale": 0.015,
...     "blur_prob": 0.1,
...     "blur_ksize_range": (3, 5),
...     "noise_prob": 0.1,
...     "noise_std": 0.008,
...     "salt_pepper_prob": 0.0005,
...     "jpeg_prob": 0.1,
...     "jpeg_quality_range": (75, 95),
...     "shading_prob": 0.1,
...     "shading_strength": 0.1,
...     "gamma_prob": 0.2,
...     "gamma_range": (0.95, 1.05),
...     "downscale_prob": 0.1,
...     "downscale_range": (0.7, 0.95),
...     "negative_prob": 0.05,
... }
>>> trained_model = EAST.train(
...     train_images=train_images,
...     train_anns=train_anns,
...     val_images=val_images,
...     val_anns=val_anns,
...     augmentation_config=aug_cfg,
... )
static export(weights_path, output_path, backbone_name=None, input_size=1280, opset_version=14, simplify=True, detection_level='word')[исходный код]

Экспорт модели EAST из PyTorch в формат ONNX.

Метод преобразует обученную модель EAST из PyTorch в ONNX для ускоренного инференса через ONNX Runtime. Экспортированная модель загружается через EAST(weights="model.onnx", config="model.json"). Экспортёр сохраняет соответствующую конфигурацию рядом с ONNX-графом.

Параметры:
  • weights_path (str or Path) – Путь к файлу весов модели PyTorch (.pth).

  • output_path (str or Path) – Путь для сохранения ONNX-модели (.onnx).

  • backbone_name ({"resnet50", "resnet101"}, optional) – Архитектура backbone модели. Если None, будет автоматически определена из чекпоинта. Должна совпадать с архитектурой, использованной при обучении. По умолчанию None (автоопределение).

  • input_size (int, optional) – Размер входного изображения (высота и ширина). Модель принимает изображения формы (batch, 3, input_size, input_size). По умолчанию 1280.

  • opset_version (int, optional) – Версия opset ONNX для экспорта. По умолчанию 14.

  • simplify (bool, optional) – Если True, применяется упрощение графа ONNX с помощью onnx-simplifier для оптимизации модели. Требуется пакет onnx-simplifier. По умолчанию True.

  • detection_level (str)

Результат:

Модель ONNX сохраняется в output_path.

Тип результата:

None

Исключение:
  • ImportError – Если необходимые пакеты (torch, onnx) не установлены.

  • FileNotFoundError – Если weights_path не существует.

  • ValueError – Если backbone_name не соответствует архитектуре чекпоинта.

Заметки

Экспортированная модель ONNX имеет два выхода:

  • score_map: карта уверенности текста формы (batch, 1, H, W)

  • geo_map: карта геометрии формы (batch, 8, H, W)

Модель поддерживает динамический размер батча и размеры изображения через настройку динамических осей.

Автоматическое определение backbone:

Метод проверяет ключи backbone.extractor.layer3 в чекпоинт на наличие layer3.10. При наличии выбирается ResNet-101, иначе ResNet-50.

Примеры

Экспорт с автоматическим определением backbone:

>>> from manuscript.detectors import EAST
>>> EAST.export(
...     weights_path="east_resnet50.pth",
...     output_path="east_model.onnx"
... )
Auto-detected backbone: resnet50
Exporting to ONNX (opset 14)...
[OK] ONNX model saved to: east_model.onnx

Экспорт с явным указанием backbone:

>>> EAST.export(
...     weights_path="custom_weights.pth",
...     output_path="custom_model.onnx",
...     backbone_name="resnet101",
...     input_size=1024,
...     simplify=False
... )

Использование экспортированной модели для инференса:

>>> detector = EAST(
...     weights="east_model.onnx",
...     config="east_model.json",
...     device="cuda"
... )
>>> result = detector.predict("image.jpg")

См. также

EAST.__init__

Создать EAST с весами ONNX и соответствующей конфигурацией.

PPOCR

class manuscript.detectors._ppocr.PPOCR(weights, config=None, device=None, threshold=None, box_threshold=None, unclip_ratio=None, limit_side_len=None, limit_type=None, force_download=False, *, runtime='auto', web_external_data=None)[исходный код]

Базовые классы: BaseDetector

Создать детектор текста PP-OCR DB на ONNX Runtime.

Параметры:
  • weights (str or Path) – Совместимый файл ONNX-модели или ключ реестра моделей. Поддерживаются локальные файлы, HTTP/HTTPS URL, github://owner/repo/tag/file.onnx и gdrive:FILE_ID. Пресета по умолчанию нет.

  • config (dict, str or Path, optional) – Конфигурация DB-инференса или путь/идентификатор её файла JSON/YAML. Обязательна для локальных весов; пресеты предоставляют свою конфигурацию. Должна содержать schema_version=1, task="text_detection", algorithm="DB" и соответствующие настройки preprocess/postprocess. region_classes должен сопоставлять класс переднего плана 0 с полями документа, например {0: {"type": "line"}}. Используйте create_config() для подготовки конфигурации из поддерживаемого Paddle inference YAML или экспортированного JSON.

  • device ({"cuda", "coreml", "cpu"}, optional) – Устройство для выполнения модели. При None выбирается CUDA, если ONNX Runtime сообщает о поддержке GPU, иначе CPU. На поддерживаемых системах macOS выбирайте CoreML явно. По умолчанию None.

  • threshold (float or None, optional) – Порог вероятности пикселя в [0, 1] для выделения контуров переднего плана. При None используется postprocess.threshold из конфигурации.

  • box_threshold (float or None, optional) – Минимальная средняя вероятность внутри полигона-кандидата в [0, 1]. При None используется postprocess.box_threshold из конфигурации.

  • unclip_ratio (float or None, optional) – Неотрицательный коэффициент расширения полигона. Чем больше значение, тем сильнее расширяются регионы. При None используется postprocess.unclip_ratio.

  • limit_side_len (int or None, optional) – Опорная длина стороны при масштабировании в пикселях, не менее 32. Значение зависит от limit_type. При None используется preprocess.limit_side_len.

  • limit_type ({"min", "max", "resize_long"} or None, optional) – Правило масштабирования: "min" увеличивает короткую сторону, если она меньше опорной длины; "max" уменьшает длинную сторону, если она больше; "resize_long" приводит длинную сторону к опорной длине. При None используется preprocess.limit_type.

  • force_download (bool, optional) – Скачать артефакты заново вместо использования кеша. По умолчанию False.

Примеры

Загрузить совместимые локальные веса и настроить пороги детекции:

>>> from manuscript.detectors._ppocr import PPOCR
>>> detector = PPOCR(
...     weights="model.onnx", config="config.json",
...     threshold=0.3, box_threshold=0.6, device="cpu",
... )
>>> page = detector.predict("document.jpg")
predict(img_or_path, return_raw=False, *, return_masks=False, return_outputs=False)[исходный код]

Вернуть настроенные плоские регионы с полными DB-полигонами в координатах исходного изображения.

static create_config(source, *, region_classes=None, output_path=None)[исходный код]

Создать JSON-конфигурацию инференса из существующей конфигурации или локального каталога модели HF.

DB имеет один класс переднего плана (0), по умолчанию line. Для моделей слов задайте region_classes={0: {"type": "word"}}. Зависимости для обучения при создании конфигурации не требуются.

RFDETR

class manuscript.detectors._rfdetr.RFDETR(weights, config=None, device=None, score_thresh=None, class_ids=None, target_size=None, force_download=False, mask_threshold=None, *, runtime='auto', web_external_data=None)[исходный код]

Базовые классы: BaseDetector

Создать детектор или модель сегментации экземпляров RF-DETR на ONNX Runtime.

Параметры:
  • weights (str or Path) – Совместимый файл ONNX-модели или ключ реестра моделей. Поддерживаются локальные файлы, HTTP/HTTPS URL, github://owner/repo/tag/file.onnx и gdrive:FILE_ID. Пресета по умолчанию нет.

  • config (dict, str or Path, optional) – Конфигурация инференса или путь/идентификатор её файла JSON/YAML. Обязательна для локальных весов; пресеты предоставляют свою конфигурацию. class_names сопоставляет ID выходных классов с именами, а region_classes — выбранные ID с полями документа, например {0: {"type": "word"}}. Подготовка входа и имена тензоров должны соответствовать экспортированной модели.

  • device ({"cuda", "coreml", "cpu"}, optional) – Устройство для выполнения модели. При None выбирается CUDA, если ONNX Runtime сообщает о поддержке GPU, иначе CPU. На поддерживаемых системах macOS выбирайте CoreML явно. По умолчанию None.

  • score_thresh (float or None, optional) – Минимальная уверенность детектора от 0 до 1. При None используется score_thresh из конфигурации, а при его отсутствии — 0.5.

  • class_ids (sequence of int or None, optional) – ID классов, которые нужно сохранить. Каждый должен быть задан в class_names и region_classes. При None используется class_ids из конфигурации, а при его отсутствии — все сопоставленные ID регионов.

  • target_size (int or None, optional) – Размер квадратного входа в пикселях без сохранения пропорций. При None используется target_size из конфигурации или фиксированные размеры входа ONNX. Для динамических размеров изображения требуется явный размер. Указанное значение должно соответствовать фиксированной форме входа ONNX.

  • force_download (bool, optional) – Скачать артефакты заново вместо использования кеша. По умолчанию False.

  • mask_threshold (float or None, optional) – Порог вероятности для выделения объектов на масках; строго больше 0 и меньше 1. При None используется mask_threshold из конфигурации, а при его отсутствии — 0.5. Применяется только к моделям с выходом масок.

Примеры

Загрузить совместимые локальные веса с соответствующей конфигурацией инференса:

>>> from manuscript.detectors._rfdetr import RFDETR
>>> detector = RFDETR(
...     weights="model.onnx", config="config.json",
...     score_thresh=0.4, device="cpu",
... )
>>> page = detector.predict("document.jpg")
predict(image, return_raw=False, *, return_masks=False, return_outputs=False)[исходный код]

Вернуть текстовый Page или компактные детекции; маски и тензоры включаются отдельно.

static create_config(source, *, region_classes=None, output_path=None)[исходный код]

Сохранить настройки инференса и добавить структурные классы и углы.

Семантика классов задаётся явно, а не выводится из их имён. Устаревший фильтр только текстовых классов удалён; включаются все сопоставленные классы, если в источнике явно не задан фильтр class_ids.

Mask2Former

class manuscript.detectors._mask2former.Mask2Former(weights=None, config=None, device=None, force_download=False, *, score_threshold=None, mask_logit_threshold=None, nms_iou_threshold=None, min_mask_area=None, **kwargs)[исходный код]

Базовые классы: BaseDetector

Создать модель сегментации экземпляров Mask2Former на ONNX Runtime.

Параметры:
  • weights (str or Path, optional) – Совместимый файл ONNX-модели или ключ реестра моделей. Поддерживаются локальные файлы, HTTP/HTTPS URL, github://owner/repo/tag/file.onnx и gdrive:FILE_ID. При None выбирается пресет по умолчанию mask2former_line_v0_prev и скачиваются его дополнительные артефакты.

  • config (dict, str or Path, optional) – Конфигурация инференса или путь/идентификатор её файла JSON/YAML. Обязательна для локальных весов; пресеты предоставляют свою конфигурацию. region_classes сопоставляет ID выходных классов с полями документа, например {0: {"type": "line"}}. Нормализация, размер входа и имена тензоров должны соответствовать экспортированному графу. create_config() создаёт словарь с типичными значениями по умолчанию и явным сопоставлением классов.

  • device ({"cuda", "coreml", "cpu"}, optional) – Устройство для выполнения модели. При None выбирается CUDA, если ONNX Runtime сообщает о поддержке GPU, иначе CPU. На поддерживаемых системах macOS выбирайте CoreML явно. По умолчанию None.

  • force_download (bool, optional) – Скачать артефакты заново вместо использования кеша. По умолчанию False.

  • score_threshold (float or None, optional) – Минимальная уверенность в [0, 1], применяемая к вероятности класса и итоговой оценке (вероятность класса, умноженная на среднюю вероятность переднего плана маски). При None используется значение конфигурации, а при его отсутствии — 0.15.

  • mask_logit_threshold (float or None, optional) – Порог логитов до sigmoid для создания бинарных масок; должен быть конечным числом. При None используется значение конфигурации, а при его отсутствии — 0.0.

  • nms_iou_threshold (float or None, optional) – Порог IoU масок в [0, 1] для подавления пересекающихся детекций одного класса. При None используется значение конфигурации, а при его отсутствии — 0.5.

  • min_mask_area (int or None, optional) – Минимальная площадь переднего плана в пикселях исходного изображения; положительное целое число. При None используется значение конфигурации, а при его отсутствии — 16.

  • **kwargs – Дополнительные параметры, передаваемые в BaseArtifactModel.

Примеры

Загрузить пресет для текстовых строк:

>>> from manuscript.detectors._mask2former import Mask2Former
>>> detector = Mask2Former(weights="mask2former_line_v0_prev", device="cpu")
>>> page = detector.predict("document.jpg")

Загрузить совместимые локальные веса с соответствующей конфигурацией:

>>> detector = Mask2Former(weights="model.onnx", config="config.json")
static create_config(*, image_size=1024, mask_interpolation_size=384, image_mean=(0.485, 0.456, 0.406), image_std=(0.229, 0.224, 0.225), score_threshold=0.15, mask_logit_threshold=0.0, nms_iou_threshold=0.5, min_mask_area=16, region_classes=None, output_path=None)[исходный код]

Создать конфигурацию инференса; класс 0 по умолчанию соответствует текстовым строкам.

При необходимости сохранить JSON в output_path. Возвращаемый словарь также можно передать напрямую в Mask2Former(config=...).

predict(image, return_raw=False, *, return_masks=False, return_outputs=False)[исходный код]