Handwriting Recognition
Complete handwriting recognition system using CNN-BiLSTM-CTC on the IAM dataset.
π Files
1. analysis.ipynb - Dataset Analysis
- Exploratory Data Analysis (EDA)
- 5 detailed charts saved to
charts/folder - Run locally or on Colab (no GPU needed)
2. train_colab.ipynb - Model Training (GPU)
- β‘ Google Colab GPU compatible
- Full training pipeline
- CNN-BiLSTM-CTC model (~9.1M parameters)
- Automatic model saving
- Download trained model for deployment
π Quick Start
Option 1: Analyze Dataset (Local/Colab)
jupyter notebook analysis.ipynb
- No GPU needed
- Generates 5 EDA charts
- Fast (~2 minutes)
Option 2: Train Model (Google Colab GPU)
- Upload
train_colab.ipynbto Google Colab - Change runtime to GPU:
- Runtime β Change runtime type β GPU (T4 recommended)
- Run all cells
- Download trained model (last cell)
Training Time: ~1-2 hours for 20 epochs on T4 GPU
π Charts Generated
From analysis.ipynb:
charts/01_sample_images.png- 10 sample handwritten textscharts/02_text_length_distribution.png- Text statisticscharts/03_image_dimensions.png- Image analysischarts/04_character_frequency.png- Character distributioncharts/05_summary_statistics.png- Summary table
π― Model Details
Architecture:
- CNN: 7 convolutional blocks (feature extraction)
- BiLSTM: 2 layers, 256 hidden units (sequence modeling)
- CTC Loss: Alignment-free training
Dataset: Teklia/IAM-line (Hugging Face)
- Train: 6,482 samples
- Validation: 976 samples
- Test: 2,915 samples
Metrics:
- CER (Character Error Rate)
- WER (Word Error Rate)
πΎ Model Files
After training in Colab:
best_model.pth- Trained model weightstraining_history.png- Loss/CER/WER plotspredictions.png- Sample predictions
π¦ Requirements
torch>=2.0.0
datasets>=2.14.0
pillow>=9.5.0
numpy>=1.24.0
matplotlib>=3.7.0
seaborn>=0.13.0
jupyter>=1.0.0
jiwer>=3.0.0
π§ Usage
Load Trained Model
import torch
# Load checkpoint
checkpoint = torch.load('best_model.pth')
char_mapper = checkpoint['char_mapper']
# Create model
from train_colab import CRNN # Copy model class
model = CRNN(num_chars=len(char_mapper.chars))
model.load_state_dict(checkpoint['model_state_dict'])
model.eval()
# Predict
# ... (preprocessing + inference)
π Notes
- GPU strongly recommended for training (use Colab T4)
- Training on CPU will be extremely slow (~20x slower)
- Colab free tier: 12-hour limit, sufficient for 20 epochs
- Model checkpoint includes character mapper for deployment
π Training Tips
- Start with fewer epochs (5-10) to test
- Monitor CER/WER - stop if not improving
- Increase epochs if still improving (up to 50)
- Save checkpoint before Colab disconnects
- Download model immediately after training
π License
Dataset: IAM Database (research use)
Inference Providers
NEW
This model isn't deployed by any Inference Provider.
π
Ask for provider support
Dataset used to train IsmatS/handwriting-recognition-iam
Evaluation results
- Character Error Rate on IAM Handwriting Databaseself-reported0.130
- Word Error Rate on IAM Handwriting Databaseself-reported0.425