当前位置: 首页 > news >正文

怎么让机器认识你的手势?机器学习方向

 写在前面的是,这次是借用Seeed出品的Wio Terminal结合国外的Edge Impulse这个组合来达到的。要想玩的话,前提是有一台Wio Terminal啦。不过看这篇文章的收获并不是知道如何玩Wio Terminal,而是从中得知未来的人工智能的训练将以什么形式被我们这些平凡大众去掌握。

关于Wio Terminal是什么,我这里就不介绍啦,网上一搜一大把,大家可以去了解一下。但这的确会是一台不错的创客玩具,不用管各种接线,一体集成了很多在创作时需要的模块。

对了,操作示范同样通过视频的方式上传到了B站

🚀

叨了几句,以下进入正题

实验介绍

这次示范的是官方一个很有代表性的例子,就是让这个小设备来识别剪刀石头布。等等,这个小设备可没有摄像头呀?没错,它的确是没有摄像头,但我们还是有办法玩的。我们其实借用它自带的光传感器,当你以剪刀的手势经过设备上时,阴影投到光传感器上时,明与暗的变化会出现5次交替,因为是两要手指的投影嘛。而如果是石头的话,那就是一大块东西经过,明暗变化自然是3次了。设备学习光线的变化规律,找到其中的特征,就有机会识别出我们的手势了。原理很简单,懂的就懂了。那咱们开始整起来吧。

实际操作

1、环境准备

为了让这个实验的成功率提高,我们需要有一些环境准备。其中最重要的是所有跟光相关的环境因素。首先,要找到一个光线不强的环境,比如封闭的房间,或者最少可以拉上窗帘。然后再准备一个额外的光源,这个光源最好能放到桌面上,并横向射出。当然,为了收集数据并训练模型,还要准备一台能上网的电脑和一根Type C线。如下图:

 2、创建模型及收集数据

一切准备好后,就可以开始玩了。我们会先创建模型,并收集数据。

打开电脑上的浏览器,进入http://ide.thinkergen.com。如果没有注册过的请先注册,这里就不介绍怎么注册了。如果没有登录,就先在这里登录。

2.1 创建模型 

1️⃣ 进入首页后,能看到“Wio Terminal”,点进去。

2️⃣ 左边能找到“创建与选择模型”,点击它。(默认是已经点击,但点击一下保证界面是对的)

3️⃣ 在中间找到“内置光线传感器识别手势”,输入一个模型名,我用的是“erictest”。

4️⃣ 修改收集数据的代码

因为收集数据的过程是主要是依靠设备本身,为了让设备知道要怎么做,我们要编写一段简单的代码。不用担心,代码是图形化的,我会带着你完成。

进入数据采集界面后,默认是有一段代码的,但是这个代码不太完美,因为它不会收集没有动作时的数据,或者说它除了石头、剪刀、布之外,没有别的标签,那机器在做最后推理时,如果我们什么都没有做,它也只能硬识别成其中一个手势,这不是大问题,但这对于程序员的我来说这是一个大BUG😣,不能忍受!

所以,第一个动作,就是增加一个叫做NoAction的标签,用来收集一些什么都没有做的数据。点击右边标签区域的“+”,填上“noaction”。

然后,增加一段代码。内容就是告诉设备,当我将遥杆向上推时,就收集没有动作的数据。

 

5️⃣ 上传代码。按左边的“上传”按钮。记得,要将Wio Terminal通过Type-C线插上电脑💻哦。

6️⃣ 用设备收集数据

根据代码,不同的按钮收集不同标签的数据。中间按钮收集石头。

按下之后,设备显示正在收集数据。这里就可以上下或者左右地摆动你的手了。

 同时,电脑上也会出现“采样中”的字样。

请注意要房间让手指的投影经过这个光传感器哦。

 

理想的光线状态是这样的。

按照官方的建议,每个手势只要收集10次数据,但从我实测的情况看来,10次数据的准确率还是太低,建议还是收集20次(虽然会很累)。依次通过ABC三个键,还有控制杆“上”,来收集完4种各20次数据后,我们的数据就准备好了。

7️⃣ 训练和部署模型

点击“训练与部署”。看到系统要求我们选择神经网络规模。根据测试的结果,小型规模的准确率比较低,我建议选择中型。但选择中型后,要将训练周期数设置为250才行,这样整个训练才是在20分钟内完成。系统目前也不接受超20分钟的训练请求。其它配置项不需要修改,按默认值就行了。

点击“开始训练”后,我们就可以去喝杯茶去了,因为大概需要20分钟左右的时间进行训练。

显示下图信息就是完成训练了。

 

 展开这个小节就能看到训练报告。这个数据是比较完美的,如果百分率太低的话,就要考虑一下是不是光线或者动作不对了。然后调整一下重新收集数据。

 

8️⃣ 点击“模型部署”,让模型成为代码中的一个积木块。因为模型会有点大,所以这个动作也需要几分钟。

9️⃣ 编写使用代码

部署完模型后还没完。因为我们只是将一个能分辨各种手势的黑盒做好了,它通过光线的变化确认你做的是什么手势。但设备上还没有这个模型,也还不知道什么时候要观察光线变化,同时更加不知道观察完要做什么。所以接下来要写另一段代码来告诉设备要怎么用模型来完成一个功能。

代码是长这个样子。功能就是当设备认为我们做了剪刀手势时,它就在屏幕上显示剪刀的样子。认为是石头就显示石头,认为是布就显示布。如果认为我们什么都没做,那就不变化。

 

完成代码后,还是点击“上传”,将代码上传到设备上。这里需要等好几分钟。

🔟 可以玩了

好了,现在可以开始玩了。按下C键(就是最边上的那个按钮),设备就会开始进行推理了。测试时要记得尽量按收集数据时的节奏摆动手,这样准确率会更高。

原计划这个实验只通过视频来介绍,但觉得文字也有它的优点,所以同时在这里也发一份。实在没有看懂的,可以查看我B站上的视频呵。

做准备视频和写这篇文章花费了2周时间,如果觉得内容有意思,希望你能为我点“”👍,表示我写得还不错,这将是我继续更新的动力。

相关文章:

  • Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(登录注册页面,验证码)
  • 【Java面试】概念性的问题怎么答,看完高手的回答一口气答出完整思路,Nosql的理解
  • React初体验-Hello React的组件化方式-React入门小案例
  • 【毕业设计】树莓派单片机墨水屏电子日历系统 - 物联网 嵌入式
  • SEH异常之编译器原理探究
  • UniApp调用SDK原生接口
  • 【数字信号调制】基于PCM编码和QAM调制系统附matlab代码
  • 数字科技对零售业的改造,链动2+1模式系统如何颠覆传统?
  • 集成随机惯性权重和差分变异操作的樽海鞘群算法-附代码
  • A Lightweight and Accurate Recognition Framework for Signs of X-ray Weld Images
  • 【小程序】IDEA实现qq邮件的发送
  • Selenium入门之java爬虫入门
  • 基于C#的五子棋游戏设计
  • 记一次线上环境排查错误过程
  • 快速文本分类(FastText)
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • Android框架之Volley
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • laravel with 查询列表限制条数
  • markdown编辑器简评
  • 力扣(LeetCode)22
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 通过git安装npm私有模块
  • 一个SAP顾问在美国的这些年
  • 应用生命周期终极 DevOps 工具包
  • 智能网联汽车信息安全
  • ​插件化DPI在商用WIFI中的价值
  • # 透过事物看本质的能力怎么培养?
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #Linux(Source Insight安装及工程建立)
  • #pragma data_seg 共享数据区(转)
  • #QT(智能家居界面-界面切换)
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (NSDate) 时间 (time )比较
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (九十四)函数和二维数组
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • ******之网络***——物理***
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .net 微服务 服务保护 自动重试 Polly
  • .net6Api后台+uniapp导出Excel
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @GlobalLock注解作用与原理解析
  • @RequestMapping 的作用是什么?
  • []常用AT命令解释()
  • [100天算法】-二叉树剪枝(day 48)
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [C++]模板与STL简介
  • [C++核心编程](四):类和对象——封装
  • [codevs1288] 埃及分数
  • [ESP32] 编码旋钮驱动