El contrato de Pose
Una Pose es un fotograma de puntos del cuerpo. Todo el motor confía en que las poses cumplen este contrato; si escribes tu propio PoseProvider, eres tú quien debe respetarlo.
public struct Pose: Sendable { public var points: [Joint: CGPoint] public var timestamp: TimeInterval public var imageSize: CGSize? public var confidence: [Joint: Double]}Las cuatro reglas
Sección titulada «Las cuatro reglas»- Píxeles de imagen, con
yhacia abajo. El origen está arriba a la izquierda, como en UIKit. No uses coordenadas normalizadas (0…1) ni el origen abajo de Vision. - Lados anatómicos.
.leftElbowes el codo izquierdo real del paciente. Con la cámara frontal la imagen está espejada, así que el adaptador debe intercambiar izquierda y derecha antes de construir la pose. - Solo puntos confiables. Las articulaciones con baja confianza se omiten del diccionario. Una articulación ausente significa «no la veo», y el motor la trata así: no mide, no castiga y avisa que falta.
confidencees opcional. Si tu detector no da confianza, deja el diccionario vacío; las métricas de confianza saldránnil.
Las 19 articulaciones
Sección titulada «Las 19 articulaciones»Joint sigue los 19 puntos del detector 2D de cuerpo de Vision:
| Zona | Articulaciones |
|---|---|
| Cabeza | nose, leftEye, rightEye, leftEar, rightEar |
| Línea media | neck, root (centro de la cadera) |
| Brazos | leftShoulder, rightShoulder, leftElbow, rightElbow, leftWrist, rightWrist |
| Piernas | leftHip, rightHip, leftKnee, rightKnee, leftAnkle, rightAnkle |
Para no escribir side == .left ? .leftKnee : .rightKnee, usa los atajos:
Joint.knee(.left) // .leftKneeJoint.shoulder(side) // según el ladoBodySide.right.opposite // .leftLeer una pose
Sección titulada «Leer una pose»if let elbow = pose[.rightElbow] { print(elbow) // CGPoint en píxeles}pose.confidence(of: [.rightShoulder, .rightElbow, .rightWrist])// La confianza más baja entre las que se ven, o nilimageSize permite dibujar los puntos encima de la vista de cámara escalándolos al tamaño de la vista.