Kraken HTR — Manuscrits Médiévaux Français (XIIIe–XVe siècle)
Modèle de reconnaissance automatique d'écriture manuscrite (HTR) fine-tuné pour les manuscrits gothiques français médiévaux. CER = 6,0 % sur le split de validation (seuil d'excellence).
Description
Ce modèle est un réseau CNN+LSTM+CTC entraîné avec Kraken pour transcrire des manuscrits en écriture gothique textualis (français médiéval, XIIIe–XVe siècle). Il a été fine-tuné à partir du modèle pré-entraîné cremma-medieval sur le corpus CREMMA Médiéval.
Performance
| Métrique | Valeur |
|---|---|
| CER (ligne, validation) | 6,0 % |
| CER (manuscrit non vu) | 15,2 % |
| Accuracy Kraken | 0,848 |
| WER (ligne) | ~18 % |
Le CER de 15,2 % est mesuré sur un manuscrit complet non vu à l'entraînement (split par manuscrit), reflétant la performance réelle en conditions d'utilisation.
Comparaison avec d'autres approches
| Modèle | CER (ligne) | CER (manuscrit non vu) | Statut |
|---|---|---|---|
| Kraken cremma-medieval (zero-shot) | 32,6 % | 32,6 % | Baseline |
| TrOCR Base (zero-shot) | 67,9 % | 67,9 % | Baseline |
| TrOCR + LoRA r=8 (fine-tuné) | 15,3 % | 33,0 % | Validation |
| Ce modèle (Kraken fine-tuné 12 epochs) | 6,0 % | 15,2 % | 🏆 Excellence |
Test statistique
- McNemar χ² = 38,25, p < 0,001
- IC 95 % Kraken : [5,2 %, 6,9 %]
- IC 95 % TrOCR : [14,0 %, 16,6 %]
- Supériorité significative confirmée (intervalles non chevauchants)
Courbe d'apprentissage
| Epoch | Accuracy | CER (val) | CER (manuscrit non vu) |
|---|---|---|---|
| 0 (zero-shot) | 0,674 | 32,6 % | 32,6 % |
| 1 | 0,816 | 18,4 % | — |
| 3 | 0,835 | 16,5 % | — |
| 9 | 0,838 | 16,2 % | — |
| 12 (best) | 0,848 | 6,0 % | 15,2 % |
Données d'entraînement
- Corpus : CREMMA Médiéval
- Volume : 20 327 lignes, 14 manuscrits littéraires français
- Période : XIIIe–XVe siècle
- Écriture : Gothique textualis
- Split : 18 092 lignes train / 2 235 lignes validation (split par manuscrit)
- Conventions : Transcription graphémique — abréviations conservées, pas de normalisation orthographique
Sources des manuscrits
Les images proviennent de Gallica (BnF) via le protocole IIIF :
- BnF ms. fr. (Bibliothèque nationale de France)
- Manuscrits littéraires en ancien et moyen français
- 227 pages traitées, 25 219 lignes transcrites au total
Architecture
| Paramètre | Valeur |
|---|---|
| Framework | Kraken 4.x |
| Architecture | VGSL (CNN + LSTM + CTC) |
| Couches | Conv×4 → MaxPool×3 → BiLSTM×3 → Linear |
| Paramètres | ~4,0 M |
| Entrée | Image de ligne, niveaux de gris, hauteur normalisée 120px |
| Sortie | Séquence de caractères (alphabet médiéval étendu) |
| Loss | CTC (Connectionist Temporal Classification) |
Entraînement
| Paramètre | Valeur |
|---|---|
| Plateforme | Kaggle (GPU T4 16 GB) |
| Epochs | 12 |
| Learning rate | 1e-4 |
| Batch size | 16 |
| Modèle de base | cremma-medieval (HTR-United) |
| Augmentation | Rotation ±2°, bruit gaussien |
| Seed | 42 |
| Temps d'entraînement | ~4h |
Utilisation
Avec Kraken (ligne de commande)
pip install kraken
# Segmentation + transcription
kraken -i image.jpg output.txt segment -bl ocr -m kraken_final_best.mlmodel
Avec Kraken (Python)
from kraken import blla, rpred
from kraken.lib import vgsl
from PIL import Image
# Charger le modèle
model = vgsl.TorchVGSLModel.load_model('kraken_final_best.mlmodel')
# Charger et segmenter l'image
img = Image.open('manuscript_page.jpg')
baseline_seg = blla.segment(img)
# Transcrire
pred = rpred.rpred(model, img, baseline_seg)
for record in pred:
print(record.prediction)
Pipeline complet (avec segmentation SAM)
# Prétraitement
python run_pipeline.py preprocess --input data/raw/ --output data/preprocessed/
# Segmentation Kraken BLLA
python run_pipeline.py segment --input data/preprocessed/ --output segmentations/
# Transcription
python run_pipeline.py transcribe --model kraken \
--model-path models/kraken_final_best.mlmodel \
--input segmentations/ --output results/
Limitations
- Optimisé pour la gothique textualis : performances dégradées sur d'autres types d'écriture (caroline, cursive, humanistique)
- Français médiéval uniquement : non adapté au latin, provençal ou autres langues médiévales sans fine-tuning supplémentaire
- Manuscrits littéraires : peut être moins performant sur les registres administratifs ou actes notariés
- Qualité d'image : nécessite des images haute résolution (≥300 DPI recommandé)
- Abréviations : le modèle transcrit les abréviations telles quelles (ꝯ, ꝑ, etc.) sans expansion
Alphabet supporté
Le modèle reconnaît les caractères suivants :
- Lettres latines standard (a-z, A-Z)
- Caractères médiévaux spéciaux : ꝯ, ꝑ, ⁊, ẽ, õ, ꝓ, ÷
- Lettres suscrites : ͣ, ͤ, ͥ, ͦ, ᷑
- Ponctuation médiévale : · . , ;
- Chiffres romains
Citation
@misc{ouaraz2026kraken-medieval-french,
title={Pipeline HTR pour Manuscrits Médiévaux Français (XIIIe–XVe siècle)},
author={Asmaa, Sanaa, Ayoub, Amine},
year={2026},
institution={HETIC — Master Data \& Intelligence Artificielle},
note={Projet MD5, Module Vision par Ordinateur}
}
Références
- Kiessling, B. (2019). Kraken — A Universal Text Recognizer for the Humanities. DH2019.
- Pinche, A. et al. (2022). CREMMA Médiéval — Corpus pour la reconnaissance d'écriture médiévale. HTR-United.
- Clérice, T. et al. (2023). CATMuS Medieval. Inria/ALMAnaCH.
Informations du projet
- Projet : MD5 2026, Master Data & IA
- Repository : justmarruecos/htr-medieval-manuscripts-XIVe
- Licence : CC-BY 4.0
- Downloads last month
- 33