Кроп и minvisibility: обновить рамки на Python
Кроп может оставить объект целиком, срезать его часть или удалить из кадра. Напишите функцию, которая пересчитает рамки в координаты окна и применит заданный порог видимости; изображения читать не требуется.
Откройте программу платного курса Computer Vision Engineer, чтобы продолжить практику с данными, моделями и CV-сервисом.
Что останется от разметки после кропа
Задание
Случайный кроп вырезает из кадра окно, и разметку приходится пересобирать: объект может остаться целиком, оказаться срезанным краем окна или не попасть в него вовсе. Библиотеки решают судьбу каждой рамки по порогу видимости — доле исходной площади рамки, уцелевшей внутри окна.
Реализуйте функцию crop_boxes, которая повторяет это поведение:
- пересечь каждую рамку с окном кропа;
- посчитать видимость — площадь пересечения, делённую на исходную площадь рамки;
- рамки с видимостью строго меньше
min_visibilityвыбросить; - остальные вернуть в координатах окна: левый верхний угол окна становится началом отсчёта.
Порядок уцелевших рамок сохраняется. Рамка, не пересёкшаяся с окном, и рамка нулевой площади отбрасываются при любом пороге, включая нулевой.
Пример
boxes = [(50, 50, 150, 150), (120, 120, 180, 180), (0, 0, 40, 40)]
crop_boxes(boxes, (100, 100, 300, 300), 0.2)
# [(0.0, 0.0, 50.0, 50.0), (20.0, 20.0, 80.0, 80.0)]
У первой рамки внутри окна осталась четверть площади — порог 0,2 она проходит и приезжает обрезанной. Вторая попала в окно целиком. Третья не пересекается с окном и отброшена.
Примечание
Рамки и окно заданы кортежами (x_min, y_min, x_max, y_max) в пикселях исходного кадра. Функция возвращает список кортежей того же вида, но в координатах окна.
Координаты сверяются с точностью до сотых. Вызывать функцию вручную не нужно — проверка запускает её сама.
Что проверяется
Код проверок скрыт, так что вот полный список того, что в них разбирается:
- формат ответа: список кортежей из четырёх координат;
- пример из условия;
- порог отсекает рамку, от которой внутри окна осталась четверть;
- пустой список рамок и рамка целиком внутри окна при пороге, равном единице;
- нулевой порог: обе частично видимые рамки остаются;
- рамка нулевой ширины отбрасывается при любом пороге;
- видимость чуть ниже порога и касание окна углом.
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
