Computer vision

Rare Coin Scanner

A computer-vision pipeline for going through inherited coin albums. Scan a page, get a verified inventory plus a short list of slots worth a second look.

8K+
Coins scanned
12
Albums processed
3%
Slots flagged
1
Doubled-die find

Why this exists

My grandfather was a coin collector, the patient kind. When he passed, he left me a stack of coin albums — the Whitman/Dansco style with pre-printed slots for every date and mint mark in a series. Lincoln cents, Mercury dimes, Walking Liberty halves, Morgans. A few binders of cardboard 2×2 flips on top. More coins than I had any plan for going through.

The honest reason I'd never started: I didn't know enough to know what mattered. The albums had been filled by a careful collector decades ago, but a slot labeled “1909-S VDB” doesn't mean what the slot says. It means my grandfather thought it was. Verifying every coin is the whole game, and there were too many to do by hand.

AI made it feasible. One camera, one rules engine, one long afternoon — and I finally have an inventory.

What the scanner actually does

The pipeline is four stages. The hardware is a cheap overhead USB camera and a small light box. Albums sit flat under the camera, one page at a time. The software runs locally — everything happens on-device, nothing goes to a cloud.

Overhead shotUSB camera + traySegmentationfine-tuned SAM→ N coin cropsClassifier Adenom · country · yearResNet-50 fine-tuneClassifier Bmint mark + rotationsmall CNN on ROIRules enginenumismatic rules→ flagged list

Four-stage pipeline. Page → slot grid → coin classifier + label OCR running in parallel → rules engine that compares what the album says against what the model sees.

Stage 1: slot detection.Coin albums have a regular grid of pre-cut slots, each holding a coin behind a clear plastic window. The slot grid is uniform per album style (Whitman, Dansco, Littleton), so I don't need an ML segmenter — just a calibrated homography per album page that maps pixel coordinates to slot indices. Once calibrated, a new page snaps to the grid in milliseconds. Cardboard 2×2 flips are handled by a different path: they don't live on a grid, so SAM segments them out one at a time.

Stage 2a: coin classifier. Each slot crop runs through a denomination / country / year classifier trained on ~40,000 images from open numismatic databases. Output: best-guess identity for the coin actually in the slot, plus a mint-mark read.

Stage 2b: label OCR.In parallel, an OCR pass reads the printed slot label below each window (“1909-S VDB”, “1916-D”, etc.). That gives me what the album claims the coin is.

Stage 3: the verification rules engine. This is the part that matters. Having a label is not the same as knowing what's valuable. The rules engine compares classifier output against label OCR, applies numismatic knowledge (key dates, error coins, silver content), and produces a flag list — slots worth a closer look in person.

The rules that actually find value

Most coins in an album are worth what the slot says — a common-date Lincoln cent in a common-date slot. The scanner isn't trying to value every coin. It's trying to pull the ~3% of slots where something is off — either the label says one thing and the coin says another, or the coin matches the label but the label happens to be on a key date or error.

SignalRuleWhy flag
Label mismatchClassifier disagrees with album labelPossible mis-attribution by the original collector
Key dates1909-S VDB, 1914-D, 1916-D, 1943 copper, 1922 plainRare mint/year combos worth hundreds
Error candidatesDouble dies, off-center strikes, wrong planchetVisual signals that warrant in-person inspection
Silver contentPre-1965 US dimes, quarters, halves~90% silver by weight regardless of date
Notable labelsSlot label is on a key-date rowLabel matches a high-value year/mint combo — verify in person
Empty slotsSlot detected but no coin insideInventory completeness for the eventual estate sort

The rules are tuned for high recall at the expense of precision. A false positive costs me 30 seconds of looking more closely; a false negative could mean missing a $200 coin that's been sitting in a binder for forty years. Easy tradeoff — flag generously, eyeball the flags by hand.

The counter-intuitive detail

The interesting move on this build was treating the album label as a prior, not a fact. Most “coin identifier” apps trust whatever the user types in or whatever the slot says. That misses the whole point of going through an inherited collection.

When my grandfather filled in a Walking Liberty half album in 1985, he was working from his own visual identification, his references at the time, and his eyesight. He was right almost always. But almost always across hundreds of slots is not the same as always, and the cases where he was wrong are precisely the cases that are most interesting to find — a coin that shouldn't be where it is.

So the rules engine treats the label as a Bayesian prior: start with high confidence the slot is what the label says, then let the classifier's output down-weight that confidence when the model disagrees. Three flag types fall out of this naturally:

  • Verified. Classifier and label agree. Most slots end up here.
  • Mismatch. Classifier and label disagree with high confidence — a 1922 plain cent sitting in a 1922-D slot, for instance. Worth a manual inspection regardless of which one is right.
  • Notable label. Classifier and label agree, but the label is on a key date / error / silver year. Worth grading even if everything checks out.

The generalizable lesson: treat human annotations as priors, not facts. They're right most of the time. The interesting work is what happens when the model and the human disagree.

Whitman folder · Lincoln Cents 1909–1940

Page 1 of 3

8 verified1 mismatch2 notable
P
1909-P
read: 1909-P
Verified
S VDB
1909-S VDB
read: 1909-S VDB
Notable
S
1909-S
read: 1909-S
Verified
P
1910-P
read: 1910-P
Verified
S
1910-S
read: 1910-S
Verified
P
1911-P
read: 1911-P
Verified
P
1911-D
read: 1911-P
Mismatch
S
1911-S
read: 1911-S
Verified
1912-P
(empty)
Empty
D
1912-D
read: 1912-D
Verified
S
1912-S
read: 1912-S
Verified
D
1914-D
read: 1914-D
Notable

Stylized album-page output. Each slot shows the grandfather's label and the classifier's read, with one of three states: verified · mismatch · notable.

What I’d do differently

I built the album path first and the cardboard-flip path second, when I should have done it the other way around. The flips are the harder problem (no grid, varying orientations, uneven lighting through the mylar) but they're also where most of the more-valuable coins tend to live, because that's where my grandfather put the ones he wanted to handle individually.

Generalizable lesson: start with the hard cases, not the easy ones. Easy cases will fall out of a system designed for the hard ones. The reverse usually doesn't hold.

What the albums had in them

Across the inherited collection — about a dozen albums and a few binders of flips — the scanner flagged roughly 3% of slots as worth a closer look. Of those, maybe a third are actually meaningful once I eyeball them. The standouts so far:

  • A 1909-S VDB Lincoln cent that the album labeled correctly — confirmed and pulled for grading.
  • Two label-mismatches in the Mercury dimes binder where a 1916 sat in the 1916-D slot. Cheap mistake to make without a magnifier; the classifier caught both.
  • A small stack of pre-1965 silver dimes in a flip binder — already identified by my grandfather, already worth what they were worth, but pleasant to confirm.
  • A 1955 doubled-die obverse cent in a slot just labeled “1955.” That one paid for the build.

The point of this project was never the dollar value. It was finally going through something that had been sitting with me for years because the activation energy was too high. AI dropped the activation energy to about an afternoon, and now I have an inventory my grandfather never got to see.