O contrato de Pose
Uma Pose é um quadro de pontos do corpo. Todo o motor confia que as poses cumprem este contrato; se você escrever seu próprio PoseProvider, é você quem deve respeitá-lo.
public struct Pose: Sendable { public var points: [Joint: CGPoint] public var timestamp: TimeInterval public var imageSize: CGSize? public var confidence: [Joint: Double]}As quatro regras
Seção intitulada “As quatro regras”- Pixels da imagem, com
ypara baixo. A origem fica no canto superior esquerdo, como no UIKit. Não use coordenadas normalizadas (0…1) nem a origem inferior do Vision. - Lados anatômicos.
.leftElbowé o cotovelo esquerdo real do paciente. Com a câmera frontal a imagem é espelhada, então o adaptador deve trocar esquerda e direita antes de montar a pose. - Só pontos confiáveis. Articulações com baixa confiança ficam fora do dicionário. Uma articulação ausente significa «não a vejo», e o motor a trata assim: não mede, não penaliza e avisa que falta.
confidenceé opcional. Se seu detector não fornece confiança, deixe o dicionário vazio; as métricas de confiança sairãonil.
As 19 articulações
Seção intitulada “As 19 articulações”Joint segue os 19 pontos do detector de corpo 2D do Vision:
| Região | Articulações |
|---|---|
| Cabeça | nose, leftEye, rightEye, leftEar, rightEar |
| Linha média | neck, root (centro do quadril) |
| Braços | leftShoulder, rightShoulder, leftElbow, rightElbow, leftWrist, rightWrist |
| Pernas | leftHip, rightHip, leftKnee, rightKnee, leftAnkle, rightAnkle |
Para não escrever side == .left ? .leftKnee : .rightKnee, use os atalhos:
Joint.knee(.left) // .leftKneeJoint.shoulder(side) // conforme o ladoBodySide.right.opposite // .leftLer uma pose
Seção intitulada “Ler uma pose”if let elbow = pose[.rightElbow] { print(elbow) // CGPoint em pixels}pose.confidence(of: [.rightShoulder, .rightElbow, .rightWrist])// A menor confiança entre as visíveis, ou nilimageSize permite desenhar os pontos sobre a imagem da câmera, escalando-os ao tamanho da view.