DRAW (which stands for Detect and Recognize A Wide range of cards) is an object detector trained to detect Yu-Gi-Oh! cards in all types of images, and in particular in dueling images.
Other works exist (see Related Works) but none is capable of recognizing cards during a duel.
DRAW is entirely open source and all contributions are welcome.
Here is a small overview :)
Install
Both a docker installation and a more conventional installation are available. If you're not very familiar with all the code, docker installation is recommended. Otherwise, opt for the classic installation.
If you are familiar with docker, the docker image is available here.
Otherwise, I recommend you to download DockerDesktop if you are on Windows. If you are on Linux, you can refer to the documentation here.
Once it is done, you simply have to execute the following command,
docker run -p 5000:5000 --name draw hichtala/draw:latest
Your installation is now completed. You can press Ctrl+C
and continue to Usage section.
You need python to be installed. Python installation isn't going to be detailed here, you can refer to the documentation.
We first need to install pytorch. It is recommended to use a package manager such as miniconda. Please refer to the documentation.
When everything is set up you can run the following command to install pytorch:
python -m pip install torch torchvision
If you want to use you gpus to make everything run faster, please refer the documentation
Then you just have to clone the repo and install requirements
:
git clone https://github.com/HichTala/draw
cd draw
python -m pip install -r requirements.txt
Your installation is now completed.
Usage
Now to use it you need to download the models and the data, in section Models and Data.
Once you have it, follow instruction depending on you have docker or classic installation. Put all the model in the same folder, and keep the dataset as it is
You have to copy the data and models in the container. Execute the following command:
docker cp path/to/dataset/club_yugioh_dataset draw:/data
docker cp path/to/model/folder draw:/models
Once it is done you just have to run the command:
docker start draw
open the adress localhost:5000
, and enjoy the maximum. Refer bellow for details about parameters
You need to modify the config.json
file by putting the paths of you dataset folder in "data_path"
parameter
and the path to model folder in "trained_models"
parameter.
Once done, just run:
flask --app app.py run
open the adress localhost:5000
, and enjoy the maximum. Refer bellow for details about parameters
- In the first parameter, the one with gears, put the
config.json
file - In the second parameter, the one with a camera, put the video you want to process (leave it empty to use your webcam)
- In the last one, put your deck list in the format
ydk
Then you can press the button and start the process !
Models
In this project, the tasks were divided so that one model would locate the card and another model would classify them. Similarly, to classify the cards, I divided the task so that there is one model for each type of card, and the model to be used was determined by the color of the card.
Models can be downloaded in Hugging Face.
Models starting with beit
stands for classification and the one starting with yolo
for localization.
For now only models for "retro" gameplay are available but the ones for classic format play will be added soon. I considered "retro" format all cards before the first syncro set, so all the cards edited until Light of Destruction set (LODT - 05/13/2008) set and all speed duel cards.
Data
To create a dataset, the YGOPRODeck api was used. Two datasets were thus created, one for "retro" play and the other for classic format play. Just as there is a model for each type of card, there is a dataset for each type of card.
Dataset can be downloaded in Hugging Face.
For now only "retro" dataset is available, but the one for classic format play will be added soon.
This project is inspired by content creator SuperZouloux's idea of a hologram bringing Yu-Gi-Oh! cards to life. His project uses chips inserted under the sleeves of each card, which are read by the play mat, enabling the cards to be recognized.
Inserting the chips into the sleeves is not only laborious, but also poses another problem: face-down cards are read in the same way as face-up ones. So an automatic detector is a really suitable solution.
Although this project was discouraged by KONAMI ®, the game's publisher (which is quite understandable), we can nevertheless imagine such a system being used to display the cards played during a live duel, to allow spectators to read the cards.
Although to my knowledge draw
is the first detector capable of locating and detecting Yu-Gi-Oh! cards in a dueling environment,
other works exist and were a source of inspiration for this project. It's worth mentioning them here.
Yu-Gi-Oh! NEURON is an official application developed by KONAMI ®. It's packed with features, including cards recognition. The application is capable of recognizing a total of 20 cards at a time, which is very decent. The drawback is that the cards must be of good quality to be recognized, which is not necessarily the case in a duel context. What's more, it can't be integrated, so the only way to use it is to use the application.
yugioh one shot learning made by vanstorm9
is a
Yu-Gi-Oh! cards classification program that allow you to recognize cards. It uses siamese network to train its classification
model. It gives very impressive results on images with a good quality but not that good on low quality images, and it
can't localize cards.
Yolov8 is the last version of the very famous yolo
family of object detector models.
I think it doesn't need to be presented today, it represents state-of-the-art real time object detection model.
BEiT is a pre-trained model for image classification. It uses image transofrmers
which are based on attention mechanism. It suits our problem because authors also propose a pre-trained model in Imagenet-22K
.
It is a dataset with 22k classes (more than most classifiers) which is interesting for our case since there is mode than 11k cards in Yu-Gi-Oh!.
A medium blog post explainng the main process from data collection to final prediction has been written. You can access it at this adress. If you have any questions, don't hesitate to open an issue.
You can reach me on Twitter @tiazden or by email at [email protected].