ZBLOG

extension CameraViewController: PoseLandmarkerServiceLiveStreamDelegate { func poseLandmarkerService( _ poseLandmarkerService: PoseLandmarkerService, didFinishDetection result: ResultBundle?, error: Error?) { DispatchQueue.mai...

要对骨架的坐标进行水平镜像处理,您可以遍历 poseLandmarkerResult.landmarks 中的每个点,并将其 x 坐标进行镜像处理。具体来说,对于一个坐标点 (x, y),您需要计算出镜像后的 x 值:mirroredX = imageSize.width - x。以下是修改后的代码:

extension CameraViewController: PoseLandmarkerServiceLiveStreamDelegate {

    func poseLandmarkerService(
        _ poseLandmarkerService: PoseLandmarkerService,
        didFinishDetection result: ResultBundle?,
        error: Error?) {
        
        DispatchQueue.main.async { [weak self] in
            guard let weakSelf = self else { return }
            weakSelf.inferenceResultDeliveryDelegate?.didPerformInference(result: result)
            
            guard let poseLandmarkerResult = result?.poseLandmarkerResults.first as? PoseLandmarkerResult else { return }
            let imageSize = weakSelf.cameraFeedService.videoResolution
            
            // 镜像处理骨架坐标
            var mirroredLandmarks: [PoseLandmark] = []
            for landmark in poseLandmarkerResult.landmarks {
                let mirroredX = imageSize.width - landmark.x  // 水平镜像处理
                let mirroredY = landmark.y                     // y 坐标不变
                let mirroredLandmark = PoseLandmark(x: mirroredX, y: mirroredY, visibility: landmark.visibility) // 假设PoseLandmark有visibility属性
                mirroredLandmarks.append(mirroredLandmark)
            }
            
            let poseOverlays = OverlayView.poseOverlays(
                fromMultiplePoseLandmarks: mirroredLandmarks,
                inferredOnImageOfSize: imageSize,
                ovelayViewSize: weakSelf.overlayView.bounds.size,
                imageContentMode: weakSelf.overlayView.imageContentMode,
                andOrientation: UIImage.Orientation.from(deviceOrientation: UIDevice.current.orientation))
            
            weakSelf.overlayView.draw(poseOverlays: poseOverlays,
                                      inBoundsOfContentImageOfSize: imageSize,
                                      imageContentMode: weakSelf.cameraFeedService.videoGravity.contentMode)
        }
    }
}

在这个修改后的代码中,我们创建了一个新的数组 mirroredLandmarks,用于保存经过水平镜像处理的骨架坐标。每个原始骨架点的 x 坐标被替换为其水平镜像值,而 y 坐标保持不变。这样可以确保最终显示在界面上的骨架是经过适当处理的。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21437

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?