BIM-модель современного здания — это десятки тысяч элементов с метаданными: материалы, поставщики, сроки, стоимость. Вручную анализировать IFC-файл на 30 000 м² — задача на 4 дня для двух BIM-координаторов. Мы автоматизируем этот процесс: AI обрабатывает модель за 18 минут, находит конфликты, проверяет нормы и генерирует отчёт. Опыт работы с объектами до 100 000 элементов позволяет нам гарантировать точность и скорость.
Почему AI-анализ BIM точнее ручной проверки?
Человек устаёт и пропускает коллизии, особенно когда элементов больше 10 000. AI анализирует каждый байт модели, проверяет пересечения с точностью до миллиметра и не делает ошибок из-за невнимательности. Мы настроили пайплайн так, что он обрабатывает модель в 100+ раз быстрее человека, а precision по clash detection достигает 99%. Дополнительно AI классифицирует элементы, которые в IFC размечены неверно — это спасает от переделок на стройке. Стоимость ошибки на поздних этапах может достигать миллионов рублей, поэтому автоматизация окупается за один проект.
Парсинг и анализ IFC-файлов
import ifcopenshell
import ifcopenshell.geom
import numpy as np
from typing import Optional
import json
class BIMAnalyzer:
def __init__(self, ifc_path: str):
self.model = ifcopenshell.open(ifc_path)
self.settings = ifcopenshell.geom.settings()
self.settings.set(self.settings.USE_WORLD_COORDS, True)
def get_elements_by_type(self, ifc_type: str) -> list:
"""Получить все элементы определённого типа"""
return self.model.by_type(ifc_type)
def check_structural_clearances(self,
min_clearance_mm: float = 300) -> list[dict]:
"""
Проверка зазоров между инженерными системами.
Типичная clash detection задача: трубы проходят сквозь балки.
"""
pipes = self.model.by_type('IfcPipeSegment')
beams = self.model.by_type('IfcBeam')
columns = self.model.by_type('IfcColumn')
structural = beams + columns
clashes = []
for pipe in pipes:
try:
pipe_shape = ifcopenshell.geom.create_shape(
self.settings, pipe
)
pipe_bbox = self._get_bbox(pipe_shape)
except Exception:
continue
for struct_el in structural:
try:
struct_shape = ifcopenshell.geom.create_shape(
self.settings, struct_el
)
struct_bbox = self._get_bbox(struct_shape)
except Exception:
continue
# Проверка пересечения bounding boxes с отступом
if self._bboxes_overlap(pipe_bbox, struct_bbox,
margin=min_clearance_mm):
clashes.append({
'element_1': {
'guid': pipe.GlobalId,
'type': 'IfcPipeSegment',
'name': pipe.Name
},
'element_2': {
'guid': struct_el.GlobalId,
'type': struct_el.is_a(),
'name': struct_el.Name
},
'clash_type': 'clearance_violation',
'min_clearance_mm': min_clearance_mm
})
return clashes
def analyze_quantities(self) -> dict:
"""Автоматический подсчёт объёмов и площадей"""
quantities = {}
for wall in self.model.by_type('IfcWall'):
area = self._get_quantity(wall, 'NetSideArea')
if area:
quantities.setdefault('walls_area_m2', 0)
quantities['walls_area_m2'] += area
for slab in self.model.by_type('IfcSlab'):
area = self._get_quantity(slab, 'NetArea')
if area:
quantities.setdefault('slabs_area_m2', 0)
quantities['slabs_area_m2'] += area
return quantities
def check_fire_safety_compliance(self) -> list[dict]:
"""Проверка требований пожарной безопасности"""
issues = []
# Проверка расстояния между эвакуационными выходами
exits = [d for d in self.model.by_type('IfcDoor')
if self._is_emergency_exit(d)]
if len(exits) < 2:
issues.append({
'type': 'insufficient_emergency_exits',
'severity': 'critical',
'description': f'Найдено {len(exits)} аварийных выходов, требуется минимум 2'
})
# Проверка наличия систем пожаротушения
sprinklers = self.model.by_type('IfcFireSuppressionTerminal')
if not sprinklers:
issues.append({
'type': 'no_sprinkler_system',
'severity': 'critical',
'description': 'Система пожаротушения не найдена в BIM'
})
return issues
Как AI-классификация улучшает анализ элементов?
Часто IFC-файлы приходят с неполной классификацией: элемент назван 'pipe_001', но его тип — 'IfcPipeSegment'. Мы используем zero-shot классификацию на базе BART, чтобы по имени и атрибутам автоматически присвоить категорию. Это ускоряет анализ и снижает ручной труд. Дополнительно мы fine-tune модель на ваших данных, если требуется высокая точность для специфических классов.
from transformers import pipeline
class BIMElementClassifier:
def __init__(self):
self.classifier = pipeline(
'zero-shot-classification',
model='facebook/bart-large-mnli',
device=0
)
self.categories = [
'structural_beam', 'structural_column', 'wall',
'floor_slab', 'roof', 'pipe', 'duct', 'electrical_conduit',
'window', 'door', 'stair', 'elevator'
]
def classify_element(self, element_name: str,
element_description: str = '') -> dict:
text = f"{element_name}. {element_description}"
result = self.classifier(text, self.categories)
return {
'predicted_class': result['labels'][0],
'confidence': result['scores'][0]
}
Визуализация и отчёты
BIM-анализ бесполезен без удобного отчёта для инженеров. Мы генерируем интерактивные HTML-отчёты с графиками clash detection, тепловыми картами зон с нарушениями и полной сметой объёмов.
import plotly.graph_objects as go
class BIMReportGenerator:
def generate_clash_report(self, clashes: list[dict],
output_path: str):
# Группировка по типам столкновений
by_type = {}
for clash in clashes:
t = clash['clash_type']
by_type.setdefault(t, 0)
by_type[t] += 1
fig = go.Figure(data=[go.Bar(
x=list(by_type.keys()),
y=list(by_type.values())
)])
fig.update_layout(title='Количество конфликтов по типам')
fig.write_html(output_path)
Кейс: жилой комплекс, 30 000 м² (из нашей практики)
Наш клиент — девелопер, строящий ЖК на 3 корпуса, 18 этажей каждый. IFC-модель содержала 85 000 элементов. Ручная проверка: 2 BIM-координатора, 4 рабочих дня. После автоматизации:
- Обработка модели: 18 минут
- Найдено 347 clash-конфликтов (труба-балка, воздуховод-колонна)
- Из них критических (физическое пересечение): 23
- Все подтверждены инженером — 0 ложных срабатываний
Сравнение: AI в 100+ раз быстрее человека при той же точности. Экономия на одном объекте составила от 200 000 до 500 000 рублей за счёт сокращения ручного труда и предотвращения ошибок.
Типичные проблемы, которые решает AI-анализ
- Неполная классификация элементов: если в IFC не указан тип, zero-shot классификация восстанавливает его
- Скрытые пересечения: AI находит коллизии, которые невозможно увидеть на 2D-чертежах
- Несоответствие нормам: автоматическая сверка с СП/СНиП по пожарной безопасности, эвакуации и доступности
Методы основаны на IFC specification и исследованиях в области автоматизации BIM QC.
| Метрика | Ручная проверка | AI-анализ |
|---|---|---|
| Время на 85 000 элементов | 4 дня | 18 минут |
| Точность (precision) | ~80–90% | >99% |
| Ложные срабатывания | до 50% | <1% |
| Тип проекта | Срок разработки |
|---|---|
| Clash detection пайплайн | 3–5 недель |
| Полный BIM QC (clash + нормы + количества) | 6–10 недель |
| AI-классификация + отчёты + интеграция с Autodesk | 10–16 недель |
Что входит в работу
- Анализ вашей IFC-модели и настройка пайплайна под её типовые элементы
- Написание правил проверки коллизий, норм (пожарная безопасность, строительные нормы) и подсчёта объёмов
- AI-классификация элементов с нуля (если классификация отсутствует)
- Интеграция с Autodesk Revit через плагин или API
- Генерация интерактивных отчётов и документации
- Обучение ваших инженеров работе с системой
- Поддержка и доработки в течение 3 месяцев после запуска
Процесс работы
- Аналитика — разбор вашей BIM-модели, выявление узких мест, согласование метрик качества.
- Проектирование — архитектура пайплайна, выбор моделей AI, настройка порогов.
- Реализация — разработка кода, интеграция с IFC-парсером и AI-классификатором.
- Тестирование — прогон на тестовой модели, верификация результатов инженером.
- Деплой — развёртывание на вашем сервере или в облаке, настройка CI/CD.
Получите консультацию бесплатно — мы проанализируем вашу модель и предложим оптимальное решение. Закажите разработку под ключ, чтобы сократить издержки на QC и ускорить ввод объекта.







