这个项目是个用YOLO11模型搞扑克牌检测和分析的玩意儿,简单说就是让电脑能认出牌桌上的牌,还能帮玩家算各种牌型的概率,挺实用的。
首先说核心的牌检测部分。作者用了扑克牌数据集来训练YOLO11模型——这个数据集里应该都是各种角度、场景下的扑克牌图片。训练是在谷歌Colab的T4 GPU上跑的,花了3个多小时,跑了30轮(专业叫“epochs”)。训练效果还挺好,从数据看,不管是识别准确率(Box§)、召回率(R)还是综合评分(mAP50)都快到1了,说明模型基本能准确认出各种牌。
训练好之后,作者写了个叫detect_cards.py的脚本,专门用来做检测。用的时候很简单,只要导入脚本里的函数,给张图片路径和训练好的模型权重文件(存在weights文件夹里,叫poker_best.pt),就能查出图里有几张牌,还能按从左到右的顺序列出来,甚至能把简写(比如2C、7H)转换成“梅花2”“红桃7”这种大白话。而且这脚本速度也还行,普通3.4GHz的CPU,不用ONNX加速的话,每张图处理大概160毫秒;用上ONNX加速,能快到105毫秒,日常用完全够了。不过有个小注意点,因为训练时用的是正方形图片,所以模型在正方形图片上,而且牌在画面中间的时候,识别效果最好。作者还放了几个实际测试的例子,比如牌挨得近、离得远,还有拍桌面特写的情况,效果都挺不错。
除了认牌,这个项目还有个更实用的功能——帮玩家分析牌型概率,靠的是analyze_hands.py这个脚本。具体来说,就是先让模型识别出桌上的公共牌(table_cards)和玩家手里的牌(player_cards),然后把这两类牌输进脚本里,脚本就能算出能组成各种牌型的概率。比如作者给的例子里,桌上是方块3和梅花3,玩家手里是黑桃3和红桃3,脚本就会算出“四条”(四张一样的牌)的概率是100%,“葫芦”(三张加一对)是18%;还有桌上是黑桃6、红桃2、黑桃3,玩家手里是黑桃4、红桃5的情况,脚本能算出“顺子”概率100%,“同花顺”4%——玩家看了这个概率,就能大概知道自己手牌的强度,打起来心里有数。
项目文件也整理得挺清楚,除了刚才说的两个核心脚本,还有两个Jupyter Notebook里是模型训练的完整代码,想复现训练过程的话看这个;Poker_Hand_Inference.ipynb是用来做推理和画结果图的,能直观看到检测效果。另外还有images文件夹,放的是测试图片和结果图;__pycache__是Python自动生成的缓存文件,不用管;。
基于深度学习cnn的扑克牌检测 扑克牌识别 YOLO11的扑克牌检测-数据集+模型-目标检测图像数据集