有没有更好的方法来使用arduino和PIR热阵列实现手势识别?

时间:2019-05-05 11:45:29

标签: arrays algorithm arduino computer-vision gesture-recognition

我正在尝试实现一个识别手势的小项目(类似于Google Soli),但将PIR热阵列传感器(Grid-Eye AMG8833)与Arduino结合使用。

热阵列以64个值的阵列形式返回传感器前面的8x8网格中的温度。

当以2D矩阵查看时,它看起来像这样:

  

20.00 20.00 20.50 21.00 20.75 20.50 21.25 21.25

     

20.00 19.25 20.25 20.75 20.50 20.50 20.75 20.75

     

20.00 20.25 20.75 21.00 21.00 20.75 21.25 21.00

     

19.75 20.25 20.50 21.00 20.75 21.00 21.00 20.75

     

20.00 20.25 20.75 21.00 20.50 20.75 20.75 21.00

     

20.25 20.50 20.50 20.75 20.50 20.50 21.00 21.00

     

20.75 20.00 20.50 20.25 20.50 20.75 20.75 21.25

     

20.25 20.25 20.50 20.75 21.25 20.50 21.00 21.00

现在,我正在做的是创建一个二进制2D数组,其中检测到手(基于高于特定阈值的温度)的网格像素为1,其余为0。

当手指放在传感器前面时,阵列看起来像这样:

https://imgur.com/a/QZPctMx

(。)表示0,(o)表示1。或更具体地说,(。)表示未检测到手指/手的网格像素,(o)表示检测到手指的网格像素。

所以现在我的问题是找到在此二维二进制数组中识别手部动作/手势的最有效方法。

到目前为止,我已经成功实现了2种简单手势的识别-使用比较数组左半部分和右半部分总和的简单方法,从左向右和从右向左滑动手检测手势开始和手势结束。我在下面添加了一个代码段,该代码段显示了从左到右的识别方式。 (此代码在loop()函数中运行)

//SWIPE LEFT-TO-RIGHT GESTURE
  if( left_sum > thresh && right_gesture_start != 1 && left_gesture_start != 1 ){
    left_gesture_start = 1;
    Serial.println("LEFT START");
  } //Hand has moved onto the left part of the sensor -> gesture start
  //thresh = 20. This value was decided after repeated testing to check what is the minimum no. of pixels that need to be filled to account for a gesture.

  if(left_gesture_start == 1 && ((left_gesture_end == 0 && right_sum > thresh && left < thresh))){
      left_gesture_end = 1;
  }//Hand has moved from left part of the sensor to the right 

  if(left_gesture_end == 1 && right_sum < thresh){
    Serial.println("LEFT TO RIGHT");
    left_gesture_start = 0;
    left_gesture_end = 0;
    delay(500);
  }//Hand has left the right part of the sensor -> gesture end

但是这种蛮力方法严重限制了我识别更复杂的手势。

还有其他方法/算法可用于检测2D二进制数组中的模式,这些模式/算法对我识别手势有用吗?

0 个答案:

没有答案