Я пытаюсь реализовать небольшой проект для распознавания жестов рук (по аналогии с 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
Но этот метод грубой силы сильно ограничивает меня в распознавании более сложных жестов.
Есть ли другой метод / алгоритм, который можно использовать для обнаружения шаблонов в двумерном двоичном массиве, который может быть полезен для меня для распознавания жестов?