交易卡扫描仪/组织者
创建交易的数字库存/使用乐高和树莓派收集卡片。
故事
我小时候真的很喜欢集换式卡片。我最近在一个盒子里看到了很多万智牌聚会卡,心里想——我想知道我有多少张卡,它们值多少钱?!手动记录和查找这些需要一段时间,所以我决定看看我是否可以自动化一些过程。不知何故,这个过程导致使用 Raspberry Pi、用乐高构建平台并利用 AWS S3/Rekognition!
流程
- 使用 Raspberry Pi、RPi 相机和乐高平台为卡片的标题拍照
- 将图片上传到 AWS S3 存储桶进行存储和处理
- 使用 AWS Rekognition 从图片中提取文本并针对定价 API 进行查询以获取每张卡的市场价格
我有很多工作要做……
乐高平台
我不擅长木工,我认为它可能在卡片上很粗糙。相反,我决定使用乐高,所以我买了一个中号垃圾箱,你可以在几家零售商处买到。 我挑战自己只坚持这个盒子 - 没有其他支持,因此为什么这东西看起来很简单。 这个项目不会展示如何一砖一瓦地建造它,但这里应该有足够的图片来复制它或让它变得更好!该设计的灵感来自我多年前购买的廉价卡片分类器,价格为 7 美元。后面的伺服系统能够以简单的齿轮状设置连续旋转并向前移动轮胎。前面的轮子从深绿色的棋子上伸出来,是为了防止其他卡片滑出。有足够的空间一次推出一张卡。我还用了几张贴在一起的卡片来保持卡片上的足够重量,以确保只有一张出来。完全披露 - 您会在第一个视频中注意到,当卡不在位时拍摄了一张照片。这种情况时有发生,但删除空白图片是微不足道的。
后伺服将旋转以将轮子向前移动Overhead ViewFront 视图。请注意,前面的小伺服器未连接 - 它楔入底座和灰色柱子前伺服电机只是楔入底部蓝色板和灰色柱子之间我将几张卡片粘在一起以保持卡片上的重量,因此只有一张卡片可以出来
相机位于离平台几英寸远的一堆砖块上,倾斜的角度与卡片的位置对齐。分辨率已用代码修改为捕获卡片顶部的部分。
丝带的长度处理起来有点麻烦——建议买一根更长的。
硬件
Raspberry Pi 是这个项目的最佳选择,因为我需要为外围设备运行 python。我们需要的其他东西是两个伺服电机和一个摄像头。我有一个 5V 电源连接到面包板 - 不是强制性的,但很有帮助。
代码
代码完全使用python 2.7编写。一个脚本用于为伺服器供电并拍照;另一个是针对Rekognition处理存储在S3中的图片。
将卡片加载到乐高平台后,我们可以简单地执行以下操作:
python mtg_servo.py
这将启动伺服系统并扫描卡片。完成后,我们可以退出脚本并加载更多。我每分钟可以做大约 20-25 张卡片。
AWS S3 和 Rekognition
我尝试使用 tesseract 和 OpenCV 进行 OCR。虽然两者都是出色的工具,但事实证明 Rekognition 更易于使用。它为定位、照明、距离等提供了很大的灵活性。您需要一个 AWS 账户才能做到这一点,这是免费的。亚马逊对其 AWS 免费套餐非常慷慨——您每月可以在其下处理 5,000 张图片。为了节省时间,我手动上传了 S3 文件(未显示,但这里有一个指南)。 s3 存储桶的设置与当前目录完全一样 - /set_name/file.jpg。下面的屏幕截图显示了 Rekognition 的演示版处理拍摄的一些照片。您会注意到它非常准确,尽管照片有任何问题。
Sample CaptureSample Capture
我们可以自动化这个过程!将所有卡片上传到存储桶后,我们可以运行以下代码将检测到的文本输出到 csv 中:
python Rekognize_S3.py
这是图像处理的结果。我毫不怀疑,如果图片质量更好,这会高得多。我遇到的另外两个主要问题是 (1) 字体——许多字体的字符看起来很接近,即使我也很难破译它们,以及 (2) 照明。在我扫描的 920 张卡片中:
- 619 个准确 (67.3%)
- 201 只差一个字母 (21.8%)
- 超过 100 个字母减少了 100 个 (10.9%)
甜!之后,我编写了一个快速的 Python 脚本来访问 TCGplayer 的 API,以获取卡片的市场价格*。最后,我拥有价值约 275 美元的普通、非普通和稀有! (我把我知道的已经值钱的卡都删了)
*编辑 05/27/18: 我已经更新了 Rekognition 脚本,以针对 TGPlayer 的 API 实时运行检测到的文本(并写入文件)。请记住,API 有一个申请流程。
结束
我希望这能激励你打破那些旧卡片并用它们做点什么!我计划用运动卡和其他各种套装再次这样做。扫描愉快!
来源: 交易卡扫描仪/组织者
制造工艺