🪨 Geotechnical Layer Extractor
Un outil d'extraction automatique des couches géologiques à partir de logs de forage au format PDF, utilisant l'intelligence artificielle pour analyser et structurer les données géotechniques.
🎯 Objectif
Ce projet permet d'extraire automatiquement les informations de couches géologiques (profondeurs et descriptions) depuis des documents PDF de logs de forage, souvent complexes et mal structurés. Il utilise Azure Document Intelligence pour l'OCR et GPT-4 pour l'analyse sémantique du contenu.
✨ Fonctionnalités
- Extraction OCR avancée : Utilise Azure Document Intelligence pour extraire texte et tableaux
- Analyse par IA : GPT-4 analyse le contenu pour identifier les couches géologiques
- Gestion multi-pages : Traite correctement les documents de plusieurs pages
- Détection de tableaux : Identifie et parse les tableaux complexes
- Déduplication intelligente : Évite les doublons entre pages
- Optimisation de prompts : Outil pour améliorer automatiquement les prompts
- Export JSON structuré : Format de sortie standardisé et exploitable
📋 Prérequis
- Python 3.8 ou supérieur
- Compte Azure avec accès à :
- Azure Document Intelligence (Form Recognizer)
- Azure OpenAI avec accès GPT-4
🚀 Installation
1. Cloner le repository
git clone https://git.linaster.online/vincent.morisseau/geotech.git
cd geotech
2. Installer les dépendances
make setup
Cela va :
- Créer un environnement virtuel Python
- Installer tous les packages nécessaires
- Créer les dossiers requis
3. Configuration des variables d'environnement
⚠️ IMPORTANT : Les clés API ne doivent jamais être commitées dans Git !
- Copier le fichier d'exemple :
cp .env.example .env
- Éditer le fichier
.envet remplir vos clés API Azure :
nano .env # ou utilisez votre éditeur préféré
- Remplir les variables suivantes dans le fichier
.env:
# Azure Document Intelligence
AZURE_DOC_ENDPOINT=https://your-resource.cognitiveservices.azure.com/
AZURE_DOC_KEY=your-document-intelligence-key-here
# Azure OpenAI
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
AZURE_OPENAI_KEY=your-openai-key-here
AZURE_DEPLOYMENT=gpt-4o-mini # ou gpt-4o, gpt-4, etc.
API_VERSION=2024-12-01-preview
⚠️ Note de sécurité : Le fichier .env est automatiquement ignoré par Git (via .gitignore) pour protéger vos clés API.
4. Obtenir les clés Azure
Azure Document Intelligence
-
Créer une ressource dans le portail Azure
- Home → Create a resource
- IA + Machine Learning → Document Intelligence (Form Recognizer)
- Choisir la région (ex: East US 2)
- Pricing tier : S0 (Standard)
-
Récupérer les credentials
- Aller dans votre ressource → Keys and Endpoint
- Copier
KEY 1etEndpoint - Coller ces valeurs dans votre fichier
.env
Azure OpenAI
-
Demander l'accès à Azure OpenAI (si nécessaire)
- Formulaire de demande d'accès
- Délai : 24-48h généralement
-
Créer une ressource Azure OpenAI
- Home → Create a resource → Azure OpenAI
- Choisir la région (recommandé : Sweden Central ou East US 2)
-
Déployer un modèle GPT
- Accéder à Azure OpenAI Studio depuis votre ressource
- Deployments → Create new deployment
- Choisir votre modèle :
gpt-4o-mini: Économique, 0,003$/pagegpt-4o: Meilleur rapport qualité/prix, 0,042$/pagegpt-4: Plus cher mais plus puissant, 0,21$/page
-
Récupérer les credentials
- Dans Azure OpenAI Studio → Deployments → View code
- Copier l'endpoint, la clé et le nom du déploiement
- Coller ces valeurs dans votre fichier
.env
5. Vérifier la configuration
# Test de connexion aux services Azure
make test
# Ou vérifier manuellement
python -c "from dotenv import load_dotenv; import os; load_dotenv(); print('✅ OK' if os.getenv('AZURE_DOC_KEY') else '❌ .env non configuré')"
📖 Utilisation
Extraction d'un seul PDF
# Extraction simple (sauvegarde dans output/document.json)
make single PDF=document.pdf
# Ou directement avec le script
python extract_single.py document.pdf
# Spécifier un fichier de sortie custom
python extract_single.py document.pdf -o results/custom.json
# Avec formatage JSON lisible
python extract_single.py document.pdf --pretty
Optimisation des prompts
Pour améliorer la qualité d'extraction sur un ensemble de PDFs de test :
- Placer les PDFs de test dans
examples/ - Placer les résultats attendus dans
output_man/(format :1_layers.jsonpour1.pdf) - Lancer le test :
make test-optimizer
Test des connexions Azure
make test
📁 Structure du projet
geotechnical-extractor/
├── .env.example # Fichier d'exemple pour les variables d'environnement
├── .env # VOS clés API (ignoré par Git)
├── .gitignore # Fichiers à ignorer (inclut .env)
├── extract_single.py # Script principal d'extraction
├── prompt_optimizer.py # Optimiseur de prompts
├── requirements.txt # Dépendances Python
├── Makefile # Commandes simplifiées
├── README.md # Ce fichier
├── examples/ # PDFs de test pour l'optimiseur
│ ├── 1.pdf
│ ├── 2.pdf
│ └── ...
├── output_man/ # Résultats attendus (vérité terrain)
│ ├── 1_layers.json
│ ├── 2_layers.json
│ └── ...
└── output/ # Résultats générés
├── document.json
└── ...
📊 Format de sortie
Les résultats sont sauvegardés en JSON avec la structure suivante :
{
"metadata": {
"source_file": "/path/to/document.pdf",
"extraction_date": "2025-08-06T10:30:45.123456",
"extraction_method": "Azure Document Intelligence + GPT-4",
"pages": 6,
"layer_count": 12,
"extraction_time_seconds": 23.5
},
"layers": [
{
"page": 1,
"depth_start": 0.0,
"depth_end": 0.3,
"description": "Terre végétale, brun foncé, présence de racines"
},
{
"page": 1,
"depth_start": 0.3,
"depth_end": 2.5,
"description": "Argile limoneuse, gris-beige, plastique, humide"
}
]
}
Description des champs
-
metadata : Informations sur l'extraction
source_file: Chemin absolu du PDF sourceextraction_date: Date et heure de l'extractionpages: Nombre de pages traitéeslayer_count: Nombre de couches extraitesextraction_time_seconds: Durée de l'extraction
-
layers : Liste des couches géologiques
page: Numéro de page où apparaît la couchedepth_start: Profondeur de début en mètresdepth_end: Profondeur de fin en mètresdescription: Description complète du matériau
💰 Coûts estimés
Entre ~0,003€ et ~0,21€ par page selon le modèle.
Recommandation : Utilisez GPT-4o pour le meilleur rapport qualité/prix
🚨 Résolution des problèmes
"Missing Azure credentials"
- Vérifier que le fichier
.envexiste - Vérifier que toutes les variables sont remplies dans
.env - S'assurer d'avoir copié
.env.examplevers.env
"Resource not found"
- Vérifier que l'endpoint Azure est correct (avec ou sans
/final) - S'assurer que la ressource est déployée et active
"Invalid API key"
- Vérifier que vous utilisez la bonne clé
- Les clés Document Intelligence et OpenAI sont différentes
- Vérifier qu'il n'y a pas d'espaces dans les clés
"Model not found"
- Vérifier le nom exact du déploiement GPT dans
.env - S'assurer que le modèle est déployé dans votre région
- Le nom est sensible à la casse
Extraction incomplète
- Augmenter la limite de caractères dans le script
- Vérifier la qualité du PDF (scan lisible)
- Utiliser GPT-4o au lieu de GPT-4o-mini
Pages manquantes
- Le script traite maintenant jusqu'à 8000 caractères par page
- Les tableaux sont marqués avec
[TABLE DATA]pour une meilleure détection
🛠️ Personnalisation
Modifier les prompts
Les prompts sont définis dans la méthode get_prompts() des scripts. Vous pouvez les adapter selon vos besoins spécifiques.
Ajuster les limites
# Augmenter la limite de caractères par page
max_chars = 10000 # Au lieu de 8000
# Augmenter les tokens de réponse
max_tokens=6000 # Au lieu de 4000
Variables d'environnement supplémentaires
Vous pouvez ajouter dans votre .env :
# Optionnel : niveau de log
LOG_LEVEL=DEBUG # ou INFO, WARNING, ERROR
# Optionnel : taille des chunks pour les PDFs volumineux
CHUNK_SIZE=2 # Nombre de pages par chunk
Langues supportées
Les prompts actuels sont en français mais peuvent être traduits. Le système supporte tous les documents que Document Intelligence peut traiter.
🧹 Maintenance
# Nettoyer tous les fichiers générés
make clean
# Voir les informations système
make info
📈 Performances
- Temps moyen : 3-5 secondes par page
- Précision : ~85-95% selon la complexité du document
- Limite : PDFs jusqu'à 500 pages (limite Azure)
🔒 Sécurité
- Ne jamais committer le fichier
.envcontenant vos clés API - Le fichier
.envest automatiquement ignoré par Git - Utilisez
.env.examplecomme template pour partager la structure - Changez régulièrement vos clés API Azure
- Utilisez des variables d'environnement en production
📝 Licence
Ce projet est sous licence VCGI par Tom BLANCHETON.
🙏 Remerciements
- Azure Document Intelligence pour l'OCR de qualité
- OpenAI pour GPT-4
- La communauté géotechnique pour les retours et tests