转载请说明出处:
特此声明:此文章仅为 图像识别技术研究
别有用心的朋友请绕道!谢谢!!!
此贴为前面几篇图像识别的衍生帖子,后续会更新更多关于图像识别的技术帖子。有需求的朋友可以关注前面几篇的技术贴!!!!!
网上有很多识别扑克牌的教程,要么讲得不是很清晰,要么就是识别很不准确。我们在实际应用中都需要很准确的识别出扑克牌,不能有一点差错。最近研究一个项目实时识别游戏中的扑克牌,基本上能达到95%以上的识别准确率。
我们常见的扑克牌识别就是就是像素颜色点比对。也就是我们常说的图像二值化,比如下面一张图片。
我们需要在图片里面识别出来,这个2我们首先就要创建这张图片的比对模板。然后将图像去色(即灰度化)。去色是将彩色图像转换成8bit图像的一种操作。我们需要将彩色图像转换成灰度图像以便对其进行二值化。
说得通俗一点一点就是,我们把这个图片有黑色地方标1,白色的地方标0.然后和图片中的每一个地方做对比,然后取相似值最大的第一个地方返回。
通过这种方式我们能图像识别出我们想要的结果。如果说我们需要识别图像就是这种单一的一成不变的,完全没有任何问题。但是我们运用到游戏里面,往往就不是这样的,有可能这个2被放大,被缩小了,被旋转了。我们有该怎么来解决这个问题了。这点很多人可能就会说那我们直接在做几个模板就可以解决这个问题了。还是那句话如果你检测的目标就是2我们可能就很好来处理这个问题工作量也不大。但是我们实际中遇到问题 可能比这个要复杂很多。我们知道一副扑克里面有2----A 还有大鬼小鬼。一共15种类型,我们一个做4种图片。就是几十个模板了,可能到那个时候你就是简单的做图像的模板就会发疯。那我们有没有更好的办法来解决这个问题。。。。。重点来了,这个就是我们今天要讲解的通过深度学习来实现扑克牌的识别。
深度学习就会解决我们这个问题,不管是图像的放大,缩小旋转都是一个固定的特征。我们只要最开始的时候标对这个特征,在图像识别过程中都能很准确的识别。
那我们具体要怎么来实现了这个功能了。我们具体分这几步。
-
通过标注软件来标注,我们标准的这个图像是什么,然后识别出来就是什么。
这个就像小孩出生之后,其实她是不知道一个东西到底叫什么名字的。比如我们给她一个水果,我们告诉她,这个是苹果。可能我们告诉她一次,她下次又会忘记这个水果叫什么。我们只有反复的告诉她这个是苹果。给她不同大小的苹果,让她多次产生记忆,然后加以学习。后面你给她苹果她就知道这个水果是苹果。所以这点我们标注图片就需要很多的图片来标注。
-
对我们所有的标准的图片,加以训练学习。
-
训练之后得到一个模型,这个模型就是我们所有种类特征的一个集合。再计算机中可能就是不同特征的一个函数。
首先我们使用软件标注的时候我们需要建立一个标签类,就是定义好每一个识别出来之后的结果我们用什么来表示。
这单我们就是3-----2就是我们对应的数字,10就用T来表示。大鬼就用D来表示,小鬼就用X来表示。A1-A9就是我们玩家对应的剩余牌的数量,其余就是一些按钮的表示。我想大家应该也能看懂这个东西。这个就是中文加英文的结合体。哈哈哈哈,原谅一个英文不怎么好的程序员。
现在我们的标签分类出来了,现在我们就需要游戏里面去手机图片,这个可能就是一个很大的工作量了,这点就需要很多的图片来标注,因为这个就像小孩一样,你只告诉她一次是肯定不可以的。需要注意的是这点尽量不要使用相同的图片来标准,因为相同的图片所有的信息都是一样的,这点不利于学习。
我们还需要注意一点的事情就是,在标注的时候一定不要标注错误,这个是一个慢工出细活的工作。宁愿前面多花一点时间来做这个事情,也不要后面重复的来检查问题。因为你标注错了,计算机就学习错了,最后识别就会出问题。这个是一个很麻烦得事情,如果后面出错的话,这个是我们长时间的经验告诉我们的。
我们这点用到的标注软件就是labelImg。CSDN一搜就能搜到很多的。
我们接下来的工作就是这样一张一张仔细的标注。千万千万千万不要标注错误,千万千万千万不要标注错误,千万千万千万不要标注错误!!!重要的事情说三遍。标准错了,这个以后有得你受的。
你最后想识别的结果最准确,就尽可能的使用多得图片。我们一个项目基本上至少都要使用500张以上的图片。最后才能达到一个理想的结果。
我们标准完成了之后,我们就可以使用一个训练算法,来训练我们的模型。最后我们调用模型,就能得到我们想要的一个结果。下面给你们看一下我们最后的识别效果。
最后你能看到我们这个效果基本上都是95%以上的准确率。只要你最开始没有标错错误的话,最后训练出来的模型就是没有任何问题的。
在标注的时候还有一点需要注意的,就是如果都出现了牌,如果你程序是不需要识别他的时候就不需要去标准,以免影响程序的正确识别率。就像下面最后的结算界面,玩家剩余的牌,其实在我们游戏过程中我们是不需要了解的。所以我们在抓取图片的时候就不要抓取最后的结算界面。
其实最上面的3张小牌我们也是不需要的,所以在标注的时候我们也不需要标准最上面的小牌,因为小牌的特征不是特别的明显就不需要标准小牌。
最后如果你有什么问题或者是疑问,请留言或者私信,私信必回。只讨论技术研究!!!别有用心的朋友请绕道!谢谢!!!
最后发一个游戏运行起来的实时动态检测结果。
斗地主游戏图像识别演示效果视频
C++ 纯 OpenCV 实现扑牌实时
识别
新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
网上有很多用Open...
智能
扑克牌
识别
软件利用视觉方法检测和
识别
日常
扑克牌
具体花色与数字,快速
识别
牌型并标注结果,帮助计算机完成
扑克牌
对战的前期
识别
步骤。本文详细介绍基于
深度学习
的智能
扑克牌
识别
软件,在介绍算法原理的同时,给出
Python
的实现代码、训练数据集,以及PyQt的UI界面。基于YOLOv5对图像中存在的多目标进行
识别
分类,在界面中可以选择各种图片、视频进行检测
识别
;博文提供了完整的
Python
代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接。
本文主要分为两部分,第一部分为使用moblienetv2 ssd lite训练一个
识别
扑克牌
的模型,第2部分就是将训练好的模型部署到手机上运行,具体的运行效果如下所示:
pc端运行效果:
20220316
b站地址:视频链接
扑克牌
识别
app下载地址:下载
题目:趣味百题之
斗地主
扑克牌
是一种非常大众化的游戏,在计算机中有很多与
扑克牌
有关的游戏。例如,在Windows操作系统下自带的纸牌、红心大战等。在
扑克牌
类的游戏中,往往都需要执行洗牌操作,就是将一副牌完全打乱,使其排列没有规律。
1.54张
扑克牌
发个3个玩家,农民17张,地主20张。
2.自动生成一幅
扑克牌
组;洗牌;发牌到玩家手中;将玩家手中
扑克牌
按花色大小整理好。**
趣味百题-发
扑克牌
-
斗地主
请编程实现发
扑克牌
Version: 0.1
Author: jasn
Date: 2020-01-01
主要知识点:random的用法,类的定义和调用
主要功能点:用Pyth
基于opencv的
python
识别
扑克牌
的程序,效果见图
如果换牌过程过程中,摄像头自动调节曝光导致
识别
不准,可以使用AMCap手动固定曝光等参数
如果使用时间长或者周围光线遍变化巨大,可以再次通过a,d,z,c调节参数使结果准确,或者重新打开重新调试
1:先准备好纯色背景和调节摄像头角度与焦距,使牌清晰
2:然后键盘a,d调节背景
3:然后键盘z,c调节牌的背景
4:
识别
效果...
普通
扑克牌
视频
识别
系统 主要功能:1.录相2.
识别
(
识别
图形,牌点)3.根据要求算出结果(大小)主要特点:1.操作简单:回车,开始录相,再回车,停止录相;打空格,开始计算(
识别
);得牌,看到底牌,将此牌双击,立即重新排序,进行计算,得出所需之结果。2.计算速度快:一次洗牌(弹牌)大约五秒钟,拍(录相)一百五十张照片,计算这些照片需时十五秒左右。完全可以
由于纸牌的符号只有红色和黑色两部分,因此在对某一纸牌进行
识别
前可以先对其进行基于颜色的分流,红色为红桃或方片,黑色为黑桃或梅花,这样不单可以解决不能区分黑色与红色JOKER的问题,同时也减少了花形匹配的次数,提高了系统的效率。只根据符号在纸牌上的大概位置从而对符号的位置进行大致的确定显得有些武断,若纸牌在摄像时出现一定程度的扭曲,又或者摄像并非正对纸牌的时候,这种粗略定位的方法就不适用了,因此有必要改进符号的定位,又或者选择其他的特征;纸牌
识别
的第一步,必须在待
识别
的纸牌中提取它所具备的特征。