开始之前:

1. 识别手势输出相关数据

可检测HUSKYLENS 2视野内的手势,获取手势相关数据,可以读取的数据有:画面中检测到的手势总数、靠近HUSKYLENS 2摄像头画面中心的手势ID号、检测到的第一个手势ID号。

示例程序如下。

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *


u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_HAND_RECOGNITION)
line1=u_gui.draw_text(text="手势总数:",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="已学习手势总数:",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="靠中心的手势ID:",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="第一个手势ID:",x=0,y=120,font_size=18, color="#0000FF")
while True:
    huskylens.getResult(ALGORITHM_HAND_RECOGNITION)
    if (huskylens.available(ALGORITHM_HAND_RECOGNITION)):
        line1.config(text=(str("手势总数:") + str((huskylens.getCachedResultNum(ALGORITHM_HAND_RECOGNITION)))))
        line2.config(text=(str("已学习手势总数:") + str((huskylens.getCachedResultMaxID(ALGORITHM_HAND_RECOGNITION)))))
        line3.config(text=(str("靠中心的手势ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))
        line4.config(text=(str("第一个手势ID:") + str((huskylens.getCachedResultByIndex(ALGORITHM_HAND_RECOGNITION, 1-1).ID if huskylens.getCachedResultByIndex(ALGORITHM_HAND_RECOGNITION, 1-1) else -1))))

在Mind+中点击运行,等待程序上传完成。进入HUSKYLENS 2的手势识别功能。将HUSKYLENS 2的摄像头对准画面中的手势进行学习,如何学习手势详细操作请看:二哈识图 2 手势识别功能说明

学习完成后,对准该手势,可在屏幕上观察输出结果。

**运行结果:**可输出检测到的手势总数,无论该手势是否已学习,只要方框框出手势,就会计数。可按要求输出相应数据,如第二行输出的是已学习的手势总数。第三、四行输出的是指定的手势ID号,学习过的手势会按照学习顺序分配ID号,未学习过的手势,其ID号为0。

Interface Diagram

2. 获取画面中指定手势的相关数据

可以获取指定手势的ID号、名称、手指、手腕等关键点的数据,详细数据有:手势ID、手势名称、手势中心点的X坐标位置和Y坐标位置、宽度、高度、手腕X/Y坐标,每根手指的根部、关节、指尖的X/Y坐标。详情请看手势识别积木说明。

如以下示例程序可以获取靠近摄像头画面中心的手势的手腕、五根手指指尖的X/Y坐标数据,未学习的手势亦可获取。

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *


u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_HAND_RECOGNITION)
line1=u_gui.draw_text(text="靠中心的手势ID:",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="手腕坐标:",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="拇指指尖:",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="食指指尖:",x=0,y=120,font_size=18, color="#0000FF")
line5=u_gui.draw_text(text="中指指尖:",x=0,y=160,font_size=18, color="#0000FF")
line6=u_gui.draw_text(text="无名指指尖:",x=0,y=200,font_size=18, color="#0000FF")
line7=u_gui.draw_text(text="小指指尖:",x=0,y=240,font_size=18, color="#0000FF")
while True:
    huskylens.getResult(ALGORITHM_HAND_RECOGNITION)
    if (huskylens.available(ALGORITHM_HAND_RECOGNITION)):
        line1.config(text=(str("靠中心的手势ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))
        line2.config(text=(str("手腕坐标:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).wrist_x if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).wrist_y if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))))))
        line3.config(text=(str("拇指指尖:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).thumb_tip_x if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).thumb_tip_y if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))))))
        line4.config(text=(str("食指指尖:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).index_finger_tip_x if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).index_finger_tip_y if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))))))
        line5.config(text=(str("中指指尖:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).middle_finger_tip_x if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).middle_finger_tip_y if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))))))
        line6.config(text=(str("无名指指尖:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).ring_finger_tip_x if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).ring_finger_tip_y if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))))))
        line7.config(text=(str("小指指尖:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).pinky_finger_tip_x if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).pinky_finger_tip_y if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))))))

**运行结果:**如下图,运行程序,屏幕上显示手势ID号及该手势的关键点数据。由于该手势未学习,因此手势ID为0。

Interface Diagram

除以上数据,还可以获取更多指定手势的数据。例如,判断某个指定手势是否在画面中、指定手势的名称、可获取画面中相同手势的数量,当画面中出现多个相同手势时,可指定获取其中某个手势的相关参数,包括名称、手势中心X/Y坐标、宽度、高度、指尖坐标、手腕坐标数据等等。

示例程序如下:

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *


u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_HAND_RECOGNITION)
line1=u_gui.draw_text(text="ID1手势总数:",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="ID1手势名称:",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="第一个ID1手势",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="的坐标:",x=0,y=110,font_size=18, color="#0000FF")
while True:
    huskylens.getResult(ALGORITHM_HAND_RECOGNITION)
    if (huskylens.available(ALGORITHM_HAND_RECOGNITION)):
        if ((huskylens.getCachedResultByID(ALGORITHM_HAND_RECOGNITION, 1) is not None)):
            line1.config(text=(str("ID1手势总数:") + str((huskylens.getCachedResultNumByID(ALGORITHM_HAND_RECOGNITION, 1)))))
            line2.config(text=(str("ID1手势名称:") + str((huskylens.getCachedResultByID(ALGORITHM_HAND_RECOGNITION, 1).name if huskylens.getCachedResultByID(ALGORITHM_HAND_RECOGNITION, 1) else -1))))
            line4.config(text=(str("的坐标:") + str((str((huskylens.getCachedIndexResultByID(ALGORITHM_HAND_RECOGNITION, 1, 1-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_HAND_RECOGNITION, 1, 1-1) else -1)) + str((str(",") + str((huskylens.getCachedIndexResultByID(ALGORITHM_HAND_RECOGNITION, 1, 1-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_HAND_RECOGNITION, 1, 1-1) else -1))))))))


**运行结果:**如图所示,可获取到画面中ID1手势数量、名称,以及检测到的第一个ID1手势的坐标位置。

Interface Diagram