Scan-to-BIM Automatique : La Transformation Numérique

Du nuage de points brut à la maquette IFC structurée : automatiser le travail du modélisateur.
Avancé
75 min
OpenCV, IfcOpenShell, Shapely
Cinq boîtes orientées en fil de fer, sans les points qui les ont produites : ce qui reste d'un scan une fois vectorisé
L'aboutissement de la chaîne : des volumes orientés et mesurés, que l'on peut écrire en IFC. Les points ont disparu, la géométrie reste.
"Le modélisateur BIM passe 70% de son temps à tracer des murs sur des coupes de nuages de points. Notre mission : réduire ce temps à zéro grâce à des algorithmes de vision par ordinateur."

1. La Stratégie de la "Slice" (Coupe)

Détecter des murs directement en 3D est complexe et coûteux. La ruse de l'ingénieur consiste à projeter le problème en 2D. En extrayant une tranche (slice) du bâtiment à une hauteur stratégique (ex: 1.5m, coupant murs et fenêtres), nous transformons un problème 3D en une image 2D binaire.

slicer.py
import numpy as np

def create_floor_slice(pcd, height_min=1.2, height_max=1.8):
    # Filtre Pass-Band sur Z
    points = np.asarray(pcd.points)
    mask = (points[:, 2] > height_min) & (points[:, 2] < height_max)
    slice_pcd = pcd.select_by_index(np.where(mask)[0])
    
    # Projection 2D (écrasement Z)
    grid, transform = points_to_raster(slice_pcd, pixel_size=0.05)
    return grid # Image binaire (0 ou 255)

Cette étape de "Rasterization" est critique. Une résolution de pixel de 5cm est un bon compromis pour détecter l'épaisseur des murs standards.

2. Transformée de Hough : Détecter les Lignes

Une fois en image binaire, nous utilisons la Transformée de Hough Probabiliste (disponible dans OpenCV) pour trouver des segments de ligne alignés.

line_detector.py
import cv2

def find_walls(image_grid):
    lines = cv2.HoughLinesP(
        image_grid, 
        rho=1,              # Résolution distance (1 pixel)
        theta=np.pi/180,    # Résolution angulaire (1 degré)
        threshold=50,       # Vote minimum
        minLineLength=30,   # Longueur min (ex: 1.5m)
        maxLineGap=10       # Gap autorisé pour fusionner
    )
    return lines
Un semis de points en plan, duquel se dégagent deux segments droits formant un angle : les deux murs reconstruits mur A mur B angle rentrant l'intersection donne le coin, pas les points eux-mêmes
Ce que produit la vectorisation : deux segments, et le coin qu'ils définissent. Le sommet ne vient pas d'un point mesuré, il vient de l'intersection des deux droites ajustées. C'est cette différence qui rend le résultat exploitable en IFC, où un mur est une entité et non un nuage.

3. Reconstruction topologique : des lignes aux murs

Hough nous donne des segments "spaghettis". Nous devons les nettoyer : fusionner les colinéaires, connecter les coins perpendiculaires et fermer les boucles. C'est ici que la logique géométrique entre en jeu.

Astuce: Utilisez la bibliothèque Shapely pour bufferiser les lignes et faire des opérations booléennes (Union) pour créer des polygones de murs propres.

4. Génération IFC avec IfcOpenShell

Enfin, nous instancions des objets IfcWallStandardCase. Contrairement à un mesh "dumb", un mur IFC possède une sémantique, une épaisseur, une hauteur et une composition de matériaux.

ifc_builder.py
import ifcopenshell
from ifcopenshell.api import run

# Création projet vierge
model = ifcopenshell.file()
project = run("root.create_entity", model, ifc_class="IfcProject", name="AutoBIM")

# Création d'un mur à partir des coords p1, p2
wall = run("root.create_entity", model, ifc_class="IfcWall")
run("geometry.edit_object_placement", model, product=wall)
# ... extrusion profile definition ...

L'API ifcopenshell.api (introduite récemment) simplifie grandement la création d'entités valides par rapport à l'ancienne méthode bas-niveau.

Synthèse : Les Limites de l'Automatisme

Étape Difficulté Taux de Succès Auto
Murs Droits (Manhattan World) Faible 95%
Murs Courbes Moyenne 60%
Ouvertures (Portes/Fenêtres) Haute 40%
Réseaux MEP Extrême 10%

Le Scan-to-BIM automatique n'est pas une boîte noire magique, mais un assistant puissant qui pré-mâche 80% de la géométrie simple.

Sur ce sujet : Le module jumeaux numériques et Scan-to-BIM.

Construisez votre propre logiciel Scan-to-BIM

Dans le cursus Elite, nous codons ensemble un software complet avec Interface Graphique pour automatiser ce processus.

Recevoir le guide gratuit Passer le test (10 min)

Le programme et les tarifs →