## Objet Décrire le pipeline de traitement des images et comment diagnostiquer un blocage. ### Contexte - Backend: Node.js/Express, OCR: tesseract.js, prétraitement: sharp, PDF: pdf-parse. - Répertoires: `uploads//` (entrées) et `cache//` (résultats JSON). - Métadonnées ignorées: `folder.json`, `*.meta`. ### Pipeline 1. Découverte des fichiers (ignore métadonnées) 2. Prétraitement image (grayscale, normalisation, contraste, débruitage) 3. OCR (multi-pass `ocrb+eng`, fallback `eng`) 4. Extraction PDF (pdf-parse ou OCR si scanné) 5. NER/Classification (règles personnes/entreprises/adresses, type doc) 6. Écriture JSON dans `cache//.json` ### Délais attendus - JPEG ~1 Mo: 45–120 s (par image) - PDF texte: 0.2–2 s; PDF scanné: 30–90 s/page - 2 images: 3–6 min au total (normal) ### Vérifications rapides - Santé backend: `GET /api/health` → `{ status: "OK" }` - État dossier: `GET /api/folders//results` - `hasPending` true si traitements restants - `pending[].timestamp` récent - `results[].document.fileName` présent - Fichiers cache: apparition de `cache//.json` ### Signes de blocage - `hasPending: true` > 10 min sans nouveaux JSON dans `cache//` - Logs erreurs répétées (ex: type de fichier non supporté) - Port 3001 occupé (EADDRINUSE) ### Actions correctives - Redémarrage simple: - `pkill -9 -f 'node.*backend/server.js' || true` - `nohup node backend/server.js > backend.log 2>&1 &` - Vérifier l’ignorance des métadonnées dans `backend/server.js` - `if (file === 'folder.json' || file.endsWith('.meta')) { continue }` - Recalcul pending: relancer l’endpoint results puis vérifier `pending` ### Qualité OCR CNI (note) - Multi-pass Tesseract, amélioration d’image, regex adresse renforcée, MRZ si présent - Cas cible: détecter `CANTU` (nom) et `Nicolas` (prénom) selon qualité du scan ### État courant (vérifié) - Backend UP; dossier `7d99a85daf66a0081a0e881630e6b39b` - `results`: 3 fichiers traités; `pending`: 0 (suite correctif normalisation) ### Correctif appliqué (normalisation Sharp) - Problème: erreurs OCR « Expected number between 1 and 100 for upper but received 0.9 » dues à `normalize({ lower: 0.1, upper: 0.9 })`. - Cause: Sharp attend des percentiles entiers 1..100 pour `lower`/`upper`. - Correctif: `backend/enhancedOcr.js` → `normalize({ lower: 10, upper: 90 })`. - Effet: fin des boucles d’erreurs; `hasPending: false`.