gpt4 book ai didi

swift - iOS 13 中的 AR body 追踪 : how to get real world coordinates of body joints?

转载 作者:行者123 更新时间:2023-12-04 15:28:32 30 4
gpt4 key购买 nike

我有一个应用程序,它使用 iOS 13 body 跟踪使用 ARKit 在人体中实时放置一些标记。

See attached picture where white markers are placed in the lower body .

以下代码允许我实时绘制标记并获取它们在屏幕中的坐标。

func session(_ session: ARSession, didUpdate frame: ARFrame) {


if let detectedBody = frame.detectedBody {

guard let interfaceOrientation = arView.window?.windowScene?.interfaceOrientation else { return }
let transform = frame.displayTransform(for: interfaceOrientation, viewportSize: arView.frame.size)

//This array contains only the lower body joints
var arrayOfJoints = [detectedBody.skeleton.jointLandmarks[8],detectedBody.skeleton.jointLandmarks[9],detectedBody.skeleton.jointLandmarks[10],detectedBody.skeleton.jointLandmarks[11],detectedBody.skeleton.jointLandmarks[12],detectedBody.skeleton.jointLandmarks[13],detectedBody.skeleton.jointLandmarks[16]]



//Todo lo de este for estaba en el .forEach
for i in 0...arrayOfJoints.count - 1 {

let normalizedCenter = CGPoint(x: CGFloat(arrayOfJoints[i][0]), y: CGFloat(arrayOfJoints[i][1])).applying(transform)
let center = normalizedCenter.applying(CGAffineTransform.identity.scaledBy(x: arView.frame.width, y: arView.frame.height))

let circleWidth: CGFloat = 10
let circleHeight: CGFloat = 10
let rect = CGRect(origin: CGPoint(x: center.x - circleWidth/2, y: center.y - circleHeight/2), size: CGSize(width: circleWidth, height: circleHeight))
let circleLayer = CAShapeLayer()


circleLayer.fillColor = .init(srgbRed: 255, green: 255, blue: 255, alpha: 1.0)


circleLayer.path = UIBezierPath(ovalIn: rect).cgPath

arView.layer.addSublayer(circleLayer)


}

}

}

但是,我找不到获取真实世界坐标的方法来查看,例如,深蹲期间以厘米为单位的臀部位移是多少。甚至可以使用 ARKit 将这些点转换为现实世界坐标吗?

非常感谢

最佳答案

您可以使用 ARBodyAnchor 访问 3D 关节位置。使用来自 ARSessionDelegate 的 didUpdate anchor 函数:

func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
for anchor in anchors {
guard let bodyAnchor = anchor as? ARBodyAnchor else { continue }
// Accessing joints transform
}
}

您可以获得任一模型 Transform,它将返回与 root 相关的转换。 anchor 。以左脚变换为例:
let leftFootModelTransform = bodyAnchor.skeleton.modelTransform(for: "left_foot_joint")

或者您可以访问与 parent 有关的本地转换联合的。如果是脚, parent 将是膝关节 "left_leg_joint" :
let leftFootLocalTransform = bodyAnchor.skeleton.localTransform(for: "left_foot_joint")

您可以从 WWDC 视频将人们带入 AR 中了解更多信息:
https://developer.apple.com/videos/play/wwdc2019/607/

关于swift - iOS 13 中的 AR body 追踪 : how to get real world coordinates of body joints?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61752283/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com