楊本顥筆記・知識・作品

首頁 / 作品 / floorplan-to-furniture

個人專案 · 空間生成實驗 01 / TL;DR

平面圖到家具配置

將平面圖轉成 3D 空間,再依使用需求產生家具配置,探索從格局辨識到實際商品對應的完整流程。

PythonOpenCVFastAPIThree.js · Vite幾何求解
看架構流程 ↓操作影片位置 ↓
平面圖到家具配置的主題示意插畫
專案主題示意圖 · 非實際操作畫面

個人延伸實驗

在 RoomPilot 之後,獨立重新整理辨識、生成與配置的流程。這篇聚焦實驗方法及量測,不把團隊專案的成果直接算成個人成果。

操作影片

跟著畫面走一遍

預留格局辨識、需求問卷與配置流程的操作說明;錄製時使用可公開的自製示範素材。

操作影片準備中

錄製完成後會放在這裡。

02 / WHY

我想知道,錯的是辨識還是生成

從一張平面圖走到家具配置,包含好幾個可能出錯的階段。如果最後一面牆的位置不對,很難只看畫面判斷是辨識錯誤,還是生成器把正確資料畫錯。

因此我先固定已知輸入,驗證生成器,再把前段換成自動辨識。目標是讓想查看空間配置的人得到可檢查的結果,也讓每一層的問題能被單獨定位。

生成可對照
先用已知場景驗證位置、尺寸與物件名稱。
需求有作用
問卷選項要能說明如何影響配置,未接入的選項要標明。
結果可驗證
家具擺入後,仍需檢查幾何限制與商品對應。
03 / ARCHITECTURE & CHOICES

架構與技術選型

從輸入到結果

由上往下沿藍色箭頭閱讀,右側是各階段的工作。小螢幕可在圖內左右滑動。

平面圖到家具配置架構流程平面圖 PNG → OpenCV 辨識 → 結構化空間與 3D → 需求問卷與求解 → 配置與商品對應01平面圖 PNG輸入格局影像02OpenCV 辨識轉成房間、牆面與開口資料03結構化空間與 3D用已驗證的生成器建立場景04需求問卷與求解將可用條件轉成家具擺放限制05配置與商品對應檢查結果,再呈現配置與品項
正式辨識流程如上。另有已知場景的生成器驗證路徑,用來隔離「資料辨識錯誤」與「3D 生成錯誤」;尚未驗證的模型功能不列入已完成主流程。

先固定生成器,再接辨識

用已知 GLB 反推結構資料,逐節點比對生成結果;生成器穩定後,才替換前端辨識輸入。

取捨:要先準備對照資料,但能縮小問題範圍;單一參考場景正確不代表所有格局都正確。

幾何求解處理可驗證限制

用確定的配置條件處理擺放,檢查重疊及越界,保留每個失敗原因。

取捨:通過規則不代表配置美觀或使用舒適,還需要人工檢視與更完整需求。

量測後才加入問卷門檻

把不同用途套到房間資料,觀察家具何時放不下,避免只憑直覺決定面積限制。

取捨:房間形狀、門的位置與依附家具都會影響結果;單一面積值不足以描述全部限制。

04 / DEEP DIVE

兩個實作差異與內容

A兩條驗證路徑,拆開辨識與生成

A 路徑先比較已知場景與生成結果;B 路徑才加入自動辨識。當 B 出錯而 A 仍通過,就能優先檢查辨識產出的結構資料。

做法差異 · A把整條管線一次接上,最後只看 3D 是否正常。

本專案採用 · B生成器先有對照基準,再逐步替換輸入。

核心邏輯示意 · Python 風格偽程式碼,含說明註解;非原始碼節錄
# 示意:先驗證生成器,座標與尺寸容差為 1 mm
for expected, actual in paired_nodes:
    assert expected.name == actual.name
    assert max_error(expected.position, actual.position) <= 0.001
    assert max_error(expected.size, actual.size) <= 0.001
# 生成驗證通過後,再加入辨識輸入的回歸案例

驗證的是配對節點的名稱、位置與尺寸。它不能直接證明辨識準確,也不表示材質或每個像素完全相同。

B不是量到數字,就應該變成規則

面積掃描產生 2,453 筆結果,但只採納有足夠反例支持的門檻。像餐椅依附餐桌,若餐桌已放不下,不能再把餐椅失敗誤解成獨立的面積問題。

做法差異 · A每種家具都設定一個最小面積,容易重複限制。

本專案採用 · B檢查失敗原因及樣本數,只保留有證據的門檻。

核心邏輯示意 · Python 風格偽程式碼,含說明註解;非原始碼節錄
# 示意:依附其他家具的品項,不獨立推導面積門檻
if item.depends_on_anchor:
    return no_independent_threshold
# 候選門檻以下至少三個失敗房間,且沒有成功反例
smaller = rooms_below(candidate_area)
if len(smaller) >= 3 and all_failed(smaller):
    return candidate_area
return insufficient_evidence

這是門檻判斷的簡化示意。實際採納還要分析依附關係與房間形狀;證據不足時,保留未定比硬填數字更有用。

05 / TROUBLESHOOTING

遇到的問題

面積一樣,卻不一定放得下一樣的家具

發現:狹長房與接近方形的房間可能面積相同,可用牆長和通行空間卻不同。

排查與處理:回看失敗案例,區分面積、形狀與依附物件的影響。沒有把全部候選門檻強行寫入問卷。

問卷有選項,不代表求解器有使用

發現:部分回答僅保留給後續 Agent,尚未影響現行擺放。

排查與處理:將輸入的使用者與實際消費端標示清楚,讓「目前不影響擺放」可被看見,避免介面承諾超過功能。

06 / IMPACT & TAKEAWAYS

成果

16 組候選門檻,最後採納 6 組

這是決策結果,不是成功率;依附關係與不足的證據,都是不寫入門檻的理由。

以下為 2026 年 9 月整理的歷史開發紀錄;數據依各自的樣本與量測情境解讀,並非即時統計。

331 個物件

生成器的對照範圍

已知參考場景逐節點比對,位置與尺寸容差 0.001 公尺。這是生成器驗證,不是任意平面圖的辨識準確率。

16 → 6 組

量測後採納的門檻

由 2,453 筆量測得到 16 組候選,只採納 6 組。捨棄不可靠門檻,減少把依附關係錯當面積限制的機會。

20 / 20 張

配置規則回歸樣本

歷史外部平面圖測試皆無已定義的配置違規;不等於所有家具都成功放入,也不等於使用者滿意度 100%。

回顧

最大的收穫是能區分「已驗證」與「還不知道」。面積只是其中一個變數;下次我會更早記錄失敗原因、形狀特徵與每個問卷欄位的實際效果。

07 / ROADMAP

未來展望

以下是依目前限制整理的後續方向,尚未完成,也尚未排定時程。

待規劃 · 01

以形狀與可用牆長補足面積

除了房間面積,加入長寬比、門窗占用和連續可用牆長,重新檢查哪些條件真正影響擺放。

怎麼確認有改善:保留原本 20 張回歸圖,另外加入狹長與不規則房型;逐類統計誤擋與漏擋。

待規劃 · 02

補齊問卷到配置的可追蹤關係

逐題定義回答會改變哪個條件;尚無實作的回答繼續清楚標示,不先假設模型已經理解。

怎麼確認有改善:用相同格局、只改一個回答的對照案例,確認配置變化符合預期。

待規劃 · 03

驗證模型流程與可公開素材

真實模型的回應品質另做小規模驗證;示範畫面改用自製或授權明確的素材,與私有參考資料分開。

怎麼確認有改善:記錄模型版本、成本、失敗類型與幾何驗證結果,再決定是否接入主要操作流程。