我只找到了主要使用实时相机捕获来应用视觉框架的示例,我已经在工作了。我还想在视频播放时应用身体姿势检测和绘图。我有以下代码,它已经播放了我的设备上存储的视频。
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)
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 一起工作,成功了。感谢您的评论。
很欣赏这里的答案。对我来说效果很好。
但是知道如何导出带有姿势的视频吗?
我尝试使用 AVAssetExportSession 但只保存了视频而没有姿势图...