Spaces:
Sleeping
Sleeping
File size: 12,969 Bytes
bff1348 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 | # Changelog — Picarones
Tous les changements notables de ce projet sont documentés dans ce fichier.
Le format suit [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/).
La numérotation de version suit [Semantic Versioning](https://semver.org/lang/fr/).
---
## [1.0.0] — Sprint 9 — 2025-03
### Ajouté
- `README.md` complet bilingue (français + anglais) avec badges CI, description des fonctionnalités, tableau des moteurs, variables d'environnement
- `INSTALL.md` — guide d'installation détaillé pour Linux (Ubuntu/Debian), macOS et Windows, incluant Tesseract, Pero OCR, Ollama, configuration des clés API, Docker
- `CHANGELOG.md` — historique des sprints 1 à 9
- `CONTRIBUTING.md` — guide pour contribuer : ajouter un moteur OCR, un adaptateur LLM, soumettre une PR
- `Makefile` — commandes `make install`, `make test`, `make demo`, `make serve`, `make build`, `make build-exe`, `make docker-build`, `make lint`, `make clean`
- `Dockerfile` — image Docker multi-étape basée sur Python 3.11-slim, Tesseract pré-installé, `CMD ["picarones", "serve", "--host", "0.0.0.0"]`
- `docker-compose.yml` — service Picarones + service Ollama optionnel (profil `ollama`)
- `.github/workflows/ci.yml` — pipeline GitHub Actions : tests sur Python 3.11/3.12, Linux/macOS/Windows, rapport de couverture
- `picarones.spec` — configuration PyInstaller pour générer des exécutables standalone (Linux, macOS, Windows)
- `picarones/__main__.py` — permet l'exécution via `python -m picarones`
- Version bumped à `1.0.0` dans `pyproject.toml` et `__init__.py`
- Extras PyPI `[llm]`, `[ocr-cloud]`, `[all]` dans `pyproject.toml`
- Tests Sprint 9 : `tests/test_sprint9_packaging.py` (30 tests)
### Modifié
- `pyproject.toml` : version 1.0.0, nouveaux extras, classifiers mis à jour, URLs projet ajoutées
---
## [0.8.0] — Sprint 8 — 2025-03
### Ajouté
- **eScriptorium** (`picarones/importers/escriptorium.py`)
- `EScriptoriumClient` : connexion par token API, listing projets/documents/pages, gestion de la pagination
- `import_document()` : import d'un document avec ses transcriptions comme corpus Picarones
- `export_benchmark_as_layer()` : export des résultats benchmark comme couche OCR nommée dans eScriptorium
- `connect_escriptorium()` : connexion avec validation automatique
- **Gallica API** (`picarones/importers/gallica.py`)
- `GallicaClient` : recherche SRU BnF par cote/titre/auteur/date/langue/type
- Récupération OCR Gallica texte brut (`f{n}.texteBrut`)
- Import IIIF Gallica avec enrichissement OCR comme vérité terrain de référence
- Métadonnées OAI-PMH (`/services/OAIRecord`)
- `search_gallica()`, `import_gallica_document()` — fonctions de commodité
- **Suivi longitudinal** (`picarones/core/history.py`)
- `BenchmarkHistory` : base SQLite horodatée par run, moteur, corpus, CER/WER
- `record()` depuis `BenchmarkResult`, `record_single()` pour imports manuels
- `query()` avec filtres engine/corpus/since/limit
- `get_cer_curve()` : données prêtes pour Chart.js
- `detect_regression()` / `detect_all_regressions()` : seuil configurable en points de CER
- `export_json()` — export complet de l'historique
- `generate_demo_history()` : 8 runs fictifs avec régression simulée au run 5
- **Analyse de robustesse** (`picarones/core/robustness.py`)
- 5 types de dégradation : bruit gaussien, flou, rotation, réduction de résolution, binarisation
- `degrade_image_bytes()` : Pillow (préféré) ou fallback pur Python
- `RobustnessAnalyzer.analyze()` : CER par niveau, seuil critique automatique
- `DegradationCurve`, `RobustnessReport`, `_build_summary()`
- `generate_demo_robustness_report()` : rapport fictif réaliste sans moteur réel
- **CLI Sprint 8**
- `picarones history` : historique avec filtres, détection de régression, export JSON, mode `--demo`
- `picarones robustness` : analyse de robustesse, barres ASCII, export JSON, mode `--demo`
- `picarones demo --with-history --with-robustness` : démonstration intégrée
- `picarones/importers/__init__.py` mis à jour pour exporter les nouveaux importeurs
### Tests
- `tests/test_sprint8_escriptorium_gallica.py` : 74 tests (eScriptorium, Gallica, CLI)
- `tests/test_sprint8_longitudinal_robustness.py` : 86 tests (history, robustesse, CLI)
- **Total** : 743 tests (anciennement 583)
---
## [0.7.0] — Sprint 7 — 2025-02
### Ajouté
- **Rapport HTML v2**
- Intervalles de confiance Bootstrap à 95% (`bootstrap_ci()`)
- Tests de Wilcoxon et matrices de tests par paires (`wilcoxon_test()`, `pairwise_stats()`)
- Courbes de fiabilité (CER cumulatif par percentile de qualité)
- Diagrammes de Venn des erreurs communes/exclusives entre concurrents (2 et 3 ensembles)
- Clustering des patterns d'erreurs (k-means simplifié sur n-grammes d'erreur)
- Matrice de corrélation entre métriques (Pearson)
- Score de difficulté intrinsèque par document (`compute_difficulty()`, `compute_all_difficulties()`)
- Scatter plots interactifs qualité image vs CER, colorés par type de script
- Heatmaps de confusion unicode améliorées
- `picarones/core/statistics.py` : module dédié aux tests statistiques
- `picarones/core/difficulty.py` : score de difficulté intrinsèque
### Tests
- `tests/test_sprint7_advanced_report.py` : 100 tests (bootstrap, Wilcoxon, Venn, clustering, difficulté)
- **Total** : 583 tests (anciennement 483)
---
## [0.6.0] — Sprint 6 — 2025-02
### Ajouté
- **Interface web FastAPI** (`picarones/web/app.py`)
- Endpoints REST pour lancer des benchmarks, consulter les résultats, lister les moteurs
- Streaming des logs en temps réel (Server-Sent Events)
- `picarones serve` — lancement du serveur uvicorn
- **Import HuggingFace Datasets** (`picarones/importers/huggingface.py`)
- Recherche, filtrage et import partiel de datasets OCR/HTR
- Datasets patrimoniaux pré-référencés : IAM, RIMES, READ-BAD, Esposalles…
- Cache local avec gestion des versions
- **Import HTR-United** (`picarones/importers/htr_united.py`)
- Listing et import depuis le catalogue HTR-United
- Lecture des métadonnées : langue, script, institution, époque
- **Adaptateurs Ollama** (`picarones/llm/ollama_adapter.py`)
- Support de Llama 3, Gemma, Phi et tout modèle Ollama local
- Mode texte seul (LLMs non multimodaux)
- **Profils de normalisation pré-configurés**
- Français médiéval, Français moderne, Latin médiéval, Imprimés anciens
- Profil personnalisé exportable/importable
### Tests
- `tests/test_sprint6_web_interface.py` : 90 tests
- **Total** : 483 tests (anciennement 393)
---
## [0.5.0] — Sprint 5 — 2025-02
### Ajouté
- **Matrice de confusion unicode** (`picarones/core/confusion.py`)
- `build_confusion_matrix()`, `aggregate_confusion_matrices()`
- Affichage compact trié par fréquence d'erreur
- **Scores ligatures et diacritiques** (`picarones/core/char_scores.py`)
- `compute_ligature_score()` : fi, fl, ff, ffi, ffl, st, ct, œ, æ, ꝑ, ꝓ…
- `compute_diacritic_score()` : accents, cédilles, trémas, diacritiques combinants
- **Taxonomie des erreurs en 10 classes** (`picarones/core/taxonomy.py`)
- Confusion visuelle, erreur diacritique, casse, ligature, abréviation, hapax, segmentation, hors-vocabulaire, lacune, sur-normalisation LLM
- **Analyse structurelle** (`picarones/core/structure.py`)
- Score d'ordre de lecture, taux de segmentation des lignes, conservation des sauts de paragraphe
- **Métriques de qualité image** (`picarones/core/image_quality.py`)
- Netteté (Laplacien), niveau de bruit, contraste (Michelson), détection rotation résiduelle
- Corrélations image ↔ CER
- Intégration de toutes ces métriques dans le rapport HTML (vue Analyse, vue Caractères)
- Scatter plots qualité image vs CER
### Tests
- `tests/test_sprint5_advanced_metrics.py` : 100 tests
- **Total** : 393 tests (anciennement 293)
---
## [0.4.0] — Sprint 4 — 2025-01
### Ajouté
- **Adaptateurs APIs cloud OCR**
- Mistral OCR (`picarones/engines/mistral_ocr.py`) — Mistral OCR 3, multimodal
- Google Vision (`picarones/engines/google_vision.py`) — Document AI
- Azure Document Intelligence (`picarones/engines/azure_doc_intel.py`)
- **Import IIIF v2/v3** (`picarones/importers/iiif.py`)
- Sélecteur de pages (`"1-10"`, `"1,3,5"`, `"all"`)
- Téléchargement images et extraction des annotations de transcription si disponibles
- Compatibilité : Gallica, Bodleian, British Library, BSB, e-codices, Europeana
- `picarones import iiif <url>` — commande CLI
- **Normalisation unicode** (`picarones/core/normalization.py`)
- NFC, caseless, diplomatique (tables ſ=s, u=v, i=j, æ=ae, œ=oe…)
- Profils configurables via YAML
- CER diplomatique dans les métriques
### Tests
- `tests/test_sprint4_normalization_iiif.py` : 100 tests
- **Total** : 293 tests (anciennement 193)
---
## [0.3.0] — Sprint 3 — 2025-01
### Ajouté
- **Pipelines OCR+LLM** (`picarones/pipelines/base.py`)
- Mode 1 — Post-correction texte brut (LLM reçoit la sortie OCR)
- Mode 2 — Post-correction avec image (LLM reçoit image + OCR)
- Mode 3 — Zero-shot LLM (LLM reçoit uniquement l'image)
- Chaînes composables multi-étapes
- **Adaptateurs LLM**
- OpenAI (`picarones/llm/openai_adapter.py`) — GPT-4o, GPT-4o mini
- Anthropic (`picarones/llm/anthropic_adapter.py`) — Claude Sonnet, Haiku
- Mistral (`picarones/llm/mistral_adapter.py`) — Mistral Large, Pixtral
- **Détection de sur-normalisation LLM** (`picarones/pipelines/over_normalization.py`)
- Mesure du taux de modification sur des passages déjà corrects
- Classe 10 dans la taxonomie des erreurs
- **Bibliothèque de prompts**
- Prompts pour manuscrits médiévaux, imprimés anciens, latin
- Versionning des prompts dans les métadonnées du rapport
- Vue spécifique OCR+LLM dans le rapport : diff triple GT / OCR brut / après correction
### Tests
- `tests/test_sprint3_llm_pipelines.py` : 100 tests
- **Total** : 193 tests (anciennement 93)
---
## [0.2.0] — Sprint 2 — 2025-01
### Ajouté
- **Rapport HTML interactif** (`picarones/report/generator.py`)
- Fichier HTML auto-contenu, lisible hors-ligne
- Tableau de classement des concurrents (CER, WER, scores), tri par colonne
- Graphique radar (spider chart) : CER / WER / Précision diacritiques / Ligatures
- Vue Galerie : toutes les images avec badges CER colorés (vert→rouge), filtres
- Vue Document : image zoomable + diff coloré façon GitHub, scroll synchronisé N-way
- Vue Analyse : histogrammes de distribution CER, scatter plots
- Recommandation automatique de moteur
- Exports CSV, JSON, ALTO XML depuis le rapport
- **Diff coloré** (`picarones/report/diff_utils.py`)
- Diff au niveau caractère et mot
- Insertions (vert), suppressions (rouge), substitutions (orange)
- Bascule diplomatique / normalisé
- `picarones demo` — rapport de démonstration avec données fictives réalistes
- `picarones report --results results.json` — génère le HTML depuis un JSON existant
- `picarones/fixtures.py` — générateur de benchmarks fictifs (12 textes médiévaux, 4 concurrents)
### Tests
- `tests/test_report.py`, `tests/test_diff_utils.py` : 93 tests
- **Total** : 93 tests (anciennement 20)
---
## [0.1.0] — Sprint 1 — 2025-01
### Ajouté
- **Structure complète du projet** Python avec `pyproject.toml`, `setup`, packaging
- **Adaptateur Tesseract 5** (`picarones/engines/tesseract.py`) via `pytesseract`
- Configuration lang, PSM, DPI
- Récupération de la version
- **Adaptateur Pero OCR** (`picarones/engines/pero_ocr.py`)
- Chargement de modèle, traitement d'image
- **Interface abstraite** `BaseOCREngine` avec `process_image()`, `get_version()`, propriétés
- **Calcul CER et WER** (`picarones/core/metrics.py`) via `jiwer`
- CER brut, NFC, caseless
- WER, WER normalisé, MER, WIL
- Longueurs de référence et hypothèse
- **Chargement de corpus** (`picarones/core/corpus.py`)
- Dossier local : paires image / `.gt.txt`
- Détection automatique des extensions image (jpg, png, tif, bmp…)
- Classe `Corpus`, `Document`
- **Export JSON** (`picarones/core/results.py`)
- `BenchmarkResult`, `EngineReport`, `DocumentResult`
- `ranking()` : classement par CER moyen
- `to_json()` avec horodatage et métadonnées
- **Orchestrateur benchmark** (`picarones/core/runner.py`)
- Traitement séquentiel des documents par moteur
- Barre de progression `tqdm`
- Cache des sorties par hash SHA-256
- **CLI Click** (`picarones/cli.py`)
- `picarones run` — benchmark complet
- `picarones metrics` — CER/WER entre deux fichiers
- `picarones engines` — liste des moteurs avec statut
- `picarones info` — version et dépendances
- `--fail-if-cer-above` pour intégration CI/CD
### Tests
- `tests/test_metrics.py`, `test_corpus.py`, `test_engines.py`, `test_results.py` : 20 tests
|