Picarones / CHANGELOG.md
Claude
chore: remplacer toutes les références bnf/picarones par maribakulj/Picarones
cecde1f unverified
|
Raw
History Blame
13 kB
# 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 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