石头剪刀布程序流程图_机器学习终章:剪刀石头布猜拳机器人

8.1. 简介

TensorFlow对于我们普通人来说一直是高冷的存在,都是大神们的狂欢。喵家最近将TensorFlow移植到喵家编程软件Kittenblock中,希望能让人工智能,机器学习尽快落地。能让普通用户也能用上这个好用的机器学习框架,解决生活中的一些实际问题。TensorFlow的详细教程可以自行查阅喵家相关Learn。这篇文章为了不吓倒大家,基本不会展开TensorFlow的晦涩知识点,CC喵只会教你从零开始手把手教你做出一个智能的实时识别的猜拳机器人,先让大家体会到TensorFlow的简单易用,大家自然会主动进行学习了。

8.2. 知识点

TensorFlow机器学习框架 Kittenblock基本操作(scratch3.0)

8.3. DIY思路

猜拳机器人TensorFlow工作过程:

  1. 建立一个机械学习模型(模型建立需要一定的机器学习理论基础,新手按照本文设置即可)
  2. 提供标定的学习样本进行训练(剪刀石头布与空白情况各拍50张图片)
  3. 将训练好的模型对镜头采集回来的手势进行预测
  4. 反馈预测结果,对结果进行条件判断,对应控制舵机进行运动。

8.4. 材料准备

  • 可以跑Kittenblock的电脑一台
  • USB摄像头(笔记本电脑的摄像头也是可以的)
  • 电路板(Rosbot或者Robotbit)与三个舵机(可选)
  • 乐高机械结构件(可选)
  • CC喵提供的程序包
  • 你的耐心与细心

8.5. DIY步骤:

解压压缩包

得到以下三个文件

33602818363e479e8a1a627d5e3a40b5

双击打开sb3程序

9f9542f4038344d89ef36e75dc943ef6

修改拓扑路径与权重路径

根据你下载的程序包解压的路径,对应修改程序。

如下图的两处修改:

9e7cc796583947b6b4222b42502974e0

小技巧:

直接去到对应的文件的目录,点击下,把目录复制粘贴,这样就不会输入错误了。 不过要记得,mobilenet_244g.json 与 mobilenet_244g.weights.bin 不能缺少。这里新手很容易犯错~

9bac28078e1d4cc3bdd53f7d99dbb574

CC喵笔记:拓扑与权重这两个就是机器学习里面的概念,第一次使用不必深究,知道就好。

点击积木块开启摄像头

点击积木块,scratch舞台会出现摄像头画面,如果没有出现画面,请检查你的摄像头是否成功驱动(如果你电脑连接连着两个摄像头,例如笔记本本身自带摄像头,你再接了一个USB摄像头,kittenblock默认会连上第一个摄像头,一般就是驱动起笔记本摄像头,如果你要用USB摄像头,你需要去设备管理器将本机摄像头禁用掉。)

e19f02dd60d74d3685b27f84304e8aaf

点击积木块建立模型

积木块群点击的一瞬间,有个黄色边框,然后又恢复原状,说明这段积木块已经被执行了。

83bee255b2fb45949007337963aee1c9

CC喵笔记:模型建立是机器学习的核心,也就是学习TensorFlow的精髓所在,第一次使用不必深究,知道有模型建立这个概念就好。

点击积木块进行手势采样

首先我们先采集空白图,就让镜头采集空白的图片

ce9b8a0ecdaa454d8ed59d68de87ce8e

再依次采样剪刀图,采样过程中(积木块边框亮),变换下剪刀手的方向角度,让样本具有差异性,这样训练出来的模型适应性比较强。

a0d4103563a84283958dc05af854814f

采样石头图

7450bd6055bc430d8c11b4d3bac6c7c4

采样布图

d1b2c889cfa24caa8950c35ef48a8d5f

CC喵笔记:因为我们打算让机器分辨出这四种情况:空白图,剪刀图,石头图,布图。所以我们首先要像教一个婴儿那样,要重复告诉它(这里每种情况拍了50张照片),这是什么手势。这里要注意下,我们只是采集了图片,并且把图片打上了标签,我们并没有告诉机器,这四种情况是如何区分,机器学习引擎的魅力所在就是你无需告诉它规律,只要告诉它,这个是50张剪刀图,那个是50张石头图,你自己找出它们自己的规律,并建立好模型。XS可以理解为就是一个要学习的图片集,ys是对应这个图片集的标签(这里的标签就是空白、剪刀、石头、布)

如果采样有误

如果在以上的采样过程中,采集有误(采样手势有误),就要需要点击以下的积木块,把之前采集过的图片数据以及对应的标签全部删除掉。(包括你后面模型训练出来后,如果你觉得识别的准确率不高,这很可能是你这个采样过程中,手势不典型没有代表性,导致机器识别出错)

7ea426d45cfc4b36b7f5703ca1867e4a

然后重复手势采样步骤(空白、剪刀、石头、布)

将样本导入模型并进行训练

点击积木块群

训练20次数,训练需要一点时间,所以我们按键盘F12(window系统),调出后台,可以看到训练数据在跑动。

从0跑到19,这样20次就训练完成,也可以看到函数在收敛。

57cef4940c1e4fa5bc88da85153aeef1

CC喵笔记:这个步骤就是将我们采集回来的样本(图片集合与一一对应的标签),塞到我们开头建立的模型里面进行训练,这个训练过程是全自动的,也是很神奇!机器学习按照你的设置建立了一个模型后,然后通过学你的给的样本,自己在训练的过程中摸清楚规律,并且它每次训练好模型后,它会将10%样本放到模型中进行验证(因为样本我们已经标定了正确的答案),如果验证不通过,它自己则会再进行调整参数,如此重复循环,直到训练次数结束。我们可以理解它这个训练过程就是自己在跟自己博弈的过程,不断的学习进化,最后它被训练出来了,就能很好适应类似样本的图片了

训练完成后进行应用

1924e72f04014c7a9af2c381bed7c08f

这个就是我们想要的最终答案:

1b794c5a88ce4aafb544fee8e55bd9fd

这个积木块返回的的就是,实时采集摄像头的数据,塞到我们的预测模型中,然后返回我们的标签类型(空白、剪刀、石头、布)的其中一个类型。 这时候我们只需要对这个积木块进行条件判断,对应做出不同的反应就完成了实验。

利用预测结果控制舵机

做一个重复执行函数,对机器学习结果进行条件判断。对应调用石头、剪刀、布函数

视频运动于舞台>100,这个积木块可以理解为,当让摄像头影像有变化时,才进行判断,否则摄像头一直频繁判断,比较消耗电脑的内存,电脑消耗内存过大会导致软件蓝屏。

eba32dfee52e4c4c95327c27817016e0

石头剪刀布函数实际就是控制三个舵机不同的运动角度,把对应的手势举起来。(这里主控板用了Rosbot,你也可以用Robotbit)

例如石头函数:

控制A2舵机举起来!

1be23e3863ef412894b6294dc29137f1

硬件如下:

8.6. 如何提高识别度

样本的数量

样本数量越多肯定越好,不过考虑到工作量的问题,一般取到恰当的样本数量能达到预期效果就可以了。数量一般没有什么规律可以,简单特征至少50以上比较好,如果非常复杂特征的物体,那几百上千比较合适。这个具体设计到调参和应用环境,如果觉得识别正确率不够,可以适当加大样本量。

样本的质量

所谓样本质量,例如我们是摄像头采集回来的图片,第一个就是清晰度。拍照的时候和具体使用的环境是否一致,尽量一致的时候识别率是比较好。 如果环境比较杂乱,那就需要更高级的机器学习模型来适应。本文的程序只适合背景比较简单的情况。还有一个就是一些光照度的原因都会影响到识别。样本质量其实很好理解,就从一个普通人的角度去想,这样图片你怎样看才是最容易认出来,这样感兴趣认知下。

训练的次数

普遍认知上,训练次数越多,识别度越准确。但是训练次数过多,又会造成过拟合。类似一个人经常专做一些偏题难题,钻牛角尖,做多后,一看到类似的题目,就马上反应答案,不假思索,实际这个答案是错误的。这就是做得太多的坏处。过拟合和欠拟合在机器学习中也是一个很重要的专题。具体详情可以自行查阅机械学习相关书籍。

所以自己可以稍微改动下训练次数,看看结果如何

8.7. 后记

如果你操作得不到本文的结果,建议将程序重新打开。重新操作一遍。因为这个程序要求操作比较严格。错了就要重来。第一次使用建议直接用我们提供的程序,防止你自己拖拽积木拖错了,得不效果,多么令人沮丧。

摄像头采样的背景尽量保持纯色干净,这样可以提升识别率

到应用阶段,摄像头采集的环境尽量保持与样本采集一样的环境。

Mac版本调出后台按 Fn+F12

摄像头一般的USB摄像头即可,当然质量越好的摄像头采集图片越清晰,效果当然越好,十来块,几十块钱的都够用了,不用追求极致

看完本文,有些用户说只是感性认知了机器学习,实际还没真正了解到。确实这样的,要知道TensorFlow这个机器学习框架是倾尽谷歌多少工程师才做出来,如果你仅仅是看这一篇就能把谷歌大牛们的精髓全部理解透彻,这只能说明TensorFlow的技术含量有点低。所以不要气馁,活到老学到老。还是那句话,我们不要求每个人都成为程序架构师,我们只需要能掌握应用到这项技术到我们实际生活中,这就已经足够了。

本实验的TensorFlow运算实际就是跑在电脑中,所谓的在线,必须连着电脑。很多用户问,喵家有没有硬件可以离线跑TensorFlow?可以这么说现在市面上的能跑TensorFlow的硬件还没有多少个,并且不是一般人能玩得转的。如果你想要可以离线跑TensorFlow的硬件,不妨到喵家群找大群主@C说,“我就是想要可以跑TensorFlow的离线硬件,Take my money!”,群众呼声高了,喵家的产品自然就会有了^^

8.8. 技术延伸

CC喵,剪刀石头布,这个实验我已经完成了。能不能改动下程序,改成我自己想要的。例如我想识别其它物体,或者是不同人的头像。这个可以实现吗?

当然可以!小喵科技的黑科技每一个都是易用性与灵活性之间取平衡。

剪刀石头布这个案例中。主要是针对摄像头识别物体,主要是识别了4个样本类型。

换句话来说,你可以更改程序,可以让摄像头识别其他物体(例如人头像),而且样本类型不限。TensorFlow这个机械学习框架的魅力在于,只需要稍微修改下参数即可以套用原来的机械学习模型,通用性十分强。

举栗子识别五个样本类型

f174a777d26f4e2d92eccfbb20f96fd7

更改参数后,对应操作和剪刀石头布的步骤一样。唯一不一样就是取样拍照,你需要找5个物体来拍照取样。

8.9. 你需求你有好想法?

TensorFlow是一个新生的事物,包括技术落地与应用都需要大家共同去讨论和使用,如果你对喵家的TensorFlow有任何使用上的疑问或者建议,请联系CC喵~我们共同鞭策程序猿,哇哈哈哈~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 工厂模式的写法_java工厂模式三种详解

工厂方法模式(Factory Method)工厂方法模式分为三种:1、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:举例如下:(我们举一个发送邮件和短信的例子)首先,创建二…

LeetCode 1926. 迷宫中离入口最近的出口(BFS)

文章目录1. 题目2. 解题1. 题目 给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 . 表示)和墙(用 表示)。 同时给你迷宫的入口 entrance ,用 entrance [entra…

angularjs 表单验证 和 页面初始化闪烁

1.页面初始化闪烁 因为angularjs需要先解析html页面的指令的,才可以启动指令功能。angularjs需要等待整个文档加载完成才会解析,所以会出现一些{{xxx}}, ng-show, ng-hide指令内容一闪而过的问题,解决办法: 在存在闪烁的元素上添加ng-cloak …

python gis 实例_用Python作GIS之五:从示例入手—example函数

进入STARS后,最简单的学习方法就是演示示例数据。对于源码的分析也可以从这里入手。以下为出发菜单项“Example Project”的函数example:def example(self):"""canned loading of data files and matrices for debugging""&quo…

java jdbc操作类_Java-编写一个jdbc操作类

package数据库操作类;/** Db.javaCreated on 2007年8月20日, 上午 8:37*/import java.io.*;import java.sql.*;importjava.util.Properties;public classDB {privateString driver;privateString url;privateString user;privateString password;privateConnection conn;privat…

第一次冲刺第二天

昨天是冲刺的第一天,我完成了自己认领的任务,屏蔽系统锁屏,在实现过程中我发现了困难,经过各种查资料和询问同学,最后也没能通过敲代码实现屏蔽系统锁屏的功能,所以最后我决定实现调出系统锁屏页面&#xf…

LeetCode 1930. 长度为 3 的不同回文子序列(计数)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s ,返回 s 中 长度为 3 的不同回文子序列 的个数。 即便存在多种方法来构建相同的子序列,但相同的子序列只计数一次。 回文 是正着读和反着读一样的字符串。 子序列 是由原字符串删除其中部分字符&…

修改telnet的用户名密码_远程管理设备telnet的N种设置方法

作为一名网络工程师,日常管理和配置设备,可以选择的方法有很多,很多(如下图),但是最常用的配置手段,任然是本地使用console口,远程使用telnet(或SSH),本文以思科设备演示几种telnet的设置方法&a…

ifix的MySQL数据库_iFIX 技术文章:iFIX历史数据库

如下:定义所需采集数据的标签名(或者数据源), 并定义采集组存放这些标签;定义每个采集组的参数(节点、采集速度、相位、控制标签、状态和标签);采集速度越快,则数据越准确,数据容量越大。iFIX定义的有效数据…

python只能以程序方式执行死刑_Python程序设计基础_2020智慧树网课答案章节答案...

Python程序设计基础_2020智慧树网课答案章节答案答案:更多相关问题审判时怀孕的妇女,无论犯了多么严重的罪,最高可以判处()。A.死刑立即执行B.无期徒刑C.有期徒刑甲见他人贩卖毒品获得巨额暴利,遂起贩毒之意,但苦于无毒品来源,便制造了大量假…

WPF系列 自定控件

引言 WPF中微软提供了一些基本的控件,但是工作中这些基础的控件往往不能满足我们的需求,这个时候我们就需要根据实际的需求去开发自己的控件,但要注意不是所有功能不满足的情况都需要通过自定义控件来实现。实际上一旦用到自定义控件&#xf…

Paddle 使用预训练模型 实现快递单信息抽取

文章目录1. 导包2. 数据处理3. 辅助函数3.1 评估函数3.2 预测函数3.3 预测结果解码4. 训练填写快递单据可以直接把所有信息直接粘贴进客户端,客户端自动识别 省市、人名、电话等信息,分类填入,然后打印出来粘贴。无须人工填写,加快…

java oracle 分区查询_深入学习Oracle分区表及分区索引

深入学习Oracle分区表及分区索引关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类:•    Range(范围)分区•    Hash(哈希)分区•    List(列表)分区•    以及组合分区&a…

python3 可执行文件_将python3打包成为exe可执行文件(pyinstaller)

我们工作中可能会遇到,客户需要一个爬虫或者其他什么功能的python脚本。这个时候,如果我们直接把我们的python脚本发给客户,会有两个问题:1、客户的电脑或者服务器可能并没有安装python环境,这样就直接导致客户拿到pyt…

LeetCode 1935. 可以输入的最大单词数

文章目录1. 题目2. 解题1. 题目 键盘出现了一些故障,有些字母键无法正常工作。 而键盘上所有其他键都能够正常工作。 给你一个由若干单词组成的字符串 text ,单词间由单个空格组成(不含前导和尾随空格); 另有一个字符…

C# DateTime简单的定时器用法

DateTime是C#中的时间类,有公共索引器Now可以获取当前时间。 如果制作简单定时器的话,可以这样: 初始化:DateTime lasttimeDateTime.Now; TimeSpan timeintervalnew TimeSpan(1000); bool CheckTimer() { if(DateTime.Now.Substract(lasttime…

java 播放swf_我用java写了一个播放swf动画的类运行时报错了,代码和报错如下…...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼哪位高手帮小妹看看哈;谢谢啦,代码如下import java.awt.BorderLayout;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.SwingUtilities;import chrriis.common.UIUtils;import chr…

python rsa 公钥解密_python使用rsa库做公钥解密(网上别处找不到)

版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址http://www.cnblogs.com/Colin-Cai/p/8013009.html作者:窗户QQ:6679072E-mail:6679072qq.com使用RSA公钥解密,用o…

立足现在,规划未来

Now Linux ShellPythonCREsed/awk LispSQE ISO9001/TS16949SPCSQL MySQLNoSQLLCDMore MBA转载于:https://www.cnblogs.com/omicron/p/4495644.html

LeetCode 1936. 新增的最少台阶数

文章目录1. 题目2. 解题1. 题目 给你一个 严格递增 的整数数组 rungs ,用于表示梯子上每一台阶的 高度 。 当前你正站在高度为 0 的地板上,并打算爬到最后一个台阶。 另给你一个整数 dist 。 每次移动中,你可以到达下一个距离你当前位置&am…