Card recognition, how to get started?


I’m a new commer in OpenCV’s world and my project would be to detect some Magic the Gathering (MTG) cards in order to sort and count them.

I watched many videos that does object recognition, I followed a tutorial that sets up an object detection with ORB/SIFT, its decently working but I don’t know how to make some match score. Also its quite slow (OpenCV + Project in release mode recognizes the card in 30~50ms), given that MTG has more than 30k cards (some are identical but with different editions), it may take too much time to process all the database.

So I’d like to know where to start with ? My input will be from a camera with poor to high quality, and the common case should be 1 card at a time (so I could automate the card sorting with a raspberry).

Here’s what I though to do in the first place:

  1. Detect the card in the frame to have a tight region of interest (front side of the card and not rotated)
  2. Detection the card’s edition (if it has one) + detection and reading name to reduce matches.
  3. Picture recognition (illustration will (should?) be the same for all languages where the text will obviously not)

What would be the best approach ?

I can do Python/C++, thats not a problem, I’ll will translate the code in another language depending on my needs.

If the card object would not change its size in the inspection image, you can try NCC-based method.

Effect is as followed:

Whole version of this project

Thanks for the reply, I’d like to feed the recognition algorithm with the camera frame, so the card might not have the same size. It will move and doesn’t always has the same borders.
Some cards has black borders, some has white borders, some golden borders, some are borderless.