繁体   English   中英

无法使AVPortraitEffectsMatte代码正常工作

[英]Can't get AVPortraitEffectsMatte code to work

我正在尝试遵循Apple提供的一些代码,以使用iOS 12中引入的一些新类和对象从人像模式照片中检索图像蒙版。代码在这里:

https://developer.apple.com/documentation/avfoundation/avportraiteffectsmatte/extracting_portrait_effects_matte_image_data_from_a_photo

func portraitEffectsMatteImageAt(_ path: String) -> UIImage? {
    let bundlePath = Bundle.main.bundlePath

    // Check that the image at given path contains auxiliary PEM data:
    guard let fileURL = NSURL(fileURLWithPath: bundlePath).appendingPathComponent(path),
    let source = CGImageSourceCreateWithURL(fileURL as CFURL, nil),
    let auxiliaryInfoDict = CGImageSourceCopyAuxiliaryDataInfoAtIndex(source, 0, kCGImageAuxiliaryDataTypePortraitEffectsMatte) as? [AnyHashable: Any],
    let matteData = try? AVPortraitEffectsMatte(fromDictionaryRepresentation: auxiliaryInfoDict),
    let matteCIImage = CIImage(portaitEffectsMatte: matteData)
    else {
        return nil
    }
    return UIImage(ciImage: matteCIImage)
}

我唯一的变化是基本上将fileURL修改为在我的捆绑包中使用jpg。

guard let fileURL = Bundle.main.url(forResource: "custom00", withExtension: "jpg")

但是,单步执行代码使我看到auxiliaryInfoDict的分配为nil 我从以前的项目中导入了这些JPG,该项目使用了较旧的技术来创建深度蒙版( https://www.raywenderlich.com/314-image-depth-maps-tutorial-for-ios-getting-started ),因此jpg文件应该没事的。

有人有工作示例项目吗? 谢谢

仅当照片中保存了肖像效果遮罩时,才能加载照片中保存的肖像效果遮罩。 这听起来像是重言式 ,所以让我扩展一下:

  • 如果您使用AVCapturePhotoOutput自己捕获图像,则在且仅在以下情况下,才能获得哑光肖像效果:

    • 当前捕获设备和配置上可用/受支持。 纵向效果需要深度捕捉,因此您需要选择后置双摄像头或前置TrueDepth摄像头(在配备如此的设备上)并启用深度传送

    • 您要求它。 拍摄前在照片设置中设置isPortraitEffectsMatteDeliveryEnabled

    • 该设备可以生成一个。 人像效果遮罩来自经过训练可识别人脸特征的机器学习模型。 如果您的照片中没有可识别的人,那么您就不会有遮罩。 (对不起,宠物爱好者。)

    • 您不会选择不保存它。 您可以关闭embedsPortraitEffectsMatteInPhoto ,或使用AVCapturePhotoFileDataRepresentationCustomizer在捕获后和保存前替换/删除照片的遮罩(或其他元素)。 显然,如果您想要遮罩,就不要摆脱它。

  • 由使用相机捕获API的任何第三方应用程序保存的图像也是如此。 (也就是说,如果其他应用遵循上述步骤,则可以从其他应用程序保存的图像中读取遮罩,与尝试使用遮罩捕获图像时一样。)请参阅配置相机捕捉以收集人像效果遮罩。

  • 如果您使用Apple的内置Camera应用程序捕获了照片,则该照片必须是在iOS 12上捕获的人像模式照片(后置双摄像头或前置TrueDepth摄像头)。

该API似乎适用于前置摄像头照片,但是尚不适用于前置摄像头照片。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM