From 1c6ced2dce958b23d9766e7f9a864f8e36fc8bd7 Mon Sep 17 00:00:00 2001 From: Gabriel Low <73009315+gabriellow1111@users.noreply.github.com> Date: Fri, 11 Sep 2026 11:12:30 +0800 Subject: [PATCH] this good --- .../example/jnicpp/bowling/CameraXController.kt | 6 ------ .../com/example/jnicpp/bowling/PoseAnalyzer.kt | 6 +++--- .../example/jnicpp/bowling/PoseLandmarkSmoother.kt | 3 +-- .../com/example/jnicpp/bowling/PoseOverlayView.kt | 14 -------------- .../example/jnicpp/bowling/PoseSkeletonRenderer.kt | 2 +- 5 files changed, 5 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/example/jnicpp/bowling/CameraXController.kt b/app/src/main/java/com/example/jnicpp/bowling/CameraXController.kt index 6efbedf..3ae57c3 100644 --- a/app/src/main/java/com/example/jnicpp/bowling/CameraXController.kt +++ b/app/src/main/java/com/example/jnicpp/bowling/CameraXController.kt @@ -41,8 +41,6 @@ import androidx.lifecycle.LifecycleOwner import com.example.jnicpp.R import java.text.SimpleDateFormat import java.util.Locale - -import com.google.mlkit.vision.pose.PoseLandmark // for testing import java.util.concurrent.Executor /** @@ -325,10 +323,6 @@ class CameraXController( PoseSkeletonRenderer.draw(canvas, poseFrame.landmarks, transform, overlayBonePaint, overlayJointPaint) PoseSkeletonRenderer.drawAngleLabels(canvas, poseFrame.landmarks, poseFrame.angles, transform, overlayAnglePaint) - val leftWrist = poseFrame.landmarks[PoseLandmark.LEFT_WRIST] - val singleLandmark = if (leftWrist != null) mapOf(PoseLandmark.LEFT_WRIST to leftWrist) else emptyMap() - feedbackUI?.drawCircles(canvas, singleLandmark, transform, forRecord = true) - val state = recordingOverlayStateProvider?.invoke() val scale = feedbackUI?.computeCamScale(canvas) ?: (minOf(targetWidth, targetHeight) / 1080f) diff --git a/app/src/main/java/com/example/jnicpp/bowling/PoseAnalyzer.kt b/app/src/main/java/com/example/jnicpp/bowling/PoseAnalyzer.kt index 05103c3..91d9133 100644 --- a/app/src/main/java/com/example/jnicpp/bowling/PoseAnalyzer.kt +++ b/app/src/main/java/com/example/jnicpp/bowling/PoseAnalyzer.kt @@ -11,7 +11,7 @@ import androidx.camera.core.ImageProxy import com.google.mlkit.vision.common.InputImage import com.google.mlkit.vision.pose.PoseDetection import com.google.mlkit.vision.pose.PoseDetector -import com.google.mlkit.vision.pose.defaults.PoseDetectorOptions +import com.google.mlkit.vision.pose.accurate.AccuratePoseDetectorOptions /** * @brief Bridges CameraX's [ImageAnalysis] frame stream into ML Kit's @@ -84,8 +84,8 @@ class PoseAnalyzer( // if later angle-based form analysis needs the extra precision and a // real device's frame rate can keep up with it. private val detector: PoseDetector = PoseDetection.getClient( - PoseDetectorOptions.Builder() - .setDetectorMode(PoseDetectorOptions.STREAM_MODE) + AccuratePoseDetectorOptions.Builder() + .setDetectorMode(AccuratePoseDetectorOptions.STREAM_MODE) .build() ) diff --git a/app/src/main/java/com/example/jnicpp/bowling/PoseLandmarkSmoother.kt b/app/src/main/java/com/example/jnicpp/bowling/PoseLandmarkSmoother.kt index 7cf46bf..607c1b6 100644 --- a/app/src/main/java/com/example/jnicpp/bowling/PoseLandmarkSmoother.kt +++ b/app/src/main/java/com/example/jnicpp/bowling/PoseLandmarkSmoother.kt @@ -61,8 +61,7 @@ class PoseLandmarkSmoother( SmoothedLandmark( x = prev.x + (smoothingFactor * (landmark.position.x - prev.x)), y = prev.y + (smoothingFactor * (landmark.position.y - prev.y)), - inFrameLikelihood = prev.inFrameLikelihood + - (smoothingFactor * (landmark.inFrameLikelihood - prev.inFrameLikelihood)), + inFrameLikelihood = landmark.inFrameLikelihood, ) } previous[landmark.landmarkType] = next diff --git a/app/src/main/java/com/example/jnicpp/bowling/PoseOverlayView.kt b/app/src/main/java/com/example/jnicpp/bowling/PoseOverlayView.kt index 1d63cd5..79eb4e6 100644 --- a/app/src/main/java/com/example/jnicpp/bowling/PoseOverlayView.kt +++ b/app/src/main/java/com/example/jnicpp/bowling/PoseOverlayView.kt @@ -12,7 +12,6 @@ import android.util.AttributeSet import android.view.View import androidx.core.content.ContextCompat import com.example.jnicpp.R -import com.google.mlkit.vision.pose.PoseLandmark // for testing /** * @brief Draws the 33 ML Kit pose landmarks and connecting skeleton lines @@ -126,19 +125,6 @@ class PoseOverlayView @JvmOverloads constructor( val currentLandmarks = landmarks ?: return PoseSkeletonRenderer.draw(canvas, currentLandmarks, transform, bonePaint, jointPaint) angles?.let { PoseSkeletonRenderer.drawAngleLabels(canvas, currentLandmarks, it, transform, anglePaint) } - - // currentLandmarks to change to landmarks that require highlighting - // test code to contain only left wrist in currentLandmarks to not clutter the screen - val leftWrist = currentLandmarks[PoseLandmark.LEFT_WRIST] - - // Build a single‑item map if it exists - val singleLandmark = if (leftWrist != null) { - mapOf(PoseLandmark.LEFT_WRIST to leftWrist) - } else { - emptyMap() - } - // end test code - feedbackUI?.drawCircles(canvas, singleLandmark, transform) } /** diff --git a/app/src/main/java/com/example/jnicpp/bowling/PoseSkeletonRenderer.kt b/app/src/main/java/com/example/jnicpp/bowling/PoseSkeletonRenderer.kt index b42eb1d..8a92f04 100644 --- a/app/src/main/java/com/example/jnicpp/bowling/PoseSkeletonRenderer.kt +++ b/app/src/main/java/com/example/jnicpp/bowling/PoseSkeletonRenderer.kt @@ -23,7 +23,7 @@ import com.google.mlkit.vision.pose.PoseLandmark object PoseSkeletonRenderer { /** @brief Minimum `inFrameLikelihood` a landmark needs to be considered reliable enough to draw or use. */ - const val MIN_LIKELIHOOD = 0.5f + const val MIN_LIKELIHOOD = 0.35f /** @brief Radius, in target/view pixels, of each drawn joint dot. */ const val DOT_RADIUS = 8f /** @brief Stroke width, in target/view pixels, of each drawn bone line. */