feat(cli): add Windows single-file anonymization entrypoint
CLI de production sans GUI pour anonymiser un fichier unique, validé GO par Qwen (revue indépendante contrat/packaging/modèles) sur de vrais PDF. - scripts/anonymize_cli.py (NOUVEAU) : contrat positionnel `Anonymisation-CLI.exe <fichier> <dossier_sortie>` (+ --out compat), chemins espaces/accents, codes retour 0/1/2/3/4. Chargement modèles fail-closed : CamemBERT-bio ONNX OBLIGATOIRE (code 3 si absent, aucun mode dégradé silencieux) ; EDS-Pseudo + GLiNER optionnels, tracés au log ; --no-ner = regex seul assumé. Résolution _MEIPASS frozen alignée sur launcher.py. Sortie burn raster identique GUI v5. - anonymisation_cli_onefile.spec : entrypoint basculé vers anonymize_cli.py (le harnais perf D-19 anonymize_batch_cli.py reste hors build). - docs/build-windows-oneclick.md : section « CLI Windows (sans GUI) » (build, usage, codes retour, modèles, limitations). Tests Linux (vrais PDF) : --help OK, fichier manquant→2, --no-ner accents→0, NER complet→0 (CamemBERT-bio + EDS-Pseudo chargés), modèle déplacé→3. Build/smoke Windows à suivre (séparé). Commit CLI-only strict, distinct du P0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -71,6 +71,81 @@ powershell -ExecutionPolicy Bypass -File .\scripts\build_windows_oneclick.ps1 -S
|
||||
- le build doit être lancé depuis Windows
|
||||
- le modèle ONNX embarqué requis doit exister localement dans :
|
||||
`models\camembert-bio-deid\onnx\model.onnx`
|
||||
- limitation MVP frozen : voir `docs/limitations-frozen-mvp.md` pour les moteurs
|
||||
effectivement embarqués, notamment l'absence d'EDS-Pseudo dans le paquet MVP.
|
||||
|
||||
## CLI Windows (sans GUI) — fichier unique
|
||||
|
||||
En plus de la GUI, un exécutable **CLI de production** permet d'anonymiser un
|
||||
fichier (ou un dossier) en ligne de commande, sans interface graphique.
|
||||
|
||||
- entrypoint : `scripts/anonymize_cli.py`
|
||||
- spec PyInstaller : `anonymisation_cli_onefile.spec`
|
||||
- exécutable produit : `dist\Anonymisation-CLI.exe` (ne remplace pas
|
||||
`Anonymisation.exe`)
|
||||
|
||||
### Build CLI
|
||||
|
||||
Sur la machine Windows de build, dans le venv de build :
|
||||
|
||||
```powershell
|
||||
pyinstaller --noconfirm --clean anonymisation_cli_onefile.spec
|
||||
```
|
||||
|
||||
Le `.spec` embarque les mêmes ressources que la GUI : `config\`, `data\`,
|
||||
`models\camembert-bio-deid\onnx\`, `detectors\`, `assets\`, plus les
|
||||
hiddenimports NER / docTR / ONNX. Le modèle ONNX obligatoire
|
||||
`models\camembert-bio-deid\onnx\model.onnx` doit exister localement avant le
|
||||
build (sinon il ne sera pas embarqué et le CLI échouera au lancement).
|
||||
|
||||
### Utilisation
|
||||
|
||||
```powershell
|
||||
Anonymisation-CLI.exe "C:\chemin\document.pdf" "C:\chemin\sortie"
|
||||
Anonymisation-CLI.exe --help
|
||||
```
|
||||
|
||||
- argument 1 : fichier unique existant (ou dossier parcouru récursivement) ;
|
||||
- argument 2 : dossier de sortie (créé si absent) ; `--out` reste accepté ;
|
||||
- chemins avec espaces et accents supportés ;
|
||||
- options : `--no-ner` (regex seul), `--gliner` (vote croisé optionnel),
|
||||
`--limit N`, `--config <dictionnaires.yml>`.
|
||||
|
||||
Sorties produites dans le dossier demandé (identiques à la GUI v5, burn raster) :
|
||||
`<doc>.redacted_raster.pdf`, `<doc>.pseudonymise.txt`, `<doc>.audit.jsonl`.
|
||||
Un log lisible est écrit à côté de l'EXE : `anonymisation_cli.log`.
|
||||
|
||||
### Codes retour
|
||||
|
||||
| Code | Signification |
|
||||
|------|---------------|
|
||||
| `0` | anonymisation terminée, sortie produite |
|
||||
| `1` | erreur de traitement (exception) |
|
||||
| `2` | entrée manquante (fichier/dossier introuvable, aucun document) |
|
||||
| `3` | modèle OBLIGATOIRE absent / illisible (fail-closed, pas de mode dégradé) |
|
||||
| `4` | sortie non produite (quarantaine résiduelle ou PDF absent) |
|
||||
|
||||
### Modèles (dernière version du moteur)
|
||||
|
||||
- **OBLIGATOIRE** : CamemBERT-bio ONNX (`models\camembert-bio-deid\onnx\model.onnx`).
|
||||
Embarqué dans le build. S'il est absent/illisible et que le NER est demandé,
|
||||
le CLI **échoue clairement (code 3)** — il n'affiche jamais « OK » en mode
|
||||
dégradé silencieux.
|
||||
- **OPTIONNELS** : EDS-Pseudo, GLiNER. Chargés best effort et **tracés dans le
|
||||
log** ; leur absence est signalée explicitement, jamais masquée. ⚠️ EDS-Pseudo
|
||||
peut ne pas être embarqué dans le paquet MVP frozen — voir
|
||||
`docs/limitations-frozen-mvp.md`. Dans ce cas le log indique
|
||||
« EDS-Pseudo (optionnel) INDISPONIBLE » et le traitement se poursuit avec
|
||||
CamemBERT-bio ONNX (impact qualité faible, validé en bêta interne).
|
||||
- `--no-ner` : mode regex seul **assumé** par l'opérateur (aucun modèle
|
||||
obligatoire), à n'utiliser qu'en connaissance de cause.
|
||||
|
||||
### Limitations CLI frozen
|
||||
|
||||
- pas d'EDS-Pseudo garanti dans le MVP frozen (cf. ci-dessus) ;
|
||||
- pas de dépendance internet : tous les modèles déclarés obligatoires sont
|
||||
locaux/embarqués ;
|
||||
- rastérisation séquentielle en mode frozen (cf. limitations GUI).
|
||||
|
||||
## Blocage Windows / SmartScreen
|
||||
|
||||
|
||||
Reference in New Issue
Block a user