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 та дослідженнях в галузі автоматизації 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 та прискорити введення об'єкта.







