From 5f579f4e50724d3df104976c78f531ce568baab0 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Fri, 7 Jun 2024 14:29:13 +0200 Subject: [PATCH] algorithm optimization --- .../fitbot/ui/activities/FitnessActivity.java | 2 +- .../util/processing/InputProcessor.java | 41 ++++++++++--------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index 439f34d..b9760a7 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -175,7 +175,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall // Start checking for user movement once the video has loaded this.motionProcessor.startListening(); this.motionProcessor.startCheckingUserMovement(); -// this.motionProcessor.setRecording(true, 4.f); + this.motionProcessor.setRecording(true, 3.f); return true; } diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java index c62aeb8..79d3c07 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java @@ -1,5 +1,6 @@ package com.example.fitbot.util.processing; +import android.app.ActivityManager; import android.util.Log; import com.example.fitbot.exercise.Exercise; @@ -106,32 +107,32 @@ public class InputProcessor { // Error checking thread. (new Thread(() -> { Log.i("InputProcessor", "Movement Checking Thread started"); - + while (this.exercisesRemaining > 0) { - + if ( this.totalChecks == 0 || this.selfRotationVectorPaths == null || this.selfRotationVectorPaths.length == 0 || this.selfRotationVectorPaths[0].size() == 0 - || this.selfRotationVectorPaths[1].size() == 0) + || this.selfRotationVectorPaths[1].size() == 0) continue; - + boolean isFaulty = this.isFaultyMovement(); - + Log.i("InputProcessor", "Movement checked: " + (isFaulty ? "Faulty" : "Good")); - + if (isFaulty) { this.onInadequateRepetition(); } else this.onAdequateRepetition(); - + this.checksPerformed++; - + if (this.checksPerformed >= this.totalChecks) { this.checksPerformed = 0; this.exercisesRemaining--; acquireExercise(); } - + try { Thread.sleep((long) (this.errorCheckInterval_s * 1000)); } catch (InterruptedException e) { @@ -419,10 +420,10 @@ public class InputProcessor { * Function for checking whether the last movement was faulty */ public boolean isFaultyMovement() { - boolean upMovementDetected = false; - boolean downMovementDetected = false; + boolean[] deviceMovementStatus = new boolean[selfRotationVectorPaths.length]; - for (List path : selfRotationVectorPaths) { + for (int i = 0; i < selfRotationVectorPaths.length; i++) { + List path = selfRotationVectorPaths[i]; if (path.size() < 2) { continue; // Skip if there are not enough points to compare } @@ -433,17 +434,17 @@ public class InputProcessor { float y1 = firstPoint.y; float y2 = lastPoint.y; - if (y2 > y1) { - upMovementDetected = true; - } else if (y2 < y1) { - downMovementDetected = true; - } + // Assuming that a good movement is when y2 is greater than y1 + deviceMovementStatus[i] = y2 > y1; + } - if (upMovementDetected && downMovementDetected) { - return false; // Return false for faulty movement if both up and down movements are detected + // Return true for faulty movement if any device has faulty movement + for (boolean isGood : deviceMovementStatus) { + if (!isGood) { + return true; } } - return true; // Return true for faulty movement if only up or down movement is detected + return false; } }