Scanner/organisateur de cartes à échanger
Créer un inventaire numérique de vos échanges /cartes à collectionner utilisant Lego et un Raspberry Pi.
Histoire
J'aimais beaucoup les cartes à collectionner quand j'étais enfant. Je suis récemment tombé sur beaucoup de cartes Magic The Gathering dans une boîte et je me suis dit :je me demande combien de cartes j'ai et combien elles valent ?! La journalisation et la recherche manuelle de ces éléments prendraient un certain temps, j'ai donc décidé de voir si je pouvais automatiser une partie du processus. D'une manière ou d'une autre, le processus a conduit à utiliser un Raspberry Pi, à créer une plate-forme à partir de Lego et à tirer parti d'AWS S3/Rekognition !
Le processus
- Prenez une photo du titre de la carte à l'aide d'un Raspberry Pi, d'une caméra RPi et d'une plate-forme Lego
- Télécharger les images dans un compartiment AWS S3 pour le stockage et le traitement
- Utilisez AWS Rekognition pour extraire du texte de l'image et l'interroger par rapport à une API de tarification pour obtenir le prix du marché de chaque carte
J'avais beaucoup de travail à faire...
La plate-forme Lego
Je ne suis pas douée pour le travail du bois et j'ai pensé que cela pourrait être difficile sur les cartes. Au lieu de cela, j'ai décidé d'utiliser des Lego et j'ai donc acheté un bac moyen que vous pouvez vous procurer chez plusieurs détaillants. Je me suis mis au défi de ne m'en tenir qu'à cette boîte - aucun autre support, d'où la raison pour laquelle cette chose semble nue. Ce projet ne montrera pas comment le construire brique par brique, mais il devrait y avoir suffisamment d'images ici pour pouvoir le reproduire ou le rendre encore meilleur ! Le design a été inspiré par un trieur de cartes bon marché à 7 $ que j'ai eu il y a des années. Le servo à l'arrière est capable de tourner en continu et de déplacer les pneus vers l'avant dans une configuration simple semblable à un rouage. La roue à l'avant qui dépasse de la pièce vert foncé sert à empêcher les autres cartes de glisser. Il y a juste assez de place pour sortir une carte à la fois. J'ai également utilisé quelques cartes collées ensemble pour garder suffisamment de poids sur les cartes pour m'assurer qu'une seule est sortie. Divulgation complète - vous remarquerez dans la première vidéo qu'une photo a été prise alors que la carte n'était pas en place. Cela arrivait de temps en temps, mais il était trivial de supprimer les images vierges.
Le servo arrière tournera pour déplacer les roues vers l'avantVue aérienneVue avant. Notez que le petit servo à l'avant n'est pas connecté - il est calé contre la base et les colonnes grises Le servomoteur avant est simplement coincé entre les plaques bleues inférieures et les colonnes grises J'ai collé quelques cartes ensemble pour garder le poids sur les cartes afin qu'une seule carte sortir
La caméra repose sur une pile de briques positionnée à quelques centimètres de la plate-forme, inclinée de manière à s'aligner avec la position de la carte. La résolution a été modifiée avec du code pour capturer le haut de la partie de la carte.
La longueur du ruban était un peu pénible à gérer – je recommanderais d'en obtenir un plus long.
Le matériel
Raspberry Pi était le meilleur choix pour ce projet car j'allais devoir exécuter python pour les périphériques. Les autres choses dont nous avons besoin sont deux servomoteurs et une caméra. J'ai une alimentation 5V connectée à la maquette - pas obligatoire mais utile.
Le Code
Le code est entièrement écrit en python 2.7. Un script sert à alimenter les servos et à prendre la photo; l'autre sert à traiter les images stockées dans S3 contre Rekognition.
Une fois nos cartes chargées sur la plateforme Lego, nous pouvons simplement faire :
python mtg_servo.py
Cela va démarrer les servos et scanner les cartes. Une fois que c'est fait, nous pouvons quitter le script et en charger plus. J'étais capable de faire environ 20-25 cartes par minute. L'
AWS S3 et reconnaissance
J'ai essayé de faire de l'OCR avec tesseract et OpenCV. Bien que les deux soient des outils incroyables, Rekognition s'est avéré beaucoup plus facile à utiliser. Cela a permis beaucoup de flexibilité pour le positionnement, l'éclairage, la distance, etc. Vous aurez besoin d'un compte AWS pour le faire qui est gratuit. Amazon est assez généreux avec son offre gratuite AWS – vous pouvez traiter 5 000 images par mois. J'ai téléchargé les fichiers S3 manuellement pour gagner du temps (non illustré mais voici un guide). Le compartiment s3 a été configuré exactement comme le répertoire actuel - /set_name/file.jpg. Les captures d'écran ci-dessous montrent la version de démonstration de Rekognition traitant certaines des photos prises. Vous remarquerez qu'il est incroyablement précis, malgré tout problème avec la photo.
Sample CaptureSample Capture
Nous pouvons automatiser ce processus ! Une fois que toutes les cartes ont été téléchargées dans le bucket, nous pouvons exécuter le code ci-dessous pour générer notre texte détecté dans un fichier csv :
python Rekognize_S3.py
Voici les résultats du traitement de l'image. Je n'ai aucun doute que cela aurait été beaucoup plus élevé si les images avaient été de meilleure qualité. Les deux autres principaux problèmes que j'ai rencontrés étaient (1) la police - de nombreuses polices avaient des caractères faussement proches de là où même j'avais du mal à les déchiffrer et (2) l'éclairage. Sur les 920 cartes que j'ai scannées :
- 619 étaient exacts (67,3 %)
- 201 étaient décalés d'une lettre (21,8 %)
- 100 étaient décalés de plus d'une lettre (10,9 %)
Doux ! Après cela, j'ai écrit un script python rapide pour accéder à l'API de TCGplayer pour le prix du marché des cartes *. Au final, j'avais pour environ 275 $ de communs, d'inhabituels et de rares ! (J'ai retiré toutes les cartes dont je savais qu'elles valaient déjà de l'argent)
*Modifier le 27/05/2018 : J'ai mis à jour le script Rekognition pour exécuter le texte détecté par rapport à l'API du TGCplayer en temps réel (et en écrivant dans un fichier). Gardez à l'esprit qu'il existe un processus de candidature pour l'API.
Clôture
J'espère que cela vous inspirera à sortir ces vieilles cartes et à faire quelque chose avec elles ! Je prévois de recommencer avec des cartes de sport et divers autres ensembles. Bonne numérisation !
Source : Scanner/organisateur de cartes à collectionner
Processus de fabrication