66 lines
2.5 KiB
Markdown
66 lines
2.5 KiB
Markdown
## 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/<folderHash>/` (entrées) et `cache/<folderHash>/` (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/<hash>/<fileHash>.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/<hash>/results`
|
||
- `hasPending` true si traitements restants
|
||
- `pending[].timestamp` récent
|
||
- `results[].document.fileName` présent
|
||
- Fichiers cache: apparition de `cache/<hash>/<fileHash>.json`
|
||
|
||
### Signes de blocage
|
||
|
||
- `hasPending: true` > 10 min sans nouveaux JSON dans `cache/<hash>/`
|
||
- 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`.
|