AI Forgery Detective
A copy-move forgery detector that explains every verdict in plain language.
Role Model, app and interface Timeline 3 months, 2025 Stack PyTorch, ViT-Base, Flask, ReactContext
Copy-move forgery hides part of an image inside the same image, and it survives compression and the eye. The tools that catch it are built for forensic analysts and output tensors. Our team started with no machine learning experience and spent two of our three months learning, then trained a ViT-Base with a Siamese comparison branch and put a plain-language layer in front of the result.
89.7%
Accuracy on CoMoFoD, 360 images
81.9%
Accuracy on CASIA
92.6%
Of forged images caught, 315 of 340
40%
Of authentic images cleared, 8 of 20
One photo in, and no settings
A photo goes into a chat thread, with no thresholds, no model picker and no slider, so two people checking the same image get the same answer. The same thread then explains the verdict: the language model reads its numbers and can never re-run the model or change the call.
Three views, because the comparison is the evidence
The overlay marks the regions the model matched to each other, and the heatmap shows the confidence behind them. Switching back to the untouched original is one tap, so a reader can check the claim instead of accepting it.
Outside its dataset, it stopped being sure
Trained on CoMoFoD alone, the first model scored 97% on its own test set. On two photographs it had never seen, its confidence collapsed toward a coin toss: 37% on one, 60% on the other.
Seven points for a second dataset, and it still over-calls forgery
So I tuned it on CASIA too. CoMoFoD fell from 97% to 90% and CASIA reached 82%, a trade I would make again: one dataset’s score says little about the next photograph. It still over-calls: 12 of the 20 authentic images were flagged, and twenty is too few to say by how much.
What I would fix next
A detector that says forged nine times out of ten is only useful once you know how often it is wrong, so the test set needs hundreds of authentic images before the next number goes out. The demo runs against a paid inference endpoint, so access to it and the source is on request.
Request access on LinkedInRequest access by emailNext case study