# Scan-to-BIM Automatique : La Transformation Numérique

> Automatisez la conversion de nuages de points vers maquette BIM IFC. Tutoriel Python sur la détection de murs, l'extraction de lignes 2D et IfcOpenShell.

- Adresse : https://fr.learngeodata.eu/blog/scan-to-bim-python-automatique
- Rubrique : Articles techniques
- Langue : fr
- Auteur : Dr. Florent Poux (https://fr.learngeodata.eu/formateur/florent-poux)
- Éditeur : 3D Geodata Academy (organisme de formation, France)
- Index du site pour les assistants : https://fr.learngeodata.eu/llms.txt
- Publié le 2025-12-10

---
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.

## 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.

```
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.

```
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
```

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.

## 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.

```
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.

### Construisez votre propre logiciel Scan-to-BIM

Dans le cursus Elite, nous codons ensemble un software complet avec Interface Graphique pour automatiser ce processus.

[Le programme et les tarifs →](https://fr.learngeodata.eu/tarifs)
