前面概覽介紹了各種AI相關技術,以及IFC交換格式與BIM模型的特點,以下我將以實際的流程藍圖,來說明各技術在BIM自動化流程中的定位、執行步驟與關係:
YOLO 模型的預測輸出文字檔,每行會呈現為「class x y w h」格式,其中:
例如下圖4.2「0 0.44 0.97 0.04 0.04」,代表第0類物件,中心點位於圖片寬度44%、高度97%處,寬度為原圖的4%,高度為原圖的4%。
圖4.2 YOLO預測框結果示例
本文OCR模型將以PaddleOCR為例,它除了能辨識文字內容外,也會產生一個預測框,如下圖4.3所示。
圖4.3 OCR 預測框結果示例
IFC的資料結構本質上是一種階層樹狀(Hierarchical Tree)的物件導向資料模型。例如以門與柱元素,在IFC中的層級表示如下:
# IFC繼承結構
IfcRoot
└─ IfcObjectDefinition
└─ IfcObject
└─ IfcProduct
└─ IfcElement
└─ IfcBuildingElement
├─ IfcDoor
└─ IfcColumn
在IFC格式中都存在著父類、子類、屬性等繼承關係,如果以Python語法來對應,可表示如下:
# IFC資料結構的Python物件導向對照範例
class IfcRoot:
def __init__(self, GlobalId):
self.GlobalId = GlobalId # 唯一識別碼(所有IFC元素都必須有)
class IfcObjectDefinition(IfcRoot):
pass # 對象定義(主要承上啟下,通常不直接實例化)
class IfcObject(IfcObjectDefinition):
pass # 具體對象(如建築物、構件等)
class IfcProduct(IfcObject):
pass # 產品或空間元素(可有位置、形狀等)
class IfcElement(IfcProduct):
pass # 元素(建築構件、設備…的上層類別)
class IfcBuildingElement(IfcElement):
pass # 建築構件(牆、門、窗、柱等)
class IfcDoor(IfcBuildingElement):
def __init__(self, GlobalId, Name, OverallWidth, OverallHeight):
super().__init__(GlobalId)
self.Name = Name # 構件名稱(例如"D1")
self.OverallWidth = OverallWidth # 門寬(如90,單位cm)
self.OverallHeight = OverallHeight # 門高(如210,單位cm)
class IfcColumn(IfcBuildingElement):
def __init__(self, GlobalId, Name, Height):
super().__init__(GlobalId)
self.Name = Name # 構件名稱(例如"C1")
self.Height = Height # 柱高(如300,單位cm)
如同下圖4.5的3D模型,其實背後就是如圖4.4一連串複雜組成的數據串,而前面所提到的,若將YOLO、OCR等AI模型所提取的圖面數據(如位置、尺寸),就能直接對應到每個IFC物件類別的屬性欄位,實現自動化建模流程。
圖4.4 IFC資料結構文字檔示例
圖4.5 IFC資料結構模型可視化於BIM軟體
今天我們透過YOLO與OCR的預測結果示例,結合IFC資料結構的核心原理,進一步理解了AI數據如何轉化為BIM自動化建模資料。
其實不論AI模型還是IFC標準,背後的邏輯都圍繞著「資料結構」的本質。但要如何讓這些自動化流程,真正落地在設計師、工程師手中,不需要資工背景也能輕鬆上手呢?
下一篇,將會介紹如何利用GUI(圖形介面)將這些流程串連起來,打造人人可用的BIM智慧工具。我們明天見!