1.11. 手势识别

如果你遇到一种机器能识别自己的手势,用手势给机器发指令,机器按照手势指令工作,这想想都是一件很酷的事儿!

BlueFi的集成光学传感器具有手势识别功能,能够识别四个方向的挥手手势:向上、向下、向左、向右。


1.11.1. 识别挥手的方向

为了了解手势传感器的识别结果,我们将手势识别的结果用多行文本简单地显示到屏幕上。示例代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
  import time
  from hiibot_bluefi.sensors import Sensors
  from hiibot_bluefi.screen import Screen
  sensor = Sensors()
  gesture = sensor.gesture
  screen = Screen()
  show_data = screen.simple_text_display(title="BlueFi Light sensor", title_scale=1, text_scale=2)
  while True:
      gesture = sensor.gesture
      show_data[3].text = "gesture: {}".format(gesture)
      show_data.show()
      time.sleep(0.2)

将上面示例代码保存到BlueFi的/CIRCUITPY/code.py文件中,BlueFi执行程序期间,用你的手在集成光学传感器上方约2公分左右, 并分别向四个挥手,记录不同方向的手势与手势识别结果(0~4)之间的关系。

1.11.2. 用手势向计算机发指令

这个示例中,我们用四种手势告知BlueFi播放不同的音调,让自己临空弹奏音乐。示例代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  import time
  from hiibot_bluefi.soundio import SoundOut
  from hiibot_bluefi.sensors import Sensors
  from hiibot_bluefi.screen import Screen
  spk = SoundOut()
  spk.enable = 1
  sensor = Sensors()
  gesture = sensor.gesture
  screen = Screen()
  show_data = screen.simple_text_display(title="BlueFi Light sensor", title_scale=1, text_scale=2)
  while True:
      gesture = sensor.gesture
      show_data[3].text = "gesture: {}".format(gesture)
      show_data.show()
      if gesture==1:
          spk.play_midi(86, 1/2)
      elif gesture==2:
          spk.play_midi(84, 1/2)
      elif gesture==3:
          spk.play_midi(88, 1/2)
      elif gesture==4:
          spk.play_midi(89, 1/2)
      else:
          time.sleep(0.1)

这个示例程序的关键语句是“while True:”循环程序块内的嵌套逻辑,根据识别的手势结果播放对应的midi音节。具体程序代码的功能不再详细赘述。


总结:

  • 手势指令
  • 手势识别和光学传感器
  • 多行文本显示的数据结构
  • 文本字体的缩放
  • 逻辑嵌套
  • 本节中,你总计完成了24行代码的编写工作

重要

Sensors类的手势传感器接口

  • gesture (属性, 只读, 有效值:0, 1, 2, 3, 4), BlueFi的Sensors类gesture属性, 集成光学传感器的手势识别结果
    • 0: 未是被到任何手势
    • 1: 向上挥手(从B按钮向光学传感器方向)
    • 2: 向下挥手
    • 3: 向左挥手(从光学传感器向LCD屏幕方向)
    • 4: 向右挥手