You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS端基于QuickPose.ai采集身体测量数据无返回值问题

QuickPose.ai measureLineBody 无法获取返回值问题排查

问题描述

我正在探索QuickPose.ai的应用可能性,已完成关节活动度(rangeOfMotion)示例开发,可持续打印角度数值。但尝试实现身体测量功能时,无法获取返回值。以下代码中feature1(rangeOfMotion)可正常运行,但feature2(身体测量)无法正常工作:

.onAppear {
            
    let bikeStyle = QuickPose.Style(relativeFontSize: 0.33, relativeArcSize: 0.4, relativeLineWidth: 0.3)
    
    let feature1: QuickPose.Feature = .rangeOfMotion(.shoulder(side: .right, clockwiseDirection: false), style: bikeStyle)
    let feature2: QuickPose.Feature = .measureLineBody(p1: .elbow(side: .left), p2: .wrist(side: .left), userHeight: 168, format: "%.1fcm",style: bikeStyle)

    
    quickPose.start(features: [.overlay(.upperBody)], onFrame: { status, image, features,  feedback, landmarks in
        if case .success(_) = status {
            overlayImage = image
            
            
         //   quickPose.update(features: [feature1])
         //   let result = features[feature1]
        
            quickPose.update(features: [feature2])
            let result = features[feature2]
            
            print ("QPBV111 result: ", result as Any)
            
            lastResult = result?.value
            print ("QPBV113 lastresult: ", lastResult ?? "nodata")
            
        }

    }
)}

问题排查及解决方案

1. 特征更新时机错误

quickPose.update(features: [feature2])是告诉QuickPose下一次帧计算时要处理这个特征,当前帧的features回调参数不会立刻包含它的结果。你在同一帧里更新特征再取结果,自然拿不到数据。

修正方法:把测量特征直接加入初始启动的特征列表,让每帧都自动计算它:

.onAppear {
    let bikeStyle = QuickPose.Style(relativeFontSize: 0.33, relativeArcSize: 0.4, relativeLineWidth: 0.3)
    
    let feature2: QuickPose.Feature = .measureLineBody(p1: .elbow(side: .left), p2: .wrist(side: .left), userHeight: 168, format: "%.1fcm",style: bikeStyle)
    
    // 初始启动就包含测量特征
    quickPose.start(features: [.overlay(.upperBody), feature2], onFrame: { status, image, features, feedback, landmarks in
        if case .success(_) = status {
            overlayImage = image
            
            // 直接从当前帧的features里取结果
            let result = features[feature2]
            
            print ("QPBV111 result: ", result as Any)
            lastResult = result?.value
            print ("QPBV113 lastresult: ", lastResult ?? "nodata")
        }
    })
}

2. 关键点检测不达标

measureLineBody需要左肘、左手腕两个关键点都被准确检测到才能返回结果。如果某一帧中这两个点的置信度过低(比如低于0.5),QuickPose会跳过该特征的计算。

排查方式:

  • 打印landmarks参数,检查.elbow(.left)和.wrist(.left)的confidence值
  • 调整拍摄角度、光线,确保关节在画面中清晰可见

3. 特征实例不匹配

如果每次更新都重新创建feature2实例,会导致features字典里找不到对应的结果。要保证更新和获取结果用的是同一个feature2实例。

修正方法:把feature2定义为视图的属性,而不是在onFrame回调里重复创建。

总结

优先调整特征的启动方式,把测量特征加入初始启动列表,这是最直接解决当前问题的方法。同时验证关键点的检测状态,确保模型能准确识别所需关节。

内容的提问来源于stack exchange,提问作者S Lareau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 08:12:43