Skip to main content

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 AryadOcr entraînable avec PyTorch
  • Support complet pour entraînement et validation

Chargement et fusion des datasets

  1. 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")
  1. 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"])
  1. 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, val_loader)

Le modèle utilise le CTC Loss pour reconnaître des séquences de phonèmes et caractères.
Les métriques et la progression sont affichées automatiquement pendant l'entraînement.


Bonnes pratiques

  • Vérifiez que vos datasets contiennent la colonne phonemes.
  • Utilisez filter_by_patterns pour 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_abc, batch_size=4, shuffle=False, collate_fn=collator)

ocr_model.fit(train_loader, val_loader)

# ou entrainement sans validation
# ocr_model.fit(train_loader, val_loader)

#Evaluation du modèle entrainé
ocr_model.evaluate(val_loader)

Chargement d’un modèle et vocabulaire pour évaluation

import json
import torch
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)

# 3. Charger le checkpoint
checkpoint = torch.load("best_model.pt", map_location=model.device)

# 4. Appliquer les poids
model.load_state_dict(checkpoint['model_state_dict'])

# 5. Évaluation
model.evaluate(val_loader)

# 6. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aryadocr-0.1.20.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aryadocr-0.1.20-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file aryadocr-0.1.20.tar.gz.

File metadata

  • Download URL: aryadocr-0.1.20.tar.gz
  • Upload date:
  • Size: 11.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for aryadocr-0.1.20.tar.gz
Algorithm Hash digest
SHA256 a39b2134ea2d761a2ca0814fc04ec3cbf3bc865e9efd5f57bf6c01196ee2e6a4
MD5 da92157f0289233e5997754938697959
BLAKE2b-256 615510fc8cd16c243ded0a7b2b871243e76c75226ea9dfdd3a15c1a42f6b0cd3

See more details on using hashes here.

File details

Details for the file aryadocr-0.1.20-py3-none-any.whl.

File metadata

  • Download URL: aryadocr-0.1.20-py3-none-any.whl
  • Upload date:
  • Size: 10.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for aryadocr-0.1.20-py3-none-any.whl
Algorithm Hash digest
SHA256 5e72269aded08a2e71d86af23a4756270d95ba5fb03bc3c4212fc147bc26b8fa
MD5 b6a0b3821ab6ffe8bd094d724d51f76c
BLAKE2b-256 501803f8f1bb4aaf62ee6b8abdf5f0acc0d9eed07d7dff7a3d32090212da34ab

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page