27 Feb 2023, 06:42

说明

你可以使用以下AI积木自动地通过电脑的前置摄像头识别用户的手部:

blocks.png

 
这个积木将接受3个输入参数:

  • 输出表格:第一个输入让你可以选择一个表格,用于保存这个积木的输出。注意,当你把这个积木添加到代码编辑器时,将会自动创建一个新表格,如果需要,你可以更改表格的名称。请查阅下文,了解将写入到该表格的数据的有关信息。

  • 调试:如果该输入设为“是的”,那么手部轮廓将会像下图那样绘画在摄像头图像之上。注意,总共21个点将得到识别:手腕,然后5根手指每根4个点。这些点在左手将绘画为红点,右手为蓝点。

  • 显示图像:如果该输入设为“是的”,那么来自摄像头的图像将在舞台上显示为背景。 如果该输入设为“不”,那么将不会显示图像,这将让程序运行得更快。如果你的程序只需要使用输出表格中的数据,那么你可以选择不显示图像。

 
 

输出表格

当在摄像头图像中检测不到手部时,输出表格将为空。它包含以下7列。

Screen Shot 2023-02-27 at 3.10.24 PM.png

当检测到一只手时,将有47行数据填充到表格内。如果检测到2只手,另外47行数据将添加到下方,共有94行。

对于每一只手,都有3种类型的数据,每一种类型均使用不同的列子集:

 
 

手指姿势

对于每一只手,前5行包含了每一只手指的曲度和方向。 对于大部分简单的用例,这5行包含了足够的信息。


 
只有4列数据填充到了这5行:

  • :这一列将告诉你这是左手还是右手。
     
  • 部位:这一列将告诉你该行描述的是哪一根手指。
     
  • 曲度:这是手指弯曲的角度。它应该是一个介于0和180之间的数字。例如,对于食指,当它伸直时,曲度为180度。随着你的手指不断弯曲,该角度将减小至大约40度。


 

  • 方向:这是手指指向的方向。它使用和运动积木“面相…方向”相同的方向系统。例如,当手指指向上方时,方向约为0度。当手指指向右方时,方向约为90度。对于左边方向,则约为-90度。对于向下的方向,则约为180或-180度。当然,实际的方向值不一定精确,因为你的程序需要检查该值是否位于一个范围之内。例如,如果方向大于-30或小于30,那么你可以把它看成是指向上方。

 
 

舞台上的二维手指位置

在手指姿势的5行数据下方,有21行的数据描述21个点的X位置和Y位置。填充数据的4列为:

  • :这一列将告诉你这是左手还是右手。
     
  • 部位:这一列告诉你这一行描述的是21个点中的哪一个。第一行是“手腕”点,然后5根手指中的每一根都有4行数据。例如,对于拇指,从下到上的4点为“拇指1”、“拇指2”、“拇指3”以及“拇指4”。

  • XY:这些数值使用和角色相同的位置系统,即舞台的中心为X = 0,Y = 0。例如,在下图中,手腕位于舞台底部的中央位置,因此其X位置约为0,其Y位置约为-180。

 
 

舞台上的三维手指位置

在21行的二维手指位置数据下方,有另外21行的数据描述同样的21个点的三维位置。填充数据的5列为:

  • :这一列将告诉你这是左手还是右手。
     
  • 部位:这一列告诉你这一行描述的是21个点中的哪一个。
     
  • X/Y/Z:这些数值使用三维位置系统。如果你用一个小盒子来表示每一个点,那么当你向前伸手时,这些盒子将形成面向前方(和你的真实手部相同的方向)的三维手部:

 
你可以打开以下链接,尝试运行演示项目:

https://play.creaticode.com/projects/ef0d19a26944613ac1805db7