Skip to main content

Signature verification package for verifying offline signatures using writer-independent features.

Project description

VerSign: Easy Signature Verification in Python

versign is a small Python package which can be used to perform verification of offline signatures.

It assumes no prior knowledge of any machine learning tools or machine learning itself, and therefore can be used by ML experts and anyone else who wants to quickly integrate this functionality into their project.

Getting Started


versign relies on pre-trained models made available by Hafemann under the sigver project. Head over to this repository and perform the steps under Installation heading there.


This package requires python 3. Installation can be done with pip:

pip install versign

Installation inside a virtual environment is recommended.

Download Trained Models

Before you can get started with, there is one more step you need to complete. versign comes with some pre-trained models which give it its magic.

Download the compressed models here, and extract them to models/ directory in your project root. Your project directory should look something like this:

 |__ models/
 |   |__ signet.pth
 |   |__ versign_segment.pkl
 |__ ...

Organise Your Dataset

It is assumed that only positive samples (i.e. genuine signatures) are available during training, while both genuine and forged signatures can be present in the test data.

In general, your dataset should be structured something like below.

 |__ models/
 |__ data/
 |   |__ train/
 |   |   |__ 001/
 |   |   |   |__ R01.png
 |   |   |   |__ R02.png
 |   |   |   |__ ...
 |   |   |__ 002/
 |   |       |__ ...
 |   |__ test/
 |       |__ 001/
 |       |   |__ Q01.png
 |       |   |__ Q02.png
 |       |   |__ ...
 |       |__ 002/
 |           |__ ...
 |__ ...

Here, Ref/ folder contains your training data, with each sub-folder representing one person. In each of the sub-folders in Ref/ folder, there are images of only genuine signatures of that user.

Similarly, the Questioned/ folder contains your test data. The sub-folders in this folder should be same as those in the training folder, except that they can contain both positive and negative signature samples.

Write Your First Program with VerSign

import os

import joblib
import torch

from sigver.featurelearning.models import SigNet
from versign import VerSign

# Define paths to your data
data_path = 'data/'
train_path = data_path + 'train/'   # path to reference signatures
test_path = data_path + 'test/'     # path to questioned signatures
temp_path = data_path + 'temp/'     # temp path where extracted features will be saved
if not os.path.exists(temp_path):

# Load models
state_dict = torch.load('models/signet.pth')[0]
net = SigNet().eval()

clf = joblib.load('models/versign_segment.pkl')
v = VerSign(input_size=(150, 220), extraction_model=net, segmentation_model=clf)

# Learn from genuine signatures
v.train_all(train_path, temp_path)

# Classify your test data
results = v.test_all(test_path, temp_path)

# Print out results
for y_test in results:

# Cleanup temp files
shutil.rmtree(temp_path) # comment this line if you want to keep extracted features

For a more complete example and additional features such as measuring test accuracy if groundtruth is known, see the

Project details

Download files

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

Files for versign, version 0.0.1
Filename, size File type Python version Upload date Hashes
Filename, size versign-0.0.1-py3-none-any.whl (15.9 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size versign-0.0.1.tar.gz (13.8 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page