VNDetectHumanBodyPose3DRequest Gives Inconsistent Results

I'm currently building an iOS app that requires the ability to detect a person's height with a live video stream. The new VNDetectHumanBodyPose3DRequest is exactly what I need but the observations I'm getting back are very inconsistent and unreliable. When I say inconsistent, I mean the values never seem to settle and they can fluctuate anywhere from 5 '4" to 10'1" (I'm about 6'0"). In terms of unreliable, I have once seen a value that closely matches my height but I rarely see any values that are close enough (within an inch) of the ground truth.

In terms of my code, I'm not doing any fancy. I'm first opening a LiDAR stream on my iPhone Pro 14:

guard let videoDevice = AVCaptureDevice.default(.builtInLiDARDepthCamera, for: .video, position: .back) else { return }
guard let videoDeviceInput = try? AVCaptureDeviceInput(device: videoDevice) else { return }
        
guard captureSession.canAddInput(videoDeviceInput) else { return }
captureSession.addInput(videoDeviceInput)

I'm then creating an output synchronizer so I can get both image and depth data at the same time:

videoDataOutput = AVCaptureVideoDataOutput()
captureSession.addOutput(videoDataOutput)
        
depthDataOutput = AVCaptureDepthDataOutput()
depthDataOutput.isFilteringEnabled = true
captureSession.addOutput(depthDataOutput)

outputVideoSync = AVCaptureDataOutputSynchronizer(dataOutputs: [depthDataOutput, videoDataOutput])

Finally, my delegate function that handles the synchronizer is roughly:

fileprivate func perform3DPoseRequest(cmSampleBuffer: CMSampleBuffer, depthData: AVDepthData) {
        let imageRequestHandler = VNImageRequestHandler(cmSampleBuffer: cmSampleBuffer, depthData: depthData, orientation: .up)
        
        let request = VNDetectHumanBodyPose3DRequest()
           
        do {
            // Perform the body pose request.
            try imageRequestHandler.perform([request])
            if let observation = request.results?.first {
                if (observation.heightEstimation == .measured) {
                    print("Body height (ft) \(formatter.string(fromMeters: Double(observation.bodyHeight))) (m): \(observation.bodyHeight)")
...

I'd appreciate any help determining how to get accurate results from the observation's bodyHeight. Thanks!

VNDetectHumanBodyPose3DRequest Gives Inconsistent Results
 
 
Q