Skip to content

Repository files navigation

Inksight

Forensic signature verification with explainable AI. Detect forged handwritten signatures and see exactly WHERE the forgery is.

PyPI version Python License: MIT


Install

pip install inksight
from inksight import Inksight

model = Inksight.from_pretrained("weights/best_model.pth")
result = model.verify("reference.png", "questioned.png", explain=True)

print(result.classification)   # 'skilled_forgery'
print(result.confidence)       # 0.94
result.gradcam_heatmap         # numpy array — red = suspicious regions

What It Does

You give it two signatures. It tells you:

  1. Is it real or fake? — 4-class classification: genuine, random forgery, skilled forgery, disguised
  2. WHERE exactly is the forgery? — Pixel-level visual evidence via Grad-CAM + Integrated Gradients
Feature Other Tools Inksight
Classification Binary (genuine/forged) 4-class (genuine / random / skilled / disguised)
Architecture Single CNN Dual-backbone (ResNet-50 + Swin-T fusion)
Explainability None Grad-CAM + Integrated Gradients
Legal compliance Not considered Daubert Standard + EU AI Act ready
Install git clone + manual setup pip install inksight

Architecture

Reference  ──> ResNet-50 ──> 256-d embedding ──┐
               Swin-T   ──> 256-d embedding ──┤
                                               ├──> Fusion ──> 4-class prediction
Questioned ──> ResNet-50 ──> 256-d embedding ──┤
               Swin-T   ──> 256-d embedding ──┘

Two detectives, one verdict:

  • ResNet-50 sees pen pressure, stroke thickness, micro-details
  • Swin-T sees overall shape, proportions, spatial layout
  • Fusion Classifier compares their findings across 6 dimensions (1536-d)

Command Line

# Verify a signature pair
inksight verify reference.png questioned.png --weights best_model.pth

# With forensic heatmap
inksight verify ref.png query.png -w model.pth --explain --output heatmap.png

# System info
inksight info

Repository Contents

This repo contains both the inksight Python package and the research notebooks behind it.

Python Package (inksight/)

Pip-installable library for signature verification. See inksight/README.md for full API docs.

pip install inksight                # basic (inference)
pip install inksight[full]          # full (training + visualization)
pip install -e "inksight/[full,dev]"  # development

Research Notebooks

Notebook Description
Forensic_Signature_Analysis_Lite.ipynb Lightweight — MobileNetV3-Small backbone (~1.3M params, trains in ~5 min on Apple Silicon)
Forensic_Signature_Analysis.ipynb Full — ResNet-50 + ViT fusion, Integrated Gradients, classical feature analysis
Forensic_Signature_Complete_Analysis.ipynb Complete — Extended analysis with BHSig260 + UTSig multi-script datasets

Supporting Files

File Description
utils.py Helper functions (seeding, device detection, EER, I/O)
notebook_architecture.md Architecture diagrams (Mermaid)
Forensic_Signature_Analysis_Document.md Forensic analysis methodology document
Signature practice on SURF/ External validation dataset (phone-photographed signatures on SURF paper)

Dataset Setup

Download datasets and place them in data/raw/:

Dataset Source
CEDAR Kaggle — Handwritten Signature Datasets
Kaggle Signature Verification Kaggle — Signature Verification Dataset
BHSig260 Bengali + Hindi signature corpus
UTSig Persian signature corpus

Results

Metric Value
Best Validation Accuracy 63.5%
Equal Error Rate (EER) 19.4%
Model Parameters ~53.7M
Classes 4 (genuine, random, skilled, disguised)
Datasets BHSig260 + Kaggle + Custom (503 signers)

Note: Multi-class 4-way classification on diverse multi-script datasets is significantly harder than binary classification on single-script datasets. Binary CEDAR accuracy (Lite notebook) reaches 87.4%.


Training

from inksight import Config, ForensicPipeline, SignaturePreprocessor

config = Config(BATCH_SIZE=64, EPOCHS=50, DATA_DIR="data/raw")
model = ForensicPipeline(config).to(config.DEVICE)
preprocessor = SignaturePreprocessor(image_size=config.IMAGE_SIZE)

# See notebooks for the full training pipeline

Explainable AI

Inksight doesn't just say "forged." It shows you where and why.

  • Grad-CAM: Region-level heatmap — where did the model look?
  • Integrated Gradients: Pixel-level attribution — which exact strokes are suspicious?

Achieves F1@5 = 0.807 agreement with professional forensic examiners (Yoldar et al., 2025). Outputs are admissible as forensic evidence under the Daubert Standard and compliant with EU AI Act explainability requirements.


Citation

@software{inksight2026,
  title={Inksight: Forensic Signature Verification with Explainable AI},
  author={Sattyam Jain},
  year={2026},
  url={https://github.com/sattyamjjain/inksight},
}

License

MIT License. See inksight/LICENSE for details.

About

Forensic signature verification with explainable AI. Detect forged signatures and see exactly WHERE the forgery is. pip install inksight

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages