如何将Vision Framework应用到视频播放中

问题描述 投票:0回答:2

我只找到了主要使用实时相机捕获来应用视觉框架的示例,我已经在工作了。我还想在视频播放时应用身体姿势检测和绘图。我有以下代码,它已经播放了我的设备上存储的视频。

            let videoURL = URL(fileURLWithPath: NSString.path(withComponents: [documentsDirectory, path]) as String)
            let player = AVPlayer(url: videoURL)
            let vc = AVPlayerViewController()
            vc.player = player
            
            present(vc, animated: true) {
                vc.player?.play()
            }

如何将视频的修改版本发送到播放器,该播放器使用类似的方法首先使用视觉框架检测视频中的人物:

        let visionRequestHandler = VNImageRequestHandler(cgImage: frame)

        // Use Vision to find human body poses in the frame.
        do { try visionRequestHandler.perform([humanBodyPoseRequest]) } catch {
            assertionFailure("Human Pose Request failed: \(error)")
        }

        let poses = Pose.fromObservations(humanBodyPoseRequest.results)

在视频的每一帧上,然后将每个姿势绘制到相应的视频帧上,然后将其发送到 AVPlayer

pose.drawWireframeToContext(cgContext, applying: pointTransform)
swift avplayerviewcontroller apple-vision avassetreader
2个回答
0
投票
            let videoAsset = AVAsset(url: videoURL)
            let poseComposition = AVMutableVideoComposition(asset: videoAsset) {request in
                let poses = self.findPosesInFrame(request.sourceImage)
                let poseImage = self.drawPoses(poses, onto: request.sourceImage)
                request.finish(with: poseImage, context: nil)
            }
            
            let videoItem = AVPlayerItem(asset: videoAsset)
            videoItem.videoComposition = poseComposition
            
            return AVPlayer(playerItem: videoItem)

我将把它留在这里供其他人查找。但是 AVMutableVideoComposition 已经存在的代码和轻微的转换,使其与 检测身体姿势示例 中的 CIImage 一起工作,成功了。感谢您的评论。


0
投票

很欣赏这里的答案。对我来说效果很好。

但是知道如何导出带有姿势的视频吗?

我尝试使用 AVAssetExportSession 但只保存了视频而没有姿势图...

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.