Есть ли лучший способ реализовать распознавание жестов рук, используя Arduino и PIR Thermal? - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь реализовать небольшой проект для распознавания жестов рук (по аналогии с Google Soli), но использую датчик теплового массива PIR (Grid-Eye AMG8833) с Arduino.

Тепловой массив возвращает температуру в сетке 8x8 перед датчиком в виде массива из 64 значений.

При просмотре в виде 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

Сейчас я занимаюсь созданием двоичного двумерного массива, где пиксель сетки, где определяется рука (на основе более высокой температуры, чем определенное пороговое значение), равен 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

Но этот метод грубой силы сильно ограничивает меня в распознавании более сложных жестов.

Есть ли другой метод / алгоритм, который можно использовать для обнаружения шаблонов в двумерном двоичном массиве, который может быть полезен для меня для распознавания жестов?

...