Ios AVAsset到CIDetectorImageOrientation
我想在AVAsset中的每一帧上使用CoreImage运行人脸检测,为此,我需要该资源中每个样本缓冲区的CIDetectorImageOrientation 问题是,如果我将CMSampleBuffer转换为UIImage,并使用以下命令将该图像转换为exif方向:Ios AVAsset到CIDetectorImageOrientation,ios,swift,Ios,Swift,我想在AVAsset中的每一帧上使用CoreImage运行人脸检测,为此,我需要该资源中每个样本缓冲区的CIDetectorImageOrientation 问题是,如果我将CMSampleBuffer转换为UIImage,并使用以下命令将该图像转换为exif方向: var exifOrientation: UInt32 { switch self.imageOrientation { case .Up: return 1 case .Down: return 3
var exifOrientation: UInt32 {
switch self.imageOrientation {
case .Up: return 1
case .Down: return 3
case .Left: return 8
case .Right: return 6
case .UpMirrored: return 2
case .DownMirrored: return 4
case .LeftMirrored: return 5
case .RightMirrored: return 7
}
}
方向始终为.Up,无论视频是如何从前后摄像头拍摄的,还是视频拍摄的方向
如何正确获取CMSampleBuffer的CIDetectorImageOrientation?您需要获取该资源的视频轨迹方向。每个帧的方向都相同。 下面是在目标C中的大致操作方法
AVAssetTrack *videoTrack =[asset tracksWithMediaType:AVMediaTypeVideo].firstObject;
CGSize size = [videoTrack naturalSize];
CGAffineTransform preferredTransform = [videoTrack preferredTransform];
if (size.width == preferredTransform.tx && size.height == preferredTransform.ty) {
return kCGImagePropertyOrientationRight;
} else if (preferredTransform.tx == 0 && preferredTransform.ty == 0) {
return kCGImagePropertyOrientationUpLeft;
} else if (preferredTransform.tx == 0 && preferredTransform.ty == size.width) {
return kCGImagePropertyOrientationDown;
}
...