""" !!! FICHIER OBSOLÈTE !!! Ce fichier est maintenu uniquement pour la compatibilité. Veuillez utiliser les modules dans utils/ocr_brut/ à la place. """ import pytesseract import cv2 import numpy as np import os from pathlib import Path from PIL import Image from langdetect import detect import re from utils.ocr_brut.ocr_preprocessor import preprocess_image_with_profile # ⬇️ PARAMÈTRES CENTRAUX D'ACTIVATION ⬇️ USE_PREPROCESSING = True # Active le prétraitement de l'image via ocr_preprocessor.py USE_TEXT_CORRECTION = True # Corrige les mots tronqués après OCR SAVE_DEBUG_OUTPUT = True # Sauvegarde image + texte dans debug_ocr/ AUTO_DETECT_LANGUAGE = True # Détecte automatiquement la langue # Paramètres Tesseract optimaux selon tests OCR_DEFAULT_PSM = 11 # Page segmentation mode 11 (sparse text) OCR_DEFAULT_OEM = 3 # OCR Engine mode 3 (default, based on what is available) OCR_DEFAULT_PROFILE = "document" # Profil de prétraitement optimal selon tests # Complétion de mots tronqués (rudimentaire mais utile) def completer_mots_tronques(texte): lignes = texte.splitlines() lignes_corrigees = [] for ligne in lignes: if ligne.strip().endswith("-"): ligne = ligne.strip()[:-1] lignes_corrigees.append(ligne) return "\n".join(lignes_corrigees) # Détection de langue automatique (si activée) def detect_language_tesseract(image_cv): try: text_sample = pytesseract.image_to_string(image_cv, config="--psm 6") lang = detect(text_sample) return { "fr": "fra", "en": "eng" }.get(lang, "fra+eng") except: return "fra+eng" # OCR principal def extraire_texte(image_path, lang="auto"): # Vérification de l'existence de l'image if not os.path.exists(image_path): print(f"[OCR] Image non trouvée: {image_path}") return "", None # Prétraitement de l'image avec le profil optimal if USE_PREPROCESSING: img_optimized = preprocess_image_with_profile(image_path, profile_name=OCR_DEFAULT_PROFILE) else: img_optimized = Image.open(image_path) # Détection de langue ocr_lang = lang if lang == "auto" and AUTO_DETECT_LANGUAGE: ocr_lang = detect_language_tesseract(img_optimized) if ocr_lang == "auto": ocr_lang = "fra+eng" # OCR avec paramètres optimaux config = f"--psm {OCR_DEFAULT_PSM} --oem {OCR_DEFAULT_OEM} -l {ocr_lang}" texte = pytesseract.image_to_string(img_optimized, config=config) # Correction des mots tronqués if USE_TEXT_CORRECTION: texte_corrige = completer_mots_tronques(texte) if len(texte_corrige) >= len(texte) * 0.9: texte = texte_corrige # Sauvegarde debug (si activée) if SAVE_DEBUG_OUTPUT and texte: try: debug_dir = "debug_ocr" os.makedirs(debug_dir, exist_ok=True) image_name = Path(image_path).stem # Conversion si image PIL if isinstance(img_optimized, Image.Image): img_optimized = np.array(img_optimized) if img_optimized.ndim == 3 and img_optimized.shape[2] == 3: img_optimized = cv2.cvtColor(img_optimized, cv2.COLOR_RGB2BGR) elif img_optimized.ndim == 3 and img_optimized.shape[2] == 4: img_optimized = cv2.cvtColor(img_optimized, cv2.COLOR_RGBA2BGR) if isinstance(img_optimized, np.ndarray): cv2.imwrite(f"{debug_dir}/optimized_{image_name}.png", img_optimized) with open(f"{debug_dir}/ocr_{image_name}.png.txt", "w", encoding="utf-8") as f: f.write(texte) except Exception as e: print(f"[OCR DEBUG] Erreur de sauvegarde debug: {e}") return texte, img_optimized # Raccourci rapide pour juste récupérer le texte en français def extraire_texte_fr(image_path): texte, _ = extraire_texte(image_path, lang="fra") return texte