IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 杀鸡用牛刀!通过YOLOv5识别斗地主牌型,做一个AI记牌器,再也不用担心如何算牌赢豆了! -> 正文阅读

[人工智能]杀鸡用牛刀!通过YOLOv5识别斗地主牌型,做一个AI记牌器,再也不用担心如何算牌赢豆了!

目录

前言

一、YOLOv5环境配置

二、制作自己的扑克牌数据

1.采集扑克牌数据

2.通过labelimg进行数据标注

3. 划分训练集和验证集

三、训练扑克牌数据集

1.修改数据和模型配置文件

1.1 修改数据配置文件

1.2 修改模型配置文件

2.使用yolov5s.pt预训练模型进行训练

四、使用训练好的预训练模型进行测试

五、下一步工作


前言

最近在CSDN上看到一个很火的开源项目《斗地主老是输?一起用Python做个AI出牌器,欢乐豆蹭蹭涨!》,作者Dragon少年也分享了源代码,确实很好用,但是在扑克牌牌型识别的时候由于使用的是特定模板匹配,所以只适用于某游戏大厅的欢乐斗地主,而无法识别某手游助手的欢乐斗地主。

某游戏大厅欢乐斗地主:可以识别牌型?

?某手游助手欢乐斗地主:无法识别牌型

可以看到两者之间扑克牌牌型确实存在差异,所以通过特定模板匹配肯定无法识别出来。于是考虑通过神经网络进行扑克牌型识别,从而可以针对不同平台的斗地主进行扑克牌牌型识别,通用性更强。

由于该过程分为两个过程,一是定位到扑克牌数字或者字母位置,二是对相应位置上的图像进行牌型分类。经过一系列比较与试验,最终选择了YOLOv5进行扑克牌目标检测与识别

一、YOLOv5环境配置

本教程所用环境:代码版本V3.0,源码下载地址:https://github.com/ultralytics/yolov5.git

通过git clone https://github.com/ultralytics/yolov5.git,将YOLOv5源码下载到本地,然后配置虚拟环境:conda create -n yolov5 python==3.7,在YOLOv5中尽量使用python3.7。创建好虚拟环境,并通过pip install -r requirements.txt安装依赖包。

项目的测试平台为:
操作系统:windows10
IDE:Spyder
python版本:anaconda Pyhon3.7
pytorch版本:torch 1.9.1
cuda版本:10.1
显卡:RTX 2080 Ti

二、制作自己的扑克牌数据

1.采集扑克牌数据

分为三类数据:手牌、底牌、出牌。

由于牌型特征明显,所以仅需要针对每一类采集少量数据进行标注,就能取得较好效果,采集结果如下图所示:

2.通过labelimg进行数据标注

由于第一次安装labelimg时,其中安装的pyqt5库与Spyder发生冲突,导致无法打开Spyder界面,折腾了很久才弄好。

所以建议新建一个虚拟环境,避免发生冲突。

(1)在Anaconda Prompt建立建立一个安装labelImg的python虚拟环境;

conda create -n LabelIMG python==3.7

(2)然后激活该环境?

activate LabelIMG

(3)打开标注工具LabelImg

我们要标定数据的时候,一般是已经制定好了要标注物体的类别,这样在打开LabelImg之后,我们只要框定目标之后,选择要对应的标签即可。

labelimg cards predefined_classes.txt

其中cards为存放采集数据的文件夹,predefined_classes.txt为存放标注物体的类别的文本文件。

具体labelimg使用可以参考目标检测使用LabelImg标注VOC数据格式和YOLO数据格式——LabelImg使用详细教程

PS:注意直接选择存储为YOLO格式,即标注数据最终保存为txt格式。

3. 划分训练集和验证集

数据集标注好之后,存放如下目录格式:

pokercard
├── images
│ ? ├── train ? ? ? ?# 训练集图片,这里我只列举几张示例
│ ? │ ? ├── 1.png
│ ? │ ? ├── 2.png
│ ? │ ? └── 3.png
│ ? └── val ? ? ? ? ?# 验证集图片
│ ? ? ? ├── t1.png
│ ? ? ? ├── t2.png
│ ? ? ? └── t3.png
└── labels ? ? ? ? ? ? ??
? ? ├── train ? ? ? ?# 训练集的标签文件
? ? │ ? ├── 1.txt
? ? │ ? ├── 2.txt
? ? │ ? └── 3.txt
? ? └── val2 ? ? ? ? # 验证集的标签文件
? ? ? ? ├── t1.txt
? ? ? ? ├── t2.txt
? ? ? ? └── t3.txt
?

  • pokercard:存放数据的目录,该目录与YOLOv5目录同一级
  • images:目录下存放的是图片,包含训练集和验证集图片
  • labels:目录下存放的是标签文件,包含训练集和验证集图片对应的标签文件

三、训练扑克牌数据集

1.修改数据和模型配置文件

1.1 修改数据配置文件

原先的配置文件为:./yolov5/data/coco128.yaml。

我们把将文件复制一份,重命名为pokercard.yaml。

然后在pokercard.yaml中需要修改3处内容:

(1)训练集和验证集图片的路径

train: ../pokercard/images/train?
val: ../pokercard/images/val??

(2)修改类别数nc

nc: 15  # number of classes

(3)修改类别列表,把类别修改为自己的类别

names: [ 'A','2','3', '4', '5','6', '7','8',  '9', '10','J','Q','K','xjk','djk']  # class names

修改后的pokercard.yaml完整配置内容如下:

# YOLOv5 🚀 by Ultralytics https://ultralytics.com, licensed under GNU GPL v3.0
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017)
# Example usage: python train.py --data coco128.yaml
# parent
# ├── yolov5
# └── datasets
#     └── coco128  ← downloads here


# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
# path: ../datasets/coco128  # dataset root dir
# path:
train: ../pokercard/images/train # train images (relative to 'path') 128 images
val: ../pokercard/images/val  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
nc: 15  # number of classes
names: [ 'A','2','3', '4', '5','6', '7','8',  '9', '10','J','Q','K','xjk','djk']  # class names


# Download script/URL (optional)
# download: https://github.com/ultralytics/yolov5/releases/download/v1.0/coco128.zip

1.2 修改模型配置文件

修改模型配置文件,这里我使用的是yolov5\models\yolov5s.yaml。

因此,在yolov5s.yaml中只需要修改一处,把nc修改为自己的类别数即可。

nc : 15

2.使用yolov5s.pt预训练模型进行训练

训练命令:

python train.py --img 640 --batch 8 --epochs 500 --data data/pokercard.yaml --cfg ./models/yolov5s.yaml --weights ./weights/yolov5s.pt

?训练结果:

训练结束后,会生成两个预训练的模型:

  • best.pt:保存的是中间一共比较好模型
  • last.pt:训练结束后保存的最后模型

四、使用训练好的预训练模型进行测试

推理目录下图片集命令,将检测中有些图片置信度比较低的通过--conf-thres以及--iou-thres参数过滤掉:

python detect.py --source data/images --weights best.pt --conf-thres 0.5 --iou-thres 0.5

测试结果如下所示:?

?

可以看到不管是手牌、底牌还是出牌的牌型都识别出来了,而且不管是哪个平台的欢乐斗地主都可以。

完美!!!

五、下一步工作

接下来就是如何在AI记牌器中融入YOLOv5牌型检测与识别模型,从而再也不用担心记牌、算牌,去赢取大量欢乐豆了!!!从此走上豆豆巅峰!!!


今天我们就到这里,明天继续努力!未完待续!

感谢H师姐的鼎力相助!!!

如果该文章对您有所帮助,麻烦点赞,关注,收藏三连支持下!

创作不易,白嫖不好,各位的支持和认可,是我创作的最大动力!

如果本篇博客有任何错误,请批评指教,不胜感激 !!!


参考:

斗地主老是输?一起用Python做个AI出牌器,欢乐豆蹭蹭涨!

YOLOv5训练自己的数据集(超详细完整版)

目标检测使用LabelImg标注VOC数据格式和YOLO数据格式——LabelImg使用详细教程

YOLOv5的详细使用教程,以及使用yolov5训练自己的数据集

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 21:46:06  更:2021-08-07 21:46:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 21:48:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码