Детекторы
Модели детекции текста.
- class manuscript.detectors.EAST(weights=None, device=None, force_download=False, *, 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=True, 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. Поддерживает: локальный путь, HTTP/HTTPS URL, GitHub release, Google Drive, имя пресета (
"east_50_g1"),None— автозагрузка пресета по умолчанию (east_50_g1)device (str, optional) – Устройство вычислений:
"cuda","coreml"или"cpu". Если None, автоматически выбирается CPU. Для ускорения GPU/CoreML: - CUDA (NVIDIA):pip install onnxruntime-gpu- CoreML (Apple Silicon M1/M2/M3):pip install onnxruntime-siliconПо умолчаниюNone(CPU).target_size (int, optional) – Размер входного изображения для инференса. Изображения приводятся к
(target_size, target_size). Значение по умолчанию — 1280.expand_ratio_w (float, optional) – Коэффициент горизонтального расширения, применяемый к боксам после NMS. По умолчанию 0.7.
expand_ratio_h (float, optional) – Коэффициент вертикального расширения, применяемый к боксам после NMS. По умолчанию 0.7.
expand_power (float, optional) – Степень нелинейного расширения боксов. Определяет, как масштабируется расширение в зависимости от размера бокса. - 1.0 = линейно (малые и большие боксы расширяются одинаково) - <1.0 = малые боксы расширяются сильнее (например, 0.5, рекомендуется для детекции символов) - >1.0 = большие боксы расширяются сильнее Значение по умолчанию — 0.5.
score_thresh (float, optional) – Порог уверенности для отбора кандидатов перед NMS. Значение по умолчанию — 0.7.
iou_threshold (float, optional) – Порог IoU для фазы объединения locality-aware NMS. По умолчанию 0.2.
iou_threshold_standard (float, optional) – Порог IoU для стандартного NMS после locality-aware объединения. Если None, используется значение iou_threshold. По умолчанию None.
score_geo_scale (float, optional) – Коэффициент масштабирования при декодировании карт геометрии/оценок. По умолчанию 0.25.
quantization (int, optional) – Разрешение квантования координат точек при декодировании. По умолчанию 2.
axis_aligned_output (bool, optional) – Если True, возвращаются осево-ориентированные прямоугольники вместо исходных четырёхугольников. По умолчанию 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 > threshold считаются совпавшими и объединяются. По умолчанию 0.1.
force_download (bool)
Заметки
Класс предоставляет два основных публичных метода:
predict— выполняет инференс на одном изображении и возвращает детекции.train— высокоуровневая точка входа для обучения модели EAST на пользовательских датасетах.
Детектор использует ONNX Runtime для быстрого инференса на CPU и GPU. Для ускорения на GPU установите:
pip install onnxruntime-gpuМетоды
__call__(*args, **kwargs)Вызов объекта как функции.
export(weights_path, output_path[, ...])Экспорт модели EAST из PyTorch в формат ONNX.
predict(img_or_path)Запустить инференс EAST и вернуть обнаруженную структуру страницы.
runtime_providers()Получение провайдеров выполнения ONNX Runtime в зависимости от устройства.
train(train_images, train_anns, val_images, ...)Обучение модели EAST на пользовательских датасетах.
- pretrained_registry: Dict[str, str] = {'east_50_g1': 'github://konstantinkozhin/manuscript-ocr/v0.1.0/east_50_g1.onnx'}
- __init__(weights=None, device=None, force_download=False, *, 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=True, remove_area_anomalies=False, anomaly_sigma_threshold=5.0, anomaly_min_box_count=30, use_tta=False, tta_iou_thresh=0.1, **kwargs)[исходный код]
- Параметры:
device (str | None)
force_download (bool)
target_size (int)
expand_ratio_w (float)
expand_ratio_h (float)
expand_power (float)
score_thresh (float)
iou_threshold (float)
iou_threshold_standard (float | None)
score_geo_scale (float)
quantization (int)
axis_aligned_output (bool)
remove_area_anomalies (bool)
anomaly_sigma_threshold (float)
anomaly_min_box_count (int)
use_tta (bool)
tta_iou_thresh (float)
- predict(img_or_path)[исходный код]
Запустить инференс EAST и вернуть обнаруженную структуру страницы.
- Параметры:
img_or_path (str or pathlib.Path or numpy.ndarray) – Путь к файлу изображения или RGB-изображение в виде массива NumPy формата
uint8с формой(H, W, 3).- Результат:
Разобранный результат детекции в виде объекта Page, содержащего один Block с одной Line из объектов TextSpan. Каждый TextSpan содержит координаты полигона, оценку уверенности и последовательный индекс
order.- Тип результата:
Заметки
Метод выполняет: (1) загрузку изображения, (2) изменение размера и нормализацию, (3) инференс модели, (4) декодирование четырёхугольников, (5) NMS, (6) расширение боксов, (7) масштабирование координат обратно к исходному размеру.
Аугментация во время инференса (TTA):
Если при инициализации задано
use_tta=True, метод выполняет инференс как на исходном, так и на горизонтально отражённом изображении, а затем объединяет результаты. Боксы из обоих представлений сопоставляются по IoU и объединяются через объединение координат с усреднением оценок. Это может улучшить детекцию текста у краёв изображения или частично видимого текста.Для визуализации используйте внешнюю утилиту
visualize_page:>>> from manuscript.utils import visualize_page >>> page = model.predict(img_path) >>> vis_img = visualize_page(img, page)
Примеры
Выполнить инференс и получить структурированный результат:
>>> from manuscript.detectors import EAST >>> model = EAST() >>> img_path = r"example/ocr_example_image.jpg" >>> page = model.predict(img_path) >>> # Access first line's first text span >>> first_text_span = page.blocks[0].lines[0].text_spans[0] >>> print(f"Confidence: {first_text_span.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, 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. По умолчанию
True.target_size (int, optional) – Изменять размер короткой стороны изображений до этого значения. По умолчанию
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-3.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_lraugmentation_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_probgrad_clip (float, optional) – Значение отсечения градиента (L2-норма). По умолчанию
5.0.early_stop (int, optional) – Терпение (число эпох без улучшений) для ранней остановки. По умолчанию
100.use_sam (bool, optional) – Включить оптимизатор SAM. По умолчанию
True.sam_type ({"sam", "asam"}, optional) – Используемый вариант SAM. По умолчанию
"asam".use_lookahead (bool, optional) – Обернуть оптимизатор в Lookahead. По умолчанию
True.use_ema (bool, optional) – Поддерживать EMA-версию весов модели. По умолчанию
False.use_multiscale (bool, optional) – Случайное мульти-масштабное обучение. По умолчанию
True.use_ohem (bool, optional) – Онлайн-отбор сложных примеров (OHEM). По умолчанию
True.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) …/checkpoints/, 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.
- Результат:
Лучшие веса модели (EMA, если включено, иначе базовая модель).
- Тип результата:
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" ... ] >>> >>> best_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("Best checkpoint loaded:", best_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, ... } >>> best_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)[исходный код]
Экспорт модели EAST из PyTorch в формат ONNX.
Этот метод конвертирует обученную модель EAST из PyTorch в формат ONNX, который может использоваться для более быстрого инференса с ONNX Runtime. Экспортированную модель можно загрузить с помощью
EAST(weights_path="model.onnx", use_onnx=True).- Параметры:
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.
- Результат:
Модель 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 из чекпоинта, анализируя количество параметров в layer4. Это предотвращает несоответствия между чекпоинтом и архитектурой, которые могли бы привести к некорректному экспорту.
Примеры
Экспорт с автоматическим определением 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_path="east_model.onnx", ... use_onnx=True, ... device="cuda" ... ) >>> result = detector.predict("image.jpg")
См. также
EAST.__init__Инициализация детектора EAST с поддержкой ONNX с использованием
use_onnx=True.
- 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=True, containment_threshold=0.9, **kwargs)[исходный код]
Базовые классы:
BaseDetectorИнициализация текстового детектора YOLO с использованием ONNX Runtime.
- Параметры:
weights (str or Path, optional) – Путь или идентификатор для весов модели ONNX. Поддерживает: локальный путь, HTTP/HTTPS URL, GitHub release, Google Drive, имя пресета (
"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 (str or Path, optional) – Путь или идентификатор YAML-конфигурации модели. Поддерживаются те же URL-схемы, что и для
weights. ЕслиNone, предпринимается попытка найти YAML-файл рядом с весами или использовать конфиг пресета изconfig_registry.device (str, optional) – Устройство вычислений:
"cuda","coreml"или"cpu". Если None, автоматически выбирается CPU. Для ускорения GPU/CoreML: - CUDA (NVIDIA):pip install onnxruntime-gpu- CoreML (Apple Silicon M1/M2/M3):pip install onnxruntime-siliconПо умолчаниюNone(CPU).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-предобработке. Перед ONNX-инференсом изображения приводятся к размеру
(target_size, target_size). ЕслиNone, детектор пытается прочитатьimgszиз YAML-конфига рядом с весами или из конфигурации пресета. Для неизвестных или пользовательских весов без YAML используется1280.axis_aligned_output (bool, optional) – Если
True(по умолчанию), OBB-детекции преобразуются в обычные осеориентированные прямоугольники. ЕслиFalse, OBB-детекции возвращаются как повёрнутые полигоны черезpage/polygonsи как строкиcx, cy, w, h, score, class_id, angleвboxes. Для моделей без OBB этот флаг не влияет на результат.containment_threshold (float or None, optional) – Удаляет меньший бокс, если как минимум такая доля его площади покрыта большим боксом. Например,
0.9удаляет боксы, которые покрыты на90%и более. УстановитеNone, чтобы отключить эту дополнительную очистку. По умолчанию0.9.force_download (bool)
Заметки
Класс предоставляет один основной публичный метод:
predict— выполняет инференс на одном изображении и возвращает детекции.
Доступные пресеты:
"yolo26s_obb_text_g1"- OBB-детектор текста YOLO26-S"yolo26x_obb_text_g1"- OBB-детектор текста YOLO26-X
Методы
__call__(*args, **kwargs)Вызов объекта как функции.
predict(img_or_path)Запустить YOLO ONNX-инференс на одном изображении и вернуть обнаруженную структуру страницы.
runtime_providers()Получение провайдеров выполнения ONNX Runtime в зависимости от устройства.
train(*args, **kwargs)export
- default_target_size = 1280
- pretrained_registry: Dict[str, str] = {'yolo26s_obb_text_g1': 'https://github.com/konstantinkozhin/manuscript-ocr/releases/download/v0.1.0/yolo26s_obb_text_g1.raw.onnx', 'yolo26x_obb_text_g1': 'https://github.com/konstantinkozhin/manuscript-ocr/releases/download/v0.1.0/yolo26x_obb_text_g1.raw.onnx'}
- config_registry: Dict[str, str] = {'yolo26s_obb_text_g1': 'https://github.com/konstantinkozhin/manuscript-ocr/releases/download/v0.1.0/yolo26s_obb_text_g1.raw.yaml', 'yolo26x_obb_text_g1': 'https://github.com/konstantinkozhin/manuscript-ocr/releases/download/v0.1.0/yolo26x_obb_text_g1.raw.yaml'}
- __init__(weights=None, config=None, device=None, force_download=False, *, score_thresh=0.1, class_ids=None, target_size=None, axis_aligned_output=True, containment_threshold=0.9, **kwargs)[исходный код]
- predict(img_or_path)[исходный код]
Запустить YOLO ONNX-инференс на одном изображении и вернуть обнаруженную структуру страницы.
- Параметры:
img_or_path (str or pathlib.Path or numpy.ndarray) – Путь к файлу изображения или RGB-изображение в виде массива NumPy формата
uint8с формой(H, W, 3).- Результат:
Разобранный результат детекции в виде объекта Page, содержащего один Block с одной Line из объектов TextSpan.
- Тип результата:
Примеры
Выполнить инференс и получить структурированный результат:
>>> from manuscript.detectors import YOLO >>> model = YOLO(weights="yolo26x_obb_text_g1") >>> page = model.predict("page.jpg") >>> first_text_span = page.blocks[0].lines[0].text_spans[0] >>> print(first_text_span.detection_confidence)
EAST: примечания по обучению
Детектор EAST в manuscript-ocr основан на архитектуре, предложенной в EAST: An Efficient and Accurate Scene Text Detector (Zhou et al., CVPR 2017). Процедура обучения существенно переработана по сравнению с оригиналом: изменены схема взвешивания потерь, пайплайн аугментаций, обработка четырёхугольных разметок и поддержка смешанных аннотаций. Предобученные веса получены авторами проекта.
Четырёхугольные области для обучения EAST
Обучение EAST ожидает цели в виде четырёхугольников. При загрузке полигонов COCO segmentation используйте augmentation_config["quad_source"] в EAST.train(...), чтобы управлять преобразованием полигонов в 4-точечные обучающие квады:
"auto"сохраняет готовые 4-точечные полигоны как есть и используетminAreaRectтолько для полигонов с большим числом вершин."as_is"принимает только 4-точечные полигоны и пропускает полигоны с другим числом вершин."min_area_rect"всегда строит прямоугольник минимальной площади и соответствует старому пути преобразования.