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
相关产品推荐
相关产品推荐

