要将 landmarks
的坐标点赋值到 obs_body_ios_t
结构体中的 joints
数组,我们可以在遍历过程中创建一个 obs_body_ios_t
对象,并将每个 landmark
转换为 obs_joint_ios_t
类型。以下是如何进行这一操作的示例代码:
// 假设 landmarks 是 PoseLandmarkerResult 中的地标数组
for poseLandmarks in landmarks {
// 创建一个 obs_body_ios_t 实例
var body = obs_body_ios_t()
body.id = /* 根据需要设置 ID */
body.score = /* 根据需要设置分数 */
// 遍历每个 landmark,将其坐标点赋值给 joints 数组
for (index, landmark) in poseLandmarks.enumerated() {
guard index < 18 else { break } // 确保不超过 joints 数组的大小
// 将 landmark 转换为 obs_joint_ios_t
let joint = obs_joint_ios_t(x: Float(landmark.x), y: Float(landmark.y), score: Float(1.0)) // 假设 score 为 1.0 或根据实际情况设置
// 将 joint 添加到 joints 数组中
body.joints[index] = joint
}
// 此处可以根据需要处理 body,例如存储或传递给其他函数
}
说明:
- 循环遍历:外层循环遍历所有姿势地标,内层循环遍历每个姿势地标中的具体关键点。
- 确保索引有效性:我们使用
guard index < 18 else { break }
来确保不会越界访问joints
数组,这样可以避免运行时错误。 - 赋值:对于每个关键点,创建一个新的
obs_joint_ios_t
实例并赋值,然后将其存储在对应的body.joints
中。
请根据你项目的具体需求调整字段的赋值逻辑,如 ID 和得分等。
内容由零声教学AI助手提供,问题来源于学员提问