Векторизация планов помещений: растровое изображение в структурированные стены и проёмы
Сегментационная модель переводит скан плана помещения в векторные данные — полигоны стен и проёмов. Исходный код открыт, покрыт тестами.
- Масштаб
- Датасет CubiCasa5k, обучение сегментации
- Этап
- Открытый код
- Сдан
- декабрь 2025
TL;DR. Планы помещений чаще всего существуют картинкой: скан, JPEG, страница PDF. Модель сегментации на PyTorch, обученная на датасете CubiCasa5k, переводит такое изображение в структурированные векторные данные — полигоны стен и проёмов, пригодные для CRM и интерьерных сервисов. Код открыт.
Ситуация: план помещения существует только как картинка
В интерьерных сервисах, CRM застройщиков и системах учёта недвижимости планировка обычно хранится изображением. Картинку можно показать человеку, но нельзя посчитать: измерить площадь по помещениям, расставить объекты, сопоставить две планировки между собой.
Перевод плана в векторный вид делается вручную — обводкой в графическом редакторе. На поток такой способ не масштабируется.
Задача
- Принимать растровое изображение плана — скан или экспорт из PDF.
- Выделять конструктивные элементы: стены и проёмы.
- Отдавать результат структурированными данными, а не другой картинкой.
- Собрать воспроизводимый пайплайн: подготовка датасета, обучение, инференс, тесты.
Что сделали
Пайплайн состоит из трёх частей.
Подготовка данных. Датасет CubiCasa5k размечен в формате COCO. Скрипты конвертируют аннотации в маски сегментации, пригодные для обучения, и собирают выборки.
Модель. Сегментационная сеть на PyTorch обучается отличать стены и проёмы от остального содержимого плана — размерных линий, подписей, мебели, штриховки.
Векторизация. Предсказанная маска переводится в полигоны: контуры стен и проёмов выделяются и упрощаются до векторного представления, которое уже можно передать дальше — в интерьерный редактор или в карточку объекта.
Проект покрыт тестами, исходный код опубликован на github.com/pimenoffd.
Результат
- Рабочий инструмент: на входе изображение плана, на выходе структурированные полигоны стен и проёмов.
- Воспроизводимый пайплайн — от конвертации аннотаций до инференса.
- Тестовое покрытие на pytest.
- Открытый исходный код: реализацию можно посмотреть до разговора о задаче.
Ключевые технические решения
- Сегментация, а не детекция прямоугольников. Стена на плане — не всегда прямоугольник: скруглённые и наклонные участки встречаются регулярно. Пиксельная маска описывает такую геометрию, рамка объекта — нет.
- Конвертация COCO-аннотаций в маски отдельным шагом. Подготовка данных вынесена в самостоятельные скрипты, а не спрятана внутри обучения. Датасет пересобирается без переписывания тренировочного кода.
- Векторизация как отдельный этап после инференса. Модель отвечает за маску, упрощение контуров в полигоны — за геометрию. Порог упрощения меняется без переобучения модели.
Частые вопросы
Зачем открывать исходный код такого проекта?
Открытый репозиторий с тестами отвечает на вопрос, который не закрывается описанием кейса: как человек пишет код. Клиентские проекты показать построчно нельзя, pet-project — можно.
Работает ли модель на сканах низкого качества?
Качество исходника влияет напрямую: модель обучена на CubiCasa5k, и чем ближе входное изображение к характеру этого датасета, тем устойчивее результат. Под конкретный поток документов модель дообучается.
Можно ли использовать это в своём сервисе?
Код открыт и доступен на GitHub. Под задачу конкретного сервиса — интеграция, дообучение на своих планировках и вывод в нужный формат — потребуется доработка.
Что было бы дальше
Естественное продолжение — распознавание помещений как замкнутых областей с расчётом площадей, извлечение подписей и размерных линий, экспорт в форматы интерьерных редакторов.
Если у вас поток планировок в виде картинок, из которых нужны данные, — обсудим за 30 минут.
Стек
- Python
- PyTorch
- OpenCV
- CubiCasa5k
- pytest