高质量扑克牌识别数据集:99.5%识别率,3083张精准标注图像
本数据集专为扑克牌识别任务设计,包含3083张高质量扑克牌图像,在YOLO系列模型上实现了高达99.5%的识别准确率。数据集支持多种主流标注格式,包括YOLO格式、COCO JSON和PASCAL VOC XML,满足不同深度学习框架的需求。文末提供了完整的模型训练和验证代码,方便研究人员和开发者快速上手。
数据集核心价值与应用场景
- 计算机视觉教学与研究:为图像分类、目标检测算法提供标准化的评估基准
- 游戏开发与娱乐应用:可用于开发扑克牌识别游戏、自动计分系统等娱乐应用
- 智能监控与安防:适用于赌场监控、游戏厅管理等场景的自动识别系统
- 算法性能对比:为不同目标检测算法提供公平的性能对比平台
- 数据增强研究:包含模糊样本,适合研究数据增强策略对模型性能的影响
模型训练指标参数:

模型训练图:

数据集拆分与预处理
数据集划分
本数据集共包含3083张扑克牌图像,按照机器学习标准划分为训练集、验证集和测试集:
- 训练集:2697张图像(约87.5%)
- 验证集:257张图像(约8.3%)
- 测试集:129张图像(约4.2%)
数据预处理流程
为确保数据质量和模型训练效果,我们对所有图像进行了标准化预处理:
- 自动定向校正:应用自动方向校正,确保所有图像方向一致
- 尺寸标准化:将所有图像统一调整为640×640像素,保持长宽比
- 格式统一:转换为RGB格式,确保色彩空间一致性
数据增强策略
本数据集采用以下数据增强策略提升模型泛化能力:
- 自然模糊样本:包含真实场景中的模糊图像
- 多角度拍摄:涵盖不同拍摄角度和光照条件
- 背景多样性:包含纯色和复杂背景样本
这些增强策略有助于模型学习更本质的特征,而非过度依赖特定场景下的视觉线索。
数据集标签体系
标签命名规范
本数据集采用标准的扑克牌命名规范,包含52个类别,对应一副标准扑克牌的所有牌面。
花色表示
| 英文花色 | 词源 | 中文标准叫法 |
|---|---|---|
| Trefoils | 法语 trèfle | 梅花 |
| Spades | 英语 | 黑桃 |
| Diamonds | 英语 | 方块 |
| Hearts | 英语 | 红桃 |
点数表示
- A:Ace(尖)
- 2-10:数字牌
- J:Jack(勾)
- Q:Queen(圈)
- K:King(凯)
完整标签列表
| 序号 | 英文牌名 | 中文名称 | 序号 | 英文牌名 | 中文名称 |
|---|---|---|---|---|---|
| 1 | 7 Trefoils | 梅花7 | 27 | Q Spades | 黑桃Q |
| 2 | 4 Trefoils | 梅花4 | 28 | A Hearts | 红桃A |
| 3 | 2 Spades | 黑桃2 | 29 | 7 Diamonds | 方块7 |
| 4 | 4 Spades | 黑桃4 | 30 | 9 Hearts | 红桃9 |
| 5 | 5 Spades | 黑桃5 | 31 | Q Trefoils | 梅花Q |
| 6 | 3 Spades | 黑桃3 | 32 | 7 Hearts | 红桃7 |
| 7 | A Diamonds | 方块A | 33 | 6 Trefoils | 梅花6 |
| 8 | J Diamonds | 方块J | 34 | 8 Hearts | 红桃8 |
| 9 | Q Hearts | 红桃Q | 35 | 6 Hearts | 红桃6 |
| 10 | 10 Hearts | 红桃10 | 36 | A Trefoils | 梅花A |
| 11 | A Spades | 黑桃A | 37 | 4 Diamonds | 方块4 |
| 12 | 9 Diamonds | 方块9 | 38 | J Hearts | 红桃J |
| 13 | 3 Hearts | 红桃3 | 39 | K Hearts | 红桃K |
| 14 | 5 Hearts | 红桃5 | 40 | 9 Trefoils | 梅花9 |
| 15 | 3 Diamonds | 方块3 | 41 | 2 Hearts | 红桃2 |
| 16 | 10 Trefoils | 梅花10 | 42 | 4 Hearts | 红桃4 |
| 17 | 3 Trefoils | 梅花3 | 43 | J Trefoils | 梅花J |
| 18 | 8 Diamonds | 方块8 | 44 | 6 Diamonds | 方块6 |
| 19 | 10 Diamonds | 方块10 | 45 | Q Diamonds | 方块Q |
| 20 | 9 Spades | 黑桃9 | 46 | 5 Diamonds | 方块5 |
| 21 | 2 Diamonds | 方块2 | 47 | K Trefoils | 梅花K |
| 22 | 7 Spades | 黑桃7 | 48 | 8 Spades | 黑桃8 |
| 23 | 2 Trefoils | 梅花2 | 49 | 6 Spades | 黑桃6 |
| 24 | 8 Trefoils | 梅花8 | 50 | J Spades | 黑桃J |
| 25 | K Spades | 黑桃K | 51 | 5 Trefoils | 梅花5 |
| 26 | 10 Spades | 黑桃10 | 52 | K Diamonds | 方块K |
标注质量保证
- 双重标注机制:每张图像由两名专业标注员独立标注
- 一致性校验:定期进行标注一致性评估,确保标注准确率>99%
- 错误修正流程:建立标注错误反馈和修正机制,持续优化数据质量
数据集图片和标注信息示例
数据样本特点
数据集包含多样化的扑克牌图像,具有以下特点:
- 拍摄角度多样:包含正面、侧面、倾斜等多种拍摄角度
- 光照条件丰富:涵盖自然光、室内光、弱光等多种光照环境
- 背景复杂度:包含纯色背景、复杂背景等多种场景
- 图像质量:包含清晰和模糊样本,模拟真实应用场景
标注信息展示
每张图像都提供完整的标注信息,包括:
- 边界框坐标:精确标注每张扑克牌的位置
- 类别标签:对应52种扑克牌类别
- 置信度评分:标注质量的量化评估
- 图像质量评估:对图像清晰度、对比度等进行评分
模糊样本说明
数据集中包含部分模糊图片,这是精心设计的数据增强策略,具有以下优势:
-
提升模型鲁棒性:现实场景中可能存在运动模糊、对焦不准或光线不足的情况。在训练集中引入模糊样本,可以迫使模型学习更本质的特征,而不是过度依赖清晰的边缘或纹理细节,从而提升模型在复杂、非理想成像条件下的识别能力。
-
模拟真实世界噪声:监控摄像头、手机等设备在低光照或快速移动时极易产生模糊。包含此类图片的数据集能让模型提前适应这种噪声,减少在实际部署时因图像质量下降而导致的性能骤降。
-
防止模型过拟合:如果训练集全是高清、摆拍的完美图片,模型容易记住这些特定场景下的"干净"特征,而对新的、稍有模糊的图片泛化能力差。模糊图片作为一种有效的正则化手段,可以增加数据分布的多样性,防止模型过拟合到有限的清晰样本上。
总结 :数据集中包含的模糊图片,与"水平翻转"、"剪切形变"、"随机遮挡"等增强操作一样,都是为了构建一个更接近真实世界复杂分布的数据环境,从而训练出更健壮、更泛化、更实用的模型。
示例图像展示

图1:清晰扑克牌样本展示

图2:模糊扑克牌样本展示

图3:模拟模糊场景,加入马赛克效果

图4:多角度拍摄的扑克牌样本

图5:复杂背景下的扑克牌识别

图6:模型在测试集上的推理结果
数据集下载与格式支持
支持的标注格式
本数据集提供三种主流标注格式,满足不同深度学习框架需求:
- YOLO格式:支持YOLOv5/v6/v7/v8/v9/v11/v12/v26等全系列版本
- COCO JSON:符合COCO数据集标准,便于与现有评估工具集成
- PASCAL VOC XML:兼容传统目标检测框架
数据集获取方式
数据集可通过以下渠道获取:
学术研究用途:
- 联系作者获取学术授权
- 提供研究计划和机构信息
商业应用:
- 需获得商业使用许可
- 支持定制化数据服务
教育机构:
- 提供教育版数据集供教学使用
- 配套教学材料和实验指导
使用建议与注意事项
- 环境要求:建议在GPU环境下使用,以获得最佳训练效果
- 数据预处理:数据已按标准流程进行预处理,可直接用于模型训练
- 版本管理:数据集会定期更新,建议关注最新版本
- 版权说明:数据集仅供学习和研究使用,商业用途需获得授权
YOLO模型训练
下载数据集之后解压到当前文件夹,然后将 我的仓库 https://gitcode.com/pbymw8iwm/YOLOProject 里的训练模型脚本复制到文件夹下,假设你使用的是yolov8来训练你就用python train_yolov8.py

模型验证测试情况:
验证测试代码:
python
#需要安装pip install ultralytics
from ultralytics import YOLO
import cv2
# ===================== 1. 加载YOLO模型 =====================
# 自动下载预训练模型(yolov8n最轻量快速),也可换 yolov8s/m/l/x
model = YOLO("best.pt")
# ===================== 2. 推理配置 =====================
image_path = "326_jpg.rf.8ad64cc0668df32c4e5f59b50e899e9c.jpg" # 你的图片路径
save_result = True # 是否保存标注后的图
# ===================== 3. 执行推理 =====================
results = model.predict(
source=image_path,
conf=0.01, # 置信度阈值(低于该值忽略)
save=False, # 关闭默认保存,自定义保存
verbose=False # 关闭冗余日志
)
# ===================== 4. 解析结果:目标区域 + 标注信息 =====================
print("="*50)
print("YOLO 推理结果(目标区域 + 标注信息)")
print("="*50)
# 获取图片(用于绘制框)
img = cv2.imread(image_path)
# 遍历所有检测目标
for idx, result in enumerate(results):
boxes = result.boxes # 所有检测框
for box in boxes:
# ========== 提取目标区域(坐标) ==========
# xyxy: 左上角x, 左上角y, 右下角x, 右下角y
x1, y1, x2, y2 = box.xyxy[0].cpu().numpy()
# 宽高
w = x2 - x1
h = y2 - y1
# ========== 提取标注信息 ==========
cls_id = int(box.cls[0]) # 类别ID
cls_name = model.names[cls_id] # 类别名称
conf = float(box.conf[0]) # 置信度
# ========== 打印信息 ==========
print(f"目标 {idx+1}:")
print(f" 标注类别:{cls_name}")
print(f" 置信度:{conf:.2f}")
print(f" 目标区域坐标:")
print(f" 左上角 ({x1:.1f}, {y1:.1f})")
print(f" 右下角 ({x2:.1f}, {y2:.1f})")
print(f" 宽×高:{w:.1f} × {h:.1f}")
print("-"*30)
# ========== 在图片上绘制检测框 ==========
cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
cv2.putText(img, f"{cls_name} {conf:.2f}",
(int(x1), int(y1)-10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# ===================== 5. 保存/显示结果 =====================
if save_result:
cv2.imwrite("yolo_result.jpg", img)
print("✅ 标注图片已保存为:yolo_result.jpg")
# 显示图片(可选)
cv2.imshow("YOLO Result", img)
#cv2.waitKey(0)
#cv2.destroyAllWindows()