# đŸȘš 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 ```bash git clone https://git.linaster.online/vincent.morisseau/geotech.git cd geotech ``` ### 2. Installer les dĂ©pendances ```bash 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 ! 1. **Copier le fichier d'exemple** : ```bash cp .env.example .env ``` 2. **Éditer le fichier `.env`** et remplir vos clĂ©s API Azure : ```bash nano .env # ou utilisez votre Ă©diteur prĂ©fĂ©rĂ© ``` 3. **Remplir les variables suivantes** dans le fichier `.env` : ```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 1. **CrĂ©er une ressource dans le [portail Azure](https://portal.azure.com)** - Home → Create a resource - IA + Machine Learning → Document Intelligence (Form Recognizer) - Choisir la rĂ©gion (ex: East US 2) - Pricing tier : S0 (Standard) 2. **RĂ©cupĂ©rer les credentials** - Aller dans votre ressource → Keys and Endpoint - Copier `KEY 1` et `Endpoint` - Coller ces valeurs dans votre fichier `.env` #### Azure OpenAI 1. **Demander l'accĂšs Ă  Azure OpenAI** (si nĂ©cessaire) - [Formulaire de demande d'accĂšs](https://azure.microsoft.com/en-us/products/ai-services/openai-service) - DĂ©lai : 24-48h gĂ©nĂ©ralement 2. **CrĂ©er une ressource Azure OpenAI** - Home → Create a resource → Azure OpenAI - Choisir la rĂ©gion (recommandĂ© : Sweden Central ou East US 2) 3. **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$/page - `gpt-4o` : Meilleur rapport qualitĂ©/prix, 0,042$/page - `gpt-4` : Plus cher mais plus puissant, 0,21$/page 4. **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 ```bash # 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 ```bash # 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 : 1. Placer les PDFs de test dans `examples/` 2. Placer les rĂ©sultats attendus dans `output_man/` (format : `1_layers.json` pour `1.pdf`) 3. Lancer le test : ```bash make test-optimizer ``` ### Test des connexions Azure ```bash 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 : ```json { "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 source - `extraction_date` : Date et heure de l'extraction - `pages` : Nombre de pages traitĂ©es - `layer_count` : Nombre de couches extraites - `extraction_time_seconds` : DurĂ©e de l'extraction - **layers** : Liste des couches gĂ©ologiques - `page` : NumĂ©ro de page oĂč apparaĂźt la couche - `depth_start` : Profondeur de dĂ©but en mĂštres - `depth_end` : Profondeur de fin en mĂštres - `description` : 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 `.env` existe - VĂ©rifier que toutes les variables sont remplies dans `.env` - S'assurer d'avoir copiĂ© `.env.example` vers `.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 ```python # 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` : ```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 ```bash # 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 `.env`** contenant vos clĂ©s API - Le fichier `.env` est automatiquement ignorĂ© par Git - Utilisez `.env.example` comme 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