|
|
|
@ -204,36 +204,14 @@ class PoseNet(private val interpreter: Interpreter, private var gpuDelegate: Gpu
|
|
|
|
|
)
|
|
|
|
|
totalScore += confidenceScores[idx]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 在此部分中添加角度数据和合格率数据
|
|
|
|
|
// 遍历 keyPoints
|
|
|
|
|
keypointList.forEach { keypoint ->
|
|
|
|
|
// 获取当前关键点的位置
|
|
|
|
|
val x = keypoint.coordinate.x
|
|
|
|
|
val y = keypoint.coordinate.y
|
|
|
|
|
|
|
|
|
|
// 假设我们计算胸部与左右肩膀之间的角度(这里只是示例,具体取决于你的模型)
|
|
|
|
|
if (keypoint.bodyPart == BodyPart.LEFT_SHOULDER || keypoint.bodyPart == BodyPart.RIGHT_SHOULDER) {
|
|
|
|
|
// 获取左肩和右肩的坐标
|
|
|
|
|
val leftShoulder = keypointList.first { it.bodyPart == BodyPart.LEFT_SHOULDER }
|
|
|
|
|
val rightShoulder = keypointList.first { it.bodyPart == BodyPart.RIGHT_SHOULDER }
|
|
|
|
|
|
|
|
|
|
// 计算肩膀角度
|
|
|
|
|
val angle = calculateAngle(
|
|
|
|
|
leftShoulder.coordinate.x,
|
|
|
|
|
leftShoulder.coordinate.y,
|
|
|
|
|
rightShoulder.coordinate.x,
|
|
|
|
|
rightShoulder.coordinate.y
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 添加合格率数据
|
|
|
|
|
}
|
|
|
|
|
//计算并得到关键点之间的角度关系
|
|
|
|
|
val keypoint = KeypointAngles()
|
|
|
|
|
keypoint.csAngles(keypointList.toList())
|
|
|
|
|
|
|
|
|
|
// 返回一个包含关键点和总分数的Person对象
|
|
|
|
|
return Person(keyPoints = keypointList.toList(), score = totalScore / numKeypoints)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class KeypointAngles {
|
|
|
|
|
// 用来存储角度的列表
|
|
|
|
|
val angles = mutableListOf<Float>()
|
|
|
|
@ -322,9 +300,6 @@ class PoseNet(private val interpreter: Interpreter, private var gpuDelegate: Gpu
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 返回上一次推理的时间
|
|
|
|
|
override fun lastInferenceTimeNanos(): Long = lastInferenceTimeNanos
|
|
|
|
|
|
|
|
|
|