Перед вами PDF на 30 страниц с десятками архитектурных чертежей. На каждом — кухня, ванная или офис с рядом шкафов. Задача: определить каждый шкаф, понять его тип, подсчитать двери и полки, считать размеры и подобрать подходящие позиции из каталога с сотнями артикулов.
В строительстве и дизайне интерьеров эту работу до сих пор выполняют вручную. Специалисты часами сверяют чертежи с каталогами — рутина, отнимающая десятки человеко-часов на проект.
Мы автоматизировали процесс и создали систему, которая принимает PDF с чертежами и каталог мебели, а на выходе выдаёт рекомендации с точностью 87%.
Рассказываем, как прошли путь от наивной попытки использовать одну мультимодальную модель до продуманного пайплайна, сочетающего YOLO, кластеризацию, Gemini и трансформеры для семантического поиска.
Наивный подход: всё в одну LLM
Первая идея была простой: отправить изображение чертежа и каталог напрямую в мультимодальную модель. Мы начали с Gemini 2.5 Pro — на тот момент она показывала лучшие результаты в визуальных задачах.
Для простых случаев модель справлялась. Но при масштабировании возникли проблемы.
- Несовпадение модальностей: чертежи в 2D, каталог — в 3D-рендерах. Визуально это разные представления одного объекта, и модель не всегда устанавливает соответствие.
- Специфика типов шкафов: у каждого типа — свои признаки (выдвижной, навесной, с остеклением). Один промпт не может охватить все правила.
- Ошибки подсчёта: модель систематически ошибалась в количестве шкафов и «галлюцинировала» размеры — критично для подбора.
Мы протестировали три топовые модели на 20 планах и полном каталоге из 120 страниц (около 1500 шкафов). Ни одна не достигла приемлемого качества.
Затем попробовали RAG: структурировали каталог, чтобы улучшить поиск. Это немного помогло (до ~40% у Gemini), но фундаментальные ошибки остались.
Проблемы были в визуальном анализе. Мы приняли решение: разделить задачу на специализированные этапы и использовать для каждого свой инструмент. Это стало переломным моментом.
Подзадачи и финальная архитектура
Мы разбили задачу на пять этапов:
- Детекция шкафов на чертеже
- Кластеризация шкафов
- Извлечение размерностей
- Описание признаков шкафа
- Семантический поиск и ранжирование по каталогу
Этап 1: детекция шкафов
Первый этап — самый важный. Ошибка здесь распространяется на все последующие шаги.
Мы разметили более 5000 планов, выделив классы шкафов. Точность детектора достигла 96% (mAP@0.5) — высокий результат для разнообразных стилей чертежей.
Главная сложность — вложенные шкафы. Например, двухдверный шкаф может состоять из двух однодверных, а высокий — из навесного и нижней части.
Мы решили это с помощью иерархии bbox: алгоритм анализирует перекрытие детекций, строит дерево родитель-потомок и исключает дубликаты. Если однодверный шкаф полностью вписан в двухдверный того же класса — система понимает, что это единый объект.
Этап 2: кластеризация шкафов
После детекции нужно сгруппировать визуально одинаковые шкафы. Это важно для точного подсчёта и уменьшения нагрузки.
Мы реализовали два режима в зависимости от класса:
- По ключевым точкам: строится матрица попарных расстояний между признаками (ручки, паттерны дверей). Работает хорошо для шкафов с текстурными деталями.
- По геометрическому сходству: нормализованные изображения шкафов сравниваются по попарному расстоянию. Эффективно для геометрических паттернов.
Этап 3: извлечение размерностей
Размеры — ключевой параметр. На чертежах они указаны по-разному: выносные линии, коды (например, ZW 34|24|36), надписи.
Разработка универсального детектора размеров была бы сопоставима по сложности со всем пайплайном. Слишком много стилей: со стрелками, без, с кодировкой, с ручными подписями.
Вместо этого мы используем vLLM: отправляем кроп шкафа и весь план. Модель находит шкаф и считывает размеры.
На тесте из 100 планов:
- Gemini 2.5 Pro — 81%
- Gemini 3 — 87%
Рост точности стал важным бустом для всей системы.
Этап 4: описание признаков и подготовка каталога
4.1 Описание признаков
Этот этап — сердце системы. Качество подбора зависит от точности описания.
Для каждого шкафа генерируется структурированный JSON с признаками, специфичными для его класса. Каждый класс имеет свой промпт с детальными инструкциями: как отличить дверь от полки, проверить остекление и т.д.
Мы сравнили три модели:
- Gemini 2.5 Pro: качественные описания, но ошибки в остеклении и подсчёте полок
- GPT-4: ошибки в подсчёте, краткие описания
- Gemini 3: минимальное количество ошибок, точный подсчёт, детальные описания
Переход на Gemini 3 дал самый значительный прирост в качестве.
4.2 Подготовка каталога
Каталог мебели мы перевели в машиночитаемый формат. Каждый артикул описан в JSON с теми же признаками, что и шкафы на чертежах.
Для описания 3D-рендеров использовали GPT-4 (оригинал упоминал GPT-5, но на момент публикации GPT-5 не существует; скорее всего, имелся в виду GPT-4). Модель генерирует текстовое описание и выделяет признаки. Каталог хранится как набор JSON-файлов.
Мы выбрали текстовые признаки, потому что визуальные эмбеддинги не позволяют точно различить шкафы, отличающиеся лишь количеством полок или остеклением.
Этап 5: рекомендательная система
Финальный этап — поиск топ-3 подходящих артикулов для каждого шкафа. Процесс включает три фазы:
- Фильтрация: по классу шкафа применяются специфичные правила (например, количество ящиков). Реализовано три прохода с постепенным ослаблением условий, чтобы найти альтернативу, даже если точного совпадения нет.
- Проверка размеров: кандидаты сверяются по габаритам. Если ни один не подходит — включается режим без фильтрации по размеру.
- Ранжирование: оставшиеся кандидаты оцениваются по композитному скору, учитывающему сходство признаков и размеров.
Результаты
Итоговая точность системы:
- Детекция шкафов — 96%
- Извлечение размерностей — 87%
- Описание признаков — 87%
- Точность рекомендации — 87%
По сравнению с начальным подходом (максимум 34% у Gemini 2.5 Pro), это прирост более чем в 2.5 раза. Обработка документа занимает 5–7 минут — на порядок быстрее ручного способа.
Заключение
- LLM пока не всесильны. Мультимодальные модели не справляются с комплексными задачами, требующими одновременного анализа, подсчёта и поиска. Разделение на этапы дало кратный прирост качества.
- Специфичные правила критически важны. Без учёта вложенности и предметных ограничений универсальный матчинг работает плохо. Знание предметной области не заменить одной нейросетью.
- Gemini 3 — заметный прорыв. Переход с Gemini 2.5 Pro дал прирост 6–13% на разных этапах. Качество визуального анализа архитектурных чертежей существенно выросло.