L'Intégration de GLM-OCR dans les Flux de Travail du BTP
La gestion des matériaux dans les projets de génie civil repose souvent sur une conversion manuelle d'informations visuelles vers des formats structurés. Cette tâche présente un risque élevé d'erreur humaine et consomme un temps précieux sur les chantiers. L'utilisation de modèles de vision avancés permet de transformer cette opération fastidieuse en un processus automatisé.
Le modèle GLM-OCR se distingue par sa capacité à comprendre la sémantique des documents complexes. Contrairement aux solutions OCR classiques qui se limitent à la reconnaissance de caractères, ce moteur analyse la disposition spatiale du contenu. Il est particulièrement efficace pour extraire des tableaux techniques contenant des spécifications techniques, des quantités et des unités de mesure à partir de schémas d'architecture ou de métrés.
Configuration et Mise en Production Rapide
Pour déployer la solution dans un environnement local ou sur serveur, le processus nécessite une préparation minimaliste de l'environnement logiciel.
Ressources Système Requises
- Environnement exécutif : Python 3.10 ou version ultérieure recommandée.
- Accès au terminal pour l'interaction avec les scripts de démarrage.
Déploiement du Serveur
Une fois les dépendances installées, initiez le service d'inférence en exécutant le script de lancement dédié. Celui-ci gère l'allocation des ressources GPU et charge les poids du modèle en mémoire.
# Changement vers le répertoire racine du projet
cd /opt/GLM-OCR
# Lancement du démon
./start_inference_service.sh
Le temps d'initialisation varie selon la puissance matérielle disponible, généralement entre une et deux minutes pour le chargement complet du modèle. Une fois prêt, le service écoutera sur le port défini par défaut.
Vérification de l'état du service
Avant d'envoyer des requêtes, confirmez que le serveur est accessible :
- Vérifiez les logs de sortie pour s'assurer qu'il n'y a pas d'erreurs de chargement.
- Sondez le port actif avec :
sudo netstat -tlnp | grep [PORT]. - Ouvrez l'interface utilisateur graphique via votre navigateur web.
Extraction de Données via Interface Utilisateur
L'outil propose une interface visuelle permettant de tester rapidement les capacités de reconnaissance sans écrire de code. Pour les besoins spécifiques comme l'extraction de listes de matériel :
Paramétrage des Prompts
La précision de l'extraction dépend fortement de la formulation de l'instruction envoyée au modèle. Il est crucial de définir explicitement les champs attendus.
Tableau : Identifiez tous les éléments listés ci-dessous et renvoyez-les sous forme de tableau structuré :
- Nom du matériau
- Désignation technique (diamètre, classe, etc.)
- Unité de mesure
- Quantité totale
- Observations spéciales
Analyse des Résultats
Le moteur retourne généralement des données au format Markdown ou JSON. Un exemple de sortie typique incluant les colonnes nécessaires ressemble à ceci :
| Matière | Spécification | Unité | Qté | Note |
|---|---|---|---|---|
| Acier laminé | Diamètre 12mm | kg | 500 | Livré le 15/10 |
| Béton prêt à l'emploi | C25/30 | m³ | 12 | Avec adjuvant |
Ces données peuvent être directement copiées vers des feuilles de calcul ou importées via des connecteurs ETL.
Implémentation Automatisée via API Python
Pour des volumes importants ou une intégration système, l'accès programmatique via REST est la méthode privilégiée.
Initialisation de la Client
Assurez-vous d'avoir installé la librairie cliente nécessaire avant d'exécuter le script.
pip install gradio-client
Fonction d'Extraction Unique
Voici un exemple d'intégration modifié pour traiter une image spécifique et retourner les résultats bruts.
import requests
import json
class ExtracteurPlansBTP:
def __init__(self, endpoint_url):
self.api_base = f"{endpoint_url}/predict"
def extraire_champs_cle(self, chemin_image, instructions=None):
"""
Déclenche l'analyse OCR sur une image de plan.
Paramètres:
chemin_image (str): Chemin absolu ou URL vers le fichier.
instructions (str): Prompt textuel guidant l'extraction.
Retourne:
dict ou str: Résultat brut retourné par l'API.
"""
payload = {
"image_path": chemin_image,
"prompt_text": instructions or "Extraire les lignes de nomenclature du tableau."
}
# Remplacer 'client.predict' par un appel HTTP direct si nécessaire
# Ici on simule la structure d'appel standard
response = requests.post(self.api_base, data=payload)
if response.status_code == 200:
return response.text
raise Exception(f"Echec de l'API : {response.status_code}")
# Utilisation
service_btp = ExtracteurPlansBTP("http://192.168.1.50:7860")
resultat = service_btp.extraire_champs_cle(
"/données/champ_A/plans/nomenclature_01.png",
"Identifier: Matière, Taille, Unité, Quantité, Remarques"
)
Gestion de Traitements Massifs
Lorsqu'un dossier contient plusieurs variantes de plans, un script parcourant le filesystem permet de centraliser les données. Ce script utilise os pour scanner les fichiers et sauvegarde le cumul des extractions dans un seul fichier Excel.
import os
from pandas import DataFrame
import json
def traiter_dossier_entier(root_dir):
donnees_globales = []
for nom_fichier in os.listdir(root_dir):
chemin_complet = os.path.join(root_dir, nom_fichier)
if nom_fichier.endswith('.png') or nom_fichier.endswith('.jpg'):
print(f"Traitement en cours : {nom_fichier}")
try:
res_brut = service_btp.extraire_champs_cle(chemin_complet)
# Simulation de parsing JSON si l'API retourne du JSON
if isinstance(res_brut, str):
try:
row_data = json.loads(res_brut)
row_data['source'] = nom_fichier
donnees_globales.append(row_data)
except json.JSONDecodeError:
print(f"Parsing échoué pour {nom_fichier}, texte brut conservé.")
except Exception as e:
print(f"Erreur critique sur {nom_fichier}: {str(e)}")
if donnees_globales:
df_sortie = DataFrame(donnees_globales)
df_sortie.to_excel("./rapport_final_matériaux.xlsx", index=False)
print("Fichier généré avec succès.")
else:
print("Aucune donnée récupérable.")
if __name__ == "__main__":
path_source = "./images_plans/"
traiter_dossier_entier(path_source)
Optimisation et Fiabilité
Pour garantir une qualité optimale des données extraites, plusieurs facteurs techniques doivent être pris en compte lors du paramétrage du pipeline.
Préprocessing Image
Les plans scannés sont souvent imparfaits. Appliquer un redressement perspectif ou augmenter le contraste avant l'envoi à l'API peut améliorer la lisibilité des zones de petite taille.
Gestion des Erreurs de Parsing
Les structures de tableaux ne sont pas toujours uniformes. Le script de récupération doit contenir des vérifications de type rigoureuses. Par exemple, vérifier que le champ 'Quantité' correspond bien à une valeur numérique valide.
Intégration Systémique
Les données structurées obtenues s'insèrent facilement dans des bases SQL ou des ERP existants via des connexions standards. Cela permet d'automatiser les commandes d'approvisionnement directement après extraction sans intervention manuelle intermédiaire.
Amélioration Continue
Si certaines erreurs persistent sur des termes techniques spécifiques (ex: nuances d'acier, normes ISO), il est possible d'ajuster le prompt système pour inclure un dictionnaire de référence ou de fine-tuner le modèle sur des exemples locaux du bâtiment.