Un package Python pour l'OCR
Project description
AryadOCR
AryadOCR est un module Python performant pour l'entraînement d'un modèle OCR basé sur PyTorch. Il est conçu pour la reconnaissance de caractères à partir de datasets fusionnés, avec une prise en charge du CTC Loss pour les séquences de longueur variable.
Installation
Assurez-vous d'avoir Python 3.8+ et PyTorch installé :
pip install torch torchvision
pip install aryadocr
Installez les dépendances supplémentaires si nécessaire :
pip install numpy tqdm
Fonctionnalités principales
- Chargement flexible des datasets (
load_set,dataset_merged) - Filtrage avancé par motifs (
filter_by_patterns) - Création automatique de vocabulaire pour le CTC
- Gestion des séquences via
AryadCollator - Modèle
AryadOcrentraînable avec PyTorch - Support complet pour entraînement et validation
Chargement et fusion des datasets
load_set(name_set : str)
Charge un dataset spécifique par nom :
from aryadocr.dataset import load_set
dataset_a = load_set("set_a")
dataset_b = load_set("set_b")
dataset_merged(list_set : list)
Fusionne plusieurs datasets en un seul objet :
from aryadocr.dataset import dataset_merged
merged_dataset = dataset_merged(["set_a", "set_b", "set_c"])
filter_by_patterns(dataset, patterns)
Filtre le dataset selon des motifs présents dans les phonèmes :
from aryadocr.dataset import filter_by_patterns
patterns = ['1', '2', 'llL']
filtered_dataset = filter_by_patterns(merged_dataset, patterns)
Création du vocabulaire OCR
Le vocabulaire est généré automatiquement à partir des phonèmes filtrés :
vocabOcrArabic = {
v: k for k, v in enumerate(
['<BLANK>'] +
list(set([token for phoneme in filtered_dataset['phonemes'] for token in phoneme.split('|')])) +
['<PAD>']
)
}
num_classes = len(vocabOcrArabic)
<BLANK>: utilisé pour le CTC Loss<PAD>: padding pour séquences de différentes longueurs
Préparation des DataLoaders
Le collator gère les séquences de longueurs différentes et les transforme en tenseurs compatibles avec le CTC :
from aryadocr.dataset import AryadCollator
from torch.utils.data import DataLoader
collator = AryadCollator(vocabOcrArabic=vocabOcrArabic)
train_loader = DataLoader(filtered_dataset, batch_size=4, shuffle=True, collate_fn=collator)
val_loader = DataLoader(filtered_dataset, batch_size=4, shuffle=False, collate_fn=collator)
Initialisation et entraînement du modèle
from aryadocr.model import AryadOcr
ocr_model = AryadOcr(vocabOcrArabic=vocabOcrArabic)
ocr_model.fit(train_loader)
Le modèle utilise le CTC Loss pour reconnaître des séquences de phonèmes et caractères.
Bonnes pratiques
- Vérifiez que vos datasets contiennent la colonne
phonemes. - Utilisez
filter_by_patternspour exclure les séquences non désirées. - Assurez-vous que le vocabulaire contient
<BLANK>et<PAD>avant l’entraînement. - Ajustez le batch size selon la capacité GPU pour un entraînement optimal.
Exemple complet
from aryadocr.dataset import dataset_merged, load_set, filter_by_patterns, AryadCollator
from torch.utils.data import DataLoader
from aryadocr.model import AryadOcr
patterns = ['1', '2', 'llL']
set_abc = filter_by_patterns(dataset_merged(["set_a", "set_b", "set_c"]), patterns)
set_d = filter_by_patterns(load_set("set_d"), patterns)
vocabOcrArabic = {
v:k for k,v in enumerate(
['<BLANK>'] +
list(set([token for phoneme in set_abc['phonemes'] for token in phoneme.split('|')])) +
['<PAD>']
)
}
ocr_model = AryadOcr(vocabOcrArabic)
collator = AryadCollator(vocabOcrArabic=vocabOcrArabic)
train_loader = DataLoader(set_abc, batch_size=4, shuffle=True, collate_fn=collator)
val_loader = DataLoader(set_d, batch_size=4, shuffle=False, collate_fn=collator)
ocr_model.fit(train_loader)
#Evaluation du modèle entrainé
ocr_model.evaluate(val_loader)
Chargement d’un modèle et vocabulaire pour évaluation
import torch, json
from aryadocr.model import AryadOcr
# 1. Charger le vocabulaire
with open("vocabOcr.json", "r", encoding="utf-8") as f:
vocabOcr = json.load(f)
# 2. Recréer le modèle
model = AryadOcr(vocabOcr=vocabOcr)
# 3. Charger le checkpoint
model.load_model("best_model.pt")
# 4. Évaluer
model.evaluate(val_loader)
# 5. Prédiction
pred = model.predict(img)
print(pred)
model.close()
License
AryadOCR est publié sous licence MIT.
Support
Pour tout problème ou suggestion, merci de nous contacter : aryadacademie@gmail.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aryadocr-0.1.23.tar.gz.
File metadata
- Download URL: aryadocr-0.1.23.tar.gz
- Upload date:
- Size: 10.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c07fa89bcde43241ab59c60111b6c2aece486d51ba6d577fea429830114aea2e
|
|
| MD5 |
49de927cf43d357b4c4aa82e8ef0d3c7
|
|
| BLAKE2b-256 |
2bb4564e7c99e6aaf427e6a0a035bb38d577573b5a4dc933dffa9ce840bfb034
|
File details
Details for the file aryadocr-0.1.23-py3-none-any.whl.
File metadata
- Download URL: aryadocr-0.1.23-py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3310ae2e7edf0a7e16a1d54d103bc4e9dd1c43aa4a475208c3827ba26906cf3
|
|
| MD5 |
a3935f8764eb927d6d8dde01a0de53b2
|
|
| BLAKE2b-256 |
3335ad343656fa70bc11a86debd8569043f5d998c2f94fcba57fed5a35be1e5f
|