2016-05-29 80 views
0

我想要在AVAsset的每一幀上使用CoreImage運行人臉檢測,爲此,我需要CIDetectorImageOrientation用於該資產中的每個樣本緩衝區。AVAsset to CIDetectorImageOrientation

的問題是,如果我轉換CMSampleBufferUIImage並翻譯該圖像使用到EXIF方向:

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,不管視頻是如何拍攝(前VS後置攝像頭)或視頻拍攝方向。

我該如何正確取得CIDetectorImageOrientationCMSampleBuffer

回答

0

您需要獲取該資產的視頻軌道的方向。這個方向對於每一幀都是一樣的。 下面是你在目標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; 
} 
...