SECURITY6 Min Read · 19 April 2026

HOW DOES A 23-MODEL AI CONSENSUS DETECT FORGED SIGNATURES?

YŞ
Yusuf ŞalFounder & Systems Architect
𝕏
CONSENSUS::23-MODELS
FORENSIC_SCORE99.82%
[STROKE_VELOCITY]BIOMETRIC_PASS

Morphological stroke analysis and an open forensic confidence score, built to shrink the margin of error any single model carries.

The Problem: One Model, One Blind Spot

When the signature verification request landed on the board, our first instinct was everyone's: pick a good similarity model, feed it two signatures, get a number. We tried exactly that in the first week, and the results showed us very clearly why one model is not enough.

  • Scan sensitivity: Between a 200 dpi and a 300 dpi scan of the same signature, a single model's score moved by up to 20 points. It was measuring the scanner, not the signature.
  • Confident mistakes: One model gave a genuine signature, signed with a different pen, 31% and showed no hesitation at all. A single number has no way to show hesitation.
  • Unexplainable output: "The model said 62%" is not enough of a reason for a compliance team to hold a shipment.

The third one was the real red line for us. We did not want to produce a verdict nobody could argue with; we wanted a number with visible reasoning that tells a person which document to look at first.

“A score is worth as much for telling you when it is unsure as for telling you how sure it is.”

Morphology: Reading a Signature as Strokes, Not Pixels

A signature is the trace of a movement left on paper. Comparing pixel by pixel misses that movement; the same person never signs with the same pixels twice. So the first step is to normalise the image and break the signature into its strokes.

When a document arrives, the signature region is cropped, the slant is corrected, the ink is separated from the background and a skeleton is extracted. Then measurable features are computed for every stroke: the proportions between strokes, the angles at turning points, the places where the pen lifts, the variation in line width. That last one, width, is what pressure looks like in a scan. Below 300 dpi most of it is lost, so on low-resolution scans we attach an explicit warning to the score.

On the reference side the archive is indexed per signer. A score only means something with at least three reference signatures per signer. With two there is no "how this person usually signs"; there are just two samples.

Consensus: 23 Votes, One Median, One Spread

Instead of one model we use an ensemble of 23. The models are deliberately different: some look at stroke geometry, some at texture and width, some at the overall shape of the signature. Each one scores the new signature from 0 to 100 against every reference signature that person has.

We do not take the mean. A mean lets one wild model drag the whole result. We use the median and the interquartile range instead. The median gives the result; the spread tells you how much the models agree.

consensus_score.py
python 3.12
from statistics import median, quantiles

def consensus_score(model_scores, reference_count):
    if reference_count < 3:
        return {"status": "insufficient_references"}

    q1, _, q3 = quantiles(model_scores, n=4)
    spread = q3 - q1

    return {
        "score": round(median(model_scores)),
        "spread": round(spread),
        "agreement": "low" if spread > 18 else "high",
        "models": len(model_scores),
    }

When the spread goes above 18 points we mark the result as "low agreement". That is a finding in its own right: when the models disagree, the scan is usually bad, the signature is cut off, or the references come from different periods of that person's life. In all three cases the right move is for a person to look.

The Confidence Score: Not a Verdict, a Number You Can Argue With

The output is not a "forged" or "genuine" label. Every result comes with three things: the median score, the agreement level and thumbnails of the closest matching reference signatures. The last one was added later; the first user on the board wrote that they wanted to see what the number was comparing on the same screen, and they were right. A number without the image is still a verdict you are forced to trust.

The score is read against that person's own baseline. If a signer's references score 91 against each other on average and the new signature scores 38, the document goes to the review queue. That threshold is not fixed; it varies from person to person, because some people sign almost identically every time and some never do.

The cost side is simple too. On Incapon you pay only the cost; here is the real unit cost per document:

StepWhat It DoesAmount
Cropping and normalisationOne page, 300 dpi$0.0001
Reading the reference indexSigner cluster$0.0002
23-model inference2.4 s on average$0.0017
TOTAL PER DOCUMENT$0.002

Limits: What It Does Not Say

This tool does not tell a court anything, and we do not claim it does. It does not replace a forensic document examination; it tells you which document to put in front of one. It produces no score for a signer with fewer than three references, warns on low-resolution scans, and does not hide it when the models disagree.

The tool went public three days after the request was opened on the board. In the first batch, the two documents the team already suspected came back well below everything else that person had signed. It was the answer they had hoped not to get; but at least it was now a number, not a memory.

CUSTOM SOLUTION LAB

Got a Process Like This Too?

Tell us about the tedious manual task that costs your team at least 30 minutes every day; we will design a working in-browser micro tool for it in 48 hours.

Delivered in 48 HoursZero Server LeakageFixed Price Guarantee

© 2026 Incapon Labs. Code optimised by hand.