diff --git a/android/.gradle/8.5/checksums/md5-checksums.bin b/android/.gradle/8.5/checksums/md5-checksums.bin new file mode 100644 index 0000000..4094af6 Binary files /dev/null and b/android/.gradle/8.5/checksums/md5-checksums.bin differ diff --git a/android/.gradle/8.5/checksums/sha1-checksums.bin b/android/.gradle/8.5/checksums/sha1-checksums.bin new file mode 100644 index 0000000..0ce337c Binary files /dev/null and b/android/.gradle/8.5/checksums/sha1-checksums.bin differ diff --git a/android/.idea/androidTestResultsUserPreferences.xml b/android/.idea/androidTestResultsUserPreferences.xml new file mode 100644 index 0000000..ce92f63 --- /dev/null +++ b/android/.idea/androidTestResultsUserPreferences.xml @@ -0,0 +1,48 @@ + + + + + + \ No newline at end of file diff --git a/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/data/angl.kt b/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/data/angl.kt new file mode 100644 index 0000000..568a4b8 --- /dev/null +++ b/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/data/angl.kt @@ -0,0 +1,130 @@ +package org.tensorflow.lite.examples.poseestimation.data +import kotlin.math.abs + +class Angle { + + // 站立姿势(正面) + fun standList(): List { + val list = List(8) { 90; 90; 170; 170; 90; 90; 180; 180 } + return list + } + + // 硬拉(左侧面) + fun deadliftList(): List { + val list = List(8) { 90; 90; 180; 180; 150; 30; 120; 120 } + return list + } + + // 深蹲(侧面观察) + fun squatList(): List { + val list = List(8) { 10; 10; 180; 180; 20; 20; 70; 70 } + /*左肩膀与右肩膀保持水平 + list[1] = 180 // 右肩膀与左肩膀保持水平 + list[2] = 90 // 左肘部默认弯曲角度为90° + list[3] = 90 // 右肘部默认弯曲角度为90° + list[4] = 90 // 左髋部下降,接近平行 + list[5] = 90 // 右髋部下降,接近平行 + list[6] = 90 // 左膝盖弯曲至90° + list[7] = 90 // 右膝盖弯曲至90°*/ + return list + } + + // 平板支撑(Plank)- 侧面观察 + fun plankList(): List { + val list = List(8) { 90; 90; 90; 90; 180; 180; 180; 180 } + /*list[0] = 180 // 左肩膀与右肩膀保持水平 + list[1] = 180 // 右肩膀与左肩膀保持水平 + list[2] = 0 // 左肘部保持水平 + list[3] = 0 // 右肘部保持水平 + list[4] = 0 // 左膝盖保持直线 + list[5] = 0 // 右膝盖保持直线 + list[6] = 0 // 左脚踝与脚背成直线 + list[7] = 0 // 右脚踝与脚背成直线*/ + return list + } + + // 引体向上(正面) + fun pullUpList(): List { + val list = List(8) { 100; 100; 100; 100; 90; 90; 180; 180 } + return list + } + + /* + 俯卧撑(Push-up)- 侧面观察 + 肩膀(LEFT_SHOULDER, RIGHT_SHOULDER):肩膀应在肘部正上方,保持稳定,不要耸肩。 -> 左右肩膀的角度应接近180°,保持在肘部上方。 + 肘部(LEFT_ELBOW, RIGHT_ELBOW):肘部弯曲角度大约为90度,且肘部始终保持在肩膀下方。 -> 左右肘部角度为90°,肘部应下沉,不应过度弯曲。 + 脚踝(LEFT_ANKLE, RIGHT_ANKLE):身体应从脚踝到肩膀成一直线,避免臀部上升或下垂。 -> 左右脚踝角度为0°,保持直线。 + + */ + fun pushUpList(): List { + val list = List(8) { 90 } // 初始值设置为90° + /*list[0] = 180 // 左肩膀与右肩膀保持水平 + list[1] = 180 // 右肩膀与左肩膀保持水平 + list[2] = 90 // 左肘部弯曲至90° + list[3] = 90 // 右肘部弯曲至90° + list[4] = 0 // 左膝盖保持直线 + list[5] = 0 // 右膝盖保持直线 + list[6] = 0 // 左脚踝角度保持自然 + list[7] = 0 // 右脚踝角度保持自然*/ + return list + } +} + +class AngleDifference(private val angleObj: Angle) { + + // 假设getAngles()方法已经实现并能返回一个List + fun getAngles(): List { + return listOf(100.0, 95.0, 180.0, 85.0, 90.0, 75.0, 160.0, 170.0) + } + + // 计算角度差,并根据角度值判断是否大于10,返回相应的语句 + fun calculateAngleDifference(listType: String): String { + // 根据传入的参数选择不同的角度列表 + val selectedList = when (listType) { + "1" -> angleObj.standList() // 选择站立姿势列表 + "2" -> angleObj.deadliftList() // 选择硬拉列表 + "3" -> angleObj.pushUpList() // 选择俯卧撑列表 + else -> throw IllegalArgumentException("未知的列表类型: $listType") // 处理无效的输入 + } + + // 获取另一个类中的角度列表 + val angles = getAngles() + + // 确保两个列表的大小一致 + if (selectedList.size != angles.size) { + throw IllegalArgumentException("两个列表的大小不一致!") + } + + // 计算差值并检查条件 + val differenceList = mutableListOf() + for (i in selectedList.indices) { + differenceList.add((selectedList[i] - angles[i]).toDouble()) + } + + // 检查差值列表中的每个值 + val absoluteValues = differenceList.map { abs(it) } + if (absoluteValues.all { it < 10 }) { + // 如果所有值的绝对值都小于10 + return "动作标准" + } else { + // 根据不同的位置返回不同的语句 + for (i in absoluteValues.indices) { + if (absoluteValues[i] > 10) { + return when (i) { + 0 -> "第一个位置的角度差值超出标准,请调整!" + 1 -> "第二个位置的角度差值超出标准,请调整!" + 2 -> "第三个位置的角度差值超出标准,请调整!" + 3 -> "第四个位置的角度差值超出标准,请调整!" + 4 -> "第五个位置的角度差值超出标准,请调整!" + 5 -> "第六个位置的角度差值超出标准,请调整!" + 6 -> "第七个位置的角度差值超出标准,请调整!" + 7 -> "第八个位置的角度差值超出标准,请调整!" + else -> "未知位置的角度差值超出标准,请检查!" + } + } + } + } + + return "未知情况" + } +} \ No newline at end of file