Signature Verification Module
A comprehensive Python package for signature verification and classification using deep learning models. This module supports both ResNet Siamese networks for verification and Vision Transformers (ViT) with ArcFace for classification.
Features
- Multiple Model Architectures:
- ResNet50 Siamese network with contrastive loss for signature verification
- Vision Transformer (ViT) with ArcFace loss for signature classification
- S3 Integration: Seamless integration with AWS S3 for model weights and dataset storage
- Flexible Configuration: Environment variable-based configuration system
- Complete Pipeline: From data preprocessing to model training and inference
- Production Ready: Optimized for both research and production deployment
Installation
Requirements
- Python 3.8+
- PyTorch 1.9+
- torchvision
- timm (for ViT models)
- scikit-image
- scikit-learn
- pandas
- PIL/Pillow
- boto3 (for S3 support)
- pydantic
- scipy
Install Dependencies
pip install torch torchvision torchaudio
pip install timm scikit-image scikit-learn pandas pillow boto3 pydantic scipy
Quick Start
Basic Usage
from signature import SignatureConfig, load_model, classify_signatures
# Configure the module
config = SignatureConfig(
model_type="vit",
num_classes=100,
model_s3_path="s3://my-bucket/models/signature_vit.pth"
)
# Load a trained model
model = load_model()
# Classify signatures
results = classify_signatures(
model=model,
reference_path="path/to/reference/signatures",
detected_path="path/to/detected/signatures"
)
print(f"Accepted signatures: {results['accepted_signatures']}")
Training a Model
from signature import train_model, create_dataset_csv
# Create a dataset CSV from image directory
create_dataset_csv(
image_directory="path/to/signature/images",
output_csv="dataset.csv",
dataset_type="single" # or "pairs" for ResNet
)
# Train a model
model, metrics = train_model(
model_type="vit",
dataset_path="dataset.csv",
save_path="s3://my-bucket/models/trained_model.pth",
num_classes=100,
epochs=20
)
print(f"Test accuracy: {metrics['test_accuracy']:.4f}")
Configuration
The module supports configuration through environment variables or programmatically:
Environment Variables
# Model configuration
export SIGNATURE_MODEL_TYPE=vit
export SIGNATURE_NUM_CLASSES=100
export SIGNATURE_MODEL_S3_PATH=s3://my-bucket/models/model.pth
# AWS configuration
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
export AWS_DEFAULT_REGION=us-east-2
# Training configuration
export SIGNATURE_BATCH_SIZE=32
export SIGNATURE_LEARNING_RATE=5e-5
export SIGNATURE_EPOCHS=15
Programmatic Configuration
from signature import SignatureConfig, set_config
config = SignatureConfig(
model_type="vit",
num_classes=100,
batch_size=32,
learning_rate=5e-5,
aws_access_key_id="your_access_key",
aws_secret_access_key="your_secret_key"
)
set_config(config)
Model Architectures
ResNet50 Siamese
Best for signature verification (determining if two signatures are from the same person):
from signature import ResNet50Siamese, train_resnet
# Create model
model = ResNet50Siamese(embedding_dim=512)
# Train model
model, metrics = train_resnet(
dataset_path="pairs_dataset.csv",
epochs=25,
margin=17.5
)
Vision Transformer (ViT)
Best for signature classification (identifying which person signed):
from signature import SignatureViT, train_vit
# Create model
model = SignatureViT(num_classes=100, embedding_dim=512)
# Train model
model, metrics = train_vit(
num_classes=100,
dataset_path="single_image_dataset.csv",
epochs=15
)
Data Preparation
Directory Structure
Organize your signature images in the following structure:
signatures/
├── person1/
│ ├── signature1.png
│ ├── signature2.png
│ └── signature3.png
├── person2/
│ ├── signature1.png
│ └── signature2.png
└── person3/
├── signature1.png
├── signature2.png
└── signature4.png
Creating Dataset CSVs
from signature import create_dataset_csv
# For ViT (single image classification)
create_dataset_csv(
image_directory="signatures/",
output_csv="vit_dataset.csv",
dataset_type="single"
)
# For ResNet (image pairs)
create_dataset_csv(
image_directory="signatures/",
output_csv="resnet_dataset.csv",
dataset_type="pairs",
pairs_per_person=50
)
S3 Integration
The module seamlessly works with S3 for storing models, datasets, and reference signatures:
from signature import S3Manager
# Create S3 manager
s3_manager = S3Manager()
# Download model weights
s3_manager.download_file(
"s3://my-bucket/models/model.pth",
"local_model.pth"
)
# Upload trained model
s3_manager.upload_file(
"local_model.pth",
"s3://my-bucket/models/new_model.pth"
)
Advanced Usage
Custom Feature Extraction
from signature import get_fused_features, extract_deep_features
# Extract fused features (deep + HOG)
features = get_fused_features(model, "signature.png")
# Extract only deep features
deep_features = extract_deep_features(model, "signature.png")
Custom Training Loop
from signature import (
create_model, ContrastiveLoss, create_dataloader,
get_config
)
import torch
config = get_config()
# Create model and loss
model = create_model(model_type="resnet")
criterion = ContrastiveLoss(margin=17.5)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
# Create data loaders
train_loader, val_loader, test_loader = create_dataloader(
"dataset.csv",
dataset_type="pairs",
batch_size=32
)
# Custom training loop
for epoch in range(10):
for img1, img2, labels in train_loader:
optimizer.zero_grad()
emb1, emb2 = model(img1, img2)
loss = criterion(emb1, emb2, labels)
loss.backward()
optimizer.step()
API Reference
Core Functions
load_model(): Load a trained model with optional S3 weightsclassify_signatures(): Classify detected signatures against referencestrain_model(): Train a model with automatic type detectioncreate_dataset_csv(): Create dataset CSV from image directory
Model Classes
ResNet50Siamese: Siamese ResNet50 for signature verificationSignatureViT: Vision Transformer with ArcFace for classificationContrastiveLoss: Contrastive loss for Siamese networksArcFace: Angular margin loss implementation
Data Classes
SignatureDataset: Dataset for single signature imagesSignaturePairDataset: Dataset for signature image pairscreate_dataloader(): Create train/val/test data loaders
Utility Classes
SignatureConfig: Configuration managementS3Manager: S3 operations manager
Performance Tips
- Use GPU: Set
SIGNATURE_DEVICE=cudafor faster training and inference - Batch Processing: Use larger batch sizes for better GPU utilization
- Data Augmentation: Enable augmentation for better generalization
- Caching: Models and datasets are automatically cached locally
- S3 Optimization: Use appropriate S3 region for reduced latency
Troubleshooting
Common Issues
- Import Errors: Ensure all dependencies are installed
- S3 Access: Check AWS credentials and permissions
- Memory Issues: Reduce batch size or use CPU if GPU memory is limited
- Image Format: Ensure images are in supported formats (PNG, JPG, JPEG)
Debug Mode
Enable detailed logging:
from signature.utils import setup_logging
setup_logging("DEBUG")
Examples
See the examples/ directory for complete examples:
train_vit_example.py: Training a ViT modeltrain_resnet_example.py: Training a ResNet Siamese modelinference_example.py: Running inference on new signaturess3_integration_example.py: Working with S3 storage
License
This module is part of the LiteWave ML Models repository.
Metadata
Release files for litewave-ml-models-signature 0.0.12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| litewave_ml_models_signature-0.0.12.tar.gz | 27.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| litewave_ml_models_signature-0.0.12-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 58.8 kB
Release files / litewave_ml_models_signature-0.0.12.tar.gz
| Download URL | litewave_ml_models_signature-0.0.12.tar.gz |
|---|---|
| Size | 27.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
29d99da7924b17f25d75155807b08e65d97b7c40fabeb5669565662310f30eee
|
|
BLAKE2b-256 checksum How to use checksums |
702898b23709d741409449edf1d2734158d0ce2c3596f9a19e9b9afae93907a1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.23
|
Release files / litewave_ml_models_signature-0.0.12-py3-none-any.whl
| Download URL | litewave_ml_models_signature-0.0.12-py3-none-any.whl |
|---|---|
| Size | 31.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
327f52fe68369b0ba7a5300b2eda37137d21ea8004808865a547cbb5dbe82ddf
|
|
BLAKE2b-256 checksum How to use checksums |
4a7170d9569c86174b007c745c15906fecd98809e5546e5253c370482d06a50c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.23
|