Sol Ring is ranked 1 on EDHREC — the most-played card in Commander, by a wide margin. It also happens to be one of the hardest cards for an image recognition system to get right. The reason is the artwork. The most common Sol Ring printing uses the Mike Bierek illustration, and…
Read more →
When people ask how accurate a card scanner is, they usually mean one thing, but the question actually has two different answers depending on what you care about. Understanding the difference matters if you're trying to evaluate whether a system is good enough for your use case.…
Read more →
Part 6 of the CollectorVision series. Part 1 has the overview. There are three ways to deploy CollectorVision, depending on where you want the computation to happen and how much bandwidth you have. --- Fully local The Python library and the browser scanner both run entirely on…
Read more →
Part 5 of the CollectorVision series. Part 1 has the overview. The browser scanner runs the entire pipeline — corner detection, perspective warp, neural embedding, catalog search — inside a web page, with no server. It's hosted at https://hanclinto.github.io/CollectorVision/.…
Read more →
Part 4 of the CollectorVision series. Part 1 has the overview. This post covers the practical side: installing the library, running it against a webcam, and the REST server. Post 6 goes deeper into the deployment split — when to run everything locally versus offloading catalog…
Read more →
Part 3 of the CollectorVision series. Part 1 has the overview. After Cornelius finds the card and the perspective is corrected, you have a clean 252 × 352 crop. The next problem is figuring out which of 108,000 cards it is. --- Why not a classifier? The obvious approach is to…
Read more →
Part 2 of the CollectorVision series. Part 1 has the overview. Before you can identify a card you have to find it. Cornelius is the model responsible for that — it takes a camera frame and predicts where the four corners of the card are. This sounds easy. It's not. --- What the…
Read more →
I've been working on a card scanner for Magic: The Gathering for a while now and wanted to write up how it works. The short version: you show it a card, it tells you what it is. It handles held cards, sleeved cards, skewed angles, phone cameras. The whole thing runs locally —…
Read more →
Every once in a while, one of our hens will feel broody and sit on a clutch of eggs. Usually she gets bored after a day or two and wanders off (leaving a pile of soon to be rotten eggs), but every once in a while, one of the girls sticks with it long enough to bring chicks to…
Read more →
NRC 2026 is just around the corner (April 16, 17 & 18), and our students are very excited. For the past several 6 years my wife and I have hosted and coached a robotics team out of our house for middle and high schoolers. This year our students are bringing a total of 8 bots to…
Read more →
Part of the goal with this post is to test the functionality of YouTube videos embedded in-line with blog posts. Are you familiar with the music of Stromae? If not, he's well worth your time. His song "Papaoutai" was my introduction to him, and I find it to be excellent:…
Read more →
So I've wanted to have a new blog for a long time, but I haven't fully settled on architecture until now. I had an idea today for using Github Actions to build a dynamic-feeling website using Issues and Comments on a Github repository as the content for the blog, and so…
Read more →