Convert an image containing Magic cards to decklist
Project description
MTGScan
MTGScan uses OCR recognition to list Magic cards from an image.
After OCR, cards are looked up in a dictionnary provided by MTGJSON (https://mtgjson.com), using fuzzy search with SymSpell (https://github.com/wolfgarbe/SymSpell).
Try it online: https://qfmtgscanapp.azurewebsites.net (wait for the app to start - Azure free tier automatically shuts down the app when idle). Repository for this app: https://github.com/fortierq/mtgscan-app.
Prerequisites
- Python >= 3.7
- Credentials for the required OCR (e.g Azure Computer Vision Read API)
Installation
... with Poetry
poetry install
... with requirements
pip install -r requirements.txt
... with pip
pip install mtgscan
OCR
Currently, only Azure OCR is supported. To add an OCR, inherit mtgscan.ocr.OCR.
Azure
API subscription key and endpoint must be stored in environment variables AZURE_VISION_KEY
and AZURE_VISION_ENDPOINT
respectively.
Steps:
- Subscribre for a free Azure account: https://azure.microsoft.com/free/cognitive-services
- Create a Computer Vision resource: https://portal.azure.com/#create/Microsoft.CognitiveServicesComputerVision
- Get your key and endpoint
Tests
Every test case is stored in a separated folder in tests/samples/ containing:
- image.*: image of Magic cards
- deck.txt: decklist of the cards on the image
To run every test:
poetry run python tests/test.py
This produces the following outputs, for each sample and OCR:
- statistics about number of cards found, number of errors...
- test.log: informations about the run
- errors.txt: history of the number of errors made by the OCR
- box_texts.txt: output of the OCR
Basic usage
Let's compute the decklist from the following screenshot:
from mtgscan.text import MagicRecognition
from mtgscan.ocr.azure import Azure
azure = Azure()
rec = MagicRecognition(file_all_cards="all_cards.txt", file_keywords="Keywords.json") # download card files from mtgjson if missing
box_texts = azure.image_to_box_texts("https://user-images.githubusercontent.com/49362475/105632710-fa07a180-5e54-11eb-91bb-c4710ef8168f.jpeg")
deck = rec.box_texts_to_deck(box_texts)
print(deck)
Output:
4 Ancient Tomb
4 Mishra's Factory
4 Mishra's Workshop
1 Strip Mine
1 Tolarian Academy
4 Wasteland
1 Sacrifice
1 Mox Ruby
1 Mox Emerald
1 Mox Jet
1 Mox Pearl
1 Mox Sapphire
1 Black Lotus
1 Mana Crypt
1 Sol Ring
4 Phyrexian Revoker
4 Arcbound Ravager
1 Thorn of Amethyst
4 Sphere of Resistance
4 Foundry Inspector
3 Chief of the Foundry
1 Trinisphere
1 Lodestone Golem
1 Mystic Forge
2 Fleetwheel Cruiser
1 Traxos, Scourge of Kroog
4 Walking Ballista
3 Stonecoil Serpent
1 Chalice of the Void
3 Mindbreak Trap
4 Leyline of the Void
2 Crucible of Worlds
4 Pithing Needle
2 Wurmcoil Engine
Features
- Tested on MTGO, Arena and IRL (simple) images
- Handle sideboard (only on the right side)
- Support for stacked cards
TODO
- Add and compare OCR (GCP, AWS...)
- Add Twitter bot and web service
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file mtgscan-1.0.6.tar.gz
.
File metadata
- Download URL: mtgscan-1.0.6.tar.gz
- Upload date:
- Size: 10.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.4 CPython/3.8.5 Linux/5.8.0-48-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7a7c69fee5506580bb6e9ec0ff5db259d841d9901397490a4f1692806862e26a |
|
MD5 | fad044cb028ae6ad2edfbdfd0d495a87 |
|
BLAKE2b-256 | eaee91820676332641791ff6e40530cbaa8af3bef4b0641768da17d966b3c3ac |
File details
Details for the file mtgscan-1.0.6-py3-none-any.whl
.
File metadata
- Download URL: mtgscan-1.0.6-py3-none-any.whl
- Upload date:
- Size: 9.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.4 CPython/3.8.5 Linux/5.8.0-48-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d7eae93861d8ecce5bdfb1b664e29172ae9bb420275e844aa0b3d86bcd0e30cd |
|
MD5 | f0d8d2fb60c00cd5a4d69a651401ace1 |
|
BLAKE2b-256 | 84abc48fc8761e22dceb171e62c962462cd316f1c6d7b2de5049afa9d44ae33d |