Signature verification package for verifying offline signatures using writer-independent features.
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.
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:
_ $PROJECT_ROOT |__ 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.
_ $PROJECT_ROOT |__ models/ |__ data/ | |__ train/ | | |__ 001/ | | | |__ R01.png | | | |__ R02.png | | | |__ ... | | |__ 002/ | | |__ ... | |__ test/ | |__ 001/ | | |__ Q01.png | | |__ Q02.png | | |__ ... | |__ 002/ | |__ ... |__ ...
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.
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
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): os.makedirs(temp_path) # Load models state_dict = torch.load('models/signet.pth') net = SigNet().eval() net.load_state_dict(state_dict) 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: print(y_test) # 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 example.py.
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|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 hashes|
|Filename, size versign-0.0.1.tar.gz (13.8 kB)||File type Source||Python version None||Upload date||Hashes View hashes|