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

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…

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

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

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

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

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

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

LeetCode 1936. 新增的最少台阶数

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

mysql事务与jdbc事务_事务(mysql事务、jdbc事务)

一、MYSQL事务1、事务概念:事务是一个用户定义的数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。事务可以是一条sql语句,一组sqi语句或者整个程序。特性(ACDI):(1)原子性:一个事务中…

access 如何使用dolby_Access/VBA/Excel-Access表及字段创建-03

Part 1:前面的话对Access数据库的大部分操作都可以通过SQL语言来实现SQL:Structure Query Language,结构化查询语言,语法简单,非常容易学SQL语言的执行可借助于ADO,ADO本身也支持对数据库的各种操作,但是涉…

LeetCode 1937. 扣分后的最大得分(动态规划)

文章目录1. 题目2. 解题1. 题目 给你一个 m x n 的整数矩阵 points (下标从 0 开始)。 一开始你的得分为 0 ,你想最大化从矩阵中得到的分数。 你的得分方式为:每一行 中选取一个格子,选中坐标为 (r, c) 的格子会给你…

逻辑斯谛回归模型

逻辑斯谛回归模型是研究因变量为二分类或多分类观察结果与影响因素之间的关系的一种概率型非线性回归模型。逻辑斯谛回归系数通过最大似然估计得到。Logistic函数如下: 式中x为 这里是输入变量的n个特征,然后按照Logistic函数形式求出。 假设有n个独立变…

mysql监控平台怎么做_MySQL监控平台的构建方法

MySQL监控平台的构建方法发布时间:2020-05-23 14:13:12来源:亿速云阅读:159作者:鸽子概述对于MySQL的监控平台,相信大家实现起来有很多了:基于天兔的监控,还有基于zabbix相关的二次开发。相信很…

查看宝塔面板账号密码命令_宝塔面板升级到最新版图文教程

往期教程:宝塔面板教程(1)基于云服务器搭建宝塔面板教程最全详解宝塔面板教程(2)宝塔面板添加WordPress站点详细图文教程宝塔面板教程(3)基于宝塔面板成功配置网站SSL安全证书宝塔面板教程&…

python 对象引用、可变性 和 垃圾回收

文章目录1. 变量是标签2. 元组的相对不可变性3. 默认浅复制4. 函数的参数作为引用时5. del 和 垃圾回收6. 弱引用7. 一些可能的坑!!!learn from 《流畅的python》 1. 变量是标签 >>> a [1, 2, 3] >>> b a >>&g…

关于原型的一点总结

原型(prototype)无疑是JavaScript中一个十分重要的概念,围绕着原型所涉及的原型链继承、内建对象扩展,JS表现出独特的面向对象特性。 1.什么是原型每个JS的函数对象中都有一个默认的prototype属性,它指向的就是这个函数…

python canopen_Python canopener包_程序模块 - PyPI - Python中文网

用于打开文件的python便利函数canopener(filename, moder)。本地文件的行为与open():>>> canopener(local_file.txt)url也可以作为文件名传递并打开进行读取。urllib2.urlopen()是在封面下使用的,因此它具有同等的支持:>>>…

天池 在线编程 最长AB子串(哈希)

文章目录1. 题目2. 解题1. 题目 描述 给你一个只由字母’A’和’B’组成的字符串s&#xff0c;找一个最长的子串&#xff0c;要求这个子串里面’A’和’B’的数目相等&#xff0c;输出该子串的长度。 这个子串可以为空。 s的长度n满足 2<n<1000000。示例 样例1 输入: s…

Tomcat 打开一闪而过

转载于:https://www.cnblogs.com/super90/p/4504326.html

java怎么递归_Java的递归、如何与流相结合

递归技术需求&#xff1a;扫描D:\test所有子文件夹及子子文件夹下的.jpg文件。我们如果用循环来做这件事&#xff0c;我们不知道循环的结束条件&#xff0c;也不知道到底有多少层&#xff0c;所以比较麻烦。我们可以用一种新的思想&#xff1a;递归。递归举例&#xff1a;从前有…

假设有搅乱顺序的一群儿童成一个队列_数据结构与算法系列之栈amp;队列(GO)...

以下完整代码均可从这里获取栈栈的基本概念「后进先出、先进后出就是典型的栈结构」。栈可以理解成一种受了限制的线性表&#xff0c;插入和删除都只能从一端进行当某个数据集合只涉及在一端插入和删除数据&#xff0c;并且满足后进先出、先进后出的特性&#xff0c;就应该首选…

datagridview 动态插入图片_挑战一张照片制作动态PPT背景

在PPT中&#xff0c;要做出好看的页面动画效果&#xff0c;常常需要用很多图片和装饰元素。而如果你手头的素材只有一张照片&#xff0c;如何才能快速做出好看的PPT背景效果呢&#xff1f;本期内容&#xff0c;我们就来一起挑战&#xff0c;使用一张照片&#xff0c;制作PPT动态…