在上期的基础篇中, 我们借助MediaPipe 实现了对十个数的手势识别(Windows 环境)。在此基础之上我们借助树莓派实现一个简易的“猜拳”游戏:用户和树莓派都随机出“剪子包袱锤”(与数字2、5、0 的手势一致)中的一种,由程序来判定输赢(输出文字信息),同时树莓派也用不同颜色的LED 灯提示(也可以另外添加蜂鸣器或OLED 显示屏)。
1.实验器材及连接
实验硬件包括树莓派3B+ 主板一块,古德微扩展板一块,摄像头一个,红色、绿色和黄色LED 灯各一支。将绿色和黄色LED 灯按照“长腿正、短腿负”的原则,分别插入扩展板的6 号和12 号引脚处即可。
2.库模块的添加、函数代码的精简及LED 灯的初始化
接下来,给树莓派通电启动操作系统,通过Windows 的远程桌面连接进入Thonny 编辑器,开始Python 代码的编写。
将之前的“[01]Recognize_Number.py” 复制粘贴, 重命名为“[02]Finger_Game.py”。在库模块的导入部分,需要添加语句:“import random”、“import time”和“from gpiozero importLED”; 删除计算矢量角度的finger_angle(point1,point2) 函数, 因为不再需要识别数字9(弯曲的食指);再来精简finger_sign(tip_finger,list_data) 函数代码:
只保留2、5 和0 三个数字的相关代码,删除其他7 个数字的手势识别代码,并将对应的变量finger_sign 分别赋值为“剪子”、“包袱”和“锤”,也就是将手势识别结果进行重定义:当检测到食指指尖和中指指尖同时在“凸包”区域外时,则认定该手势为“剪刀”;当检测到五个指尖均在“凸包”区域外时,则认定该手势为“包袱”;当在“凸包”区域外没有检测到有任何手指指尖时,则认定该手势为“锤”。

