回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【教哈有方】手势识别之猜拳游戏 简单

头像 Jacken 2020.03.25 1502 3
project-image

剪刀石头布~~~这是我们生活中非常熟悉的猜拳游戏,既可娱乐消遣,又能帮助选择困难症的小伙伴做选择😄

近期在耍二哈的过程中发现二哈也可以实现手势识别的效果,于是,结合掌控板来制作了这个猜拳游戏。

下面,请跟我一起来吧!

材料清单

  • Gravity: 二哈识图(HuskyLens)AI 视觉传感器 X1 链接
  • 掌控板2.0编程入门学习主控板 X1 链接
  • micro:bit掌控I/O扩展板 X1 链接

步骤1 设置二哈的物体识别参数

首先,需要先将二哈通电,然后向右拨动二哈的功能选择/设置键,将功能切换到“物体识别”

project-image

接着,垂直向下按一下功能选择/设置键,打开“物体识别”的设置菜单。这个向下按不是很好按,多试几次哈~~

这里我们需要修改三个设置参数。

打开物体识别的“学习多个”功能。

然后调整“识别阈值”参数,这个的大致意思是值越大,识别的精确度越高,值越小,识别精度越低,下图是一个供参考的设置值,这个可以根据自己的实际情况做调整。

接着是稍微调整下“NMS阈值”的数值,这个数值具体是什么含义我也不大清楚😳我的理解是识别对象的特征区分度,值的大小效果应该和“识别阈值”类似。

project-image
project-image
project-image

在调整好所有的参数后,拨动功能选择/设置键到最左侧,保存刚才的设置。

project-image

步骤2 训练二哈

在二哈的官方教程中(传送门)有非常详细的介绍了二哈各种功能的使用方法,根据官方文档,目前支持的识别对象不多,且绝大多数都会被识别成猫狗😄

But~这都不是重点,管它识别成什么,我们要的是识别结果后面跟着的那个ID编号。

 

project-image
project-image

这里我制作了3张图用于训练二哈和后面的游戏互动,每张图右上角的ID标注了它们的学习顺序,这个非常重要!!因为在程序中是通过ID值的大小来判断猜拳输赢的,所以在训练二哈时,一定要按照这个顺序去训练这几张图(这个顺序是和程序中用于比较判断输赢的数值一一对应的)

project-image

如果之前有训练过二哈进行其他物体的识别,在按下学习/遗忘键时会弹出上图的提示。

我们需要先遗忘以前的学习记录,才能重新训练二哈。

project-image
project-image

图片看不懂?没关系~~~实操视频在此!!

可能有小伙伴说,训练二哈识别图片,再来玩猜拳游戏不是很有趣,可不可以真刀真枪上真的手呢?

当然可以!!!请看:

步骤3 训练二哈注意事项

在训练二哈进行手势识别时要注意几点:

1.训练时的视频背景尽量选择纯色背景,提高识别成功率;

2.一定要等到画面中出现白色的方框再按下学习键,不然算是学习失败,一切都要遗忘重头再来(我不会告诉你上面那俩视频我分别训练了不下十次😟)

3.识别手势的区分度要尽量高点,区分度越高,识别出来的效果越好(这里有发现“布”和“石头”的手势区分度不大,容易识别错)

4.不同手势不建议识别成同一物品(如“剪刀”识别成“自行车”后,“石头”就要让它识别成其他物品,不要让其也识别成“自行车”)

5.当识别成功率差或者识别区分度不明显时,可以适当调整物体识别设置里的“识别阈值”和“NMS阈值”两个参数。

步骤4 程序编写与功能实现

在训练好二哈后,则开始进行程序编写。编程使用的是Mind+最新版(软件下载传送门

启动软件后,需要先在软件窗口右上角切换到“上传模式”,将掌控板插入掌控扩展板,连接二哈4pin的数据传输线到掌控扩展板上,GND和3V线接掌控扩展板任意对应的红黑针脚。Rx(绿线)接P0口,Tx(蓝线)接P1口,这里需要注意的是,要关闭掉掌控扩展板上的音频输出(它占用P0口)

project-image

接线完成后,再用数据线连接掌控板到电脑,Mind+中连接上掌控板设备,同时在扩展中添加以下扩展:(主控板)掌控板、(传感器)HUSKYLENS AI摄像头、(功能模块)多线程

project-image

为了程序运行美观,我设计了一些简单的图片作为程序运行中各个环节的画面:

project-image

程序开始,首先清屏下再显示封面图,接着是初始化二哈的引脚,这里需要点击初始化引脚的齿轮图标,将通讯方式改为“软串口”,Rx为P0,Tx为P1。然后切换二哈的算法到“物体识别”

project-image

A按钮按下后,执行游戏初始化设置,然后启动运行子线程1。因为掌控板程序默认只能有一个“ESP32主程序”积木块,不能像舞台模式中用多个“绿旗被点击”积木来实现多个程序脚本同时执行的效果,所以这里使用到的是多线程功能。

之所以使用多线程功能,是为了在B按钮按下时能停止掉游戏进程,即下图部分的脚本:

project-image

这部分程序就是游戏过程的核心程序。这边使用到了3个函数来简化主程序

project-image
project-image

B按钮的功能就是结束猜拳游戏,进行战绩结算,并向玩家反馈对战成绩和简要的评价。

project-image

程序完成后,点击软件窗口右上角的“上传到设备”,等程序传输完毕,就可以开始对战二哈啦😃


【注意】二哈的电压需求比较高,所以建议对二哈进行独立供电,以确保二哈供电充足,不会因供电不足频繁重启。

步骤5 完成!愉快的玩耍吧!

最后照例附上项目所有素材及源代码!

评论

user-avatar
  • 且歌且行

    且歌且行2020.03.31

    特别详细清楚~~收藏了~

    0
    • 汤果

      汤果2020.03.26

      感觉完全在骗人啊。。。

      1
      • Jacken

        Jacken2020.03.27

        😂虽然二哈有点二,但还是很聪明的😂