Ios Can';无法使AVSMATTE代码正常工作

Ios Can';无法使AVSMATTE代码正常工作,ios,swift,avfoundation,ios12,avkit,Ios,Swift,Avfoundation,Ios12,Avkit,我试图按照苹果提供的一些代码,使用iOS 12中引入的一些新类和对象,从肖像模式照片中检索图像掩码。代码如下: 我唯一的改变是基本上修改fileURL以在我的包中使用jpg guard let fileURL = Bundle.main.url(forResource: "custom00", withExtension: "jpg") 但是,通过单步执行代码,我可以看到auxiliarynfodict的赋值是nil。我从以前的一个项目中导入了这些jpg,该项目使用了较旧的技术来创建深度掩码

我试图按照苹果提供的一些代码,使用iOS 12中引入的一些新类和对象,从肖像模式照片中检索图像掩码。代码如下:

我唯一的改变是基本上修改fileURL以在我的包中使用jpg

guard let fileURL = Bundle.main.url(forResource: "custom00", withExtension: "jpg")
但是,通过单步执行代码,我可以看到
auxiliarynfodict
的赋值是
nil
。我从以前的一个项目中导入了这些jpg,该项目使用了较旧的技术来创建深度掩码(),因此jpg文件应该很好


有人有一个工作样本项目吗?谢谢

看起来此API适用于前摄像头照片,但还不适用于后摄像头照片。

看起来此API适用于前摄像头照片,不适用于后置摄像头照片。

仅当照片中保存有肖像效果蒙版时,才可以加载保存在照片中的肖像效果蒙版。这听起来像是一个问题,让我来扩展一下:

  • 如果您自己使用
    AVCapturePhotoOutput
    拍摄图像,则只有在以下情况下,您才能获得肖像效果蒙版:

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

    • 您可以请求它。在拍摄前设置您的照片设置

    • 该设备可以生成一个。肖像效果蒙版来自经过训练的机器学习模型,用于识别人体特征。如果你的照片中没有可识别的人,你就不会得到哑光。(对不起,宠物爱好者。)

    • 您不会选择不保存它。您可以关闭
      embeddesportraitefectsmatteinphoto
      ,或者使用
      AVCapturePhotoFileDataRepresentationCustomizer
      在捕获后和保存前替换/删除照片的蒙版(或其他元素)。很明显,如果你想要哑光,不要扔掉它

  • 任何使用摄像头捕获API的第三方应用程序保存的图像也是如此。(也就是说,如果其他应用程序遵循上述步骤,您可以从其保存的图像中读取蒙版,就像您尝试使用蒙版捕获图像一样。)请参阅

  • 如果你使用苹果的内置摄像头应用程序拍摄照片,它需要是在iOS 12上拍摄的肖像模式照片(背面双摄像头或正面TrueDepth摄像头)


只有保存了肖像效果蒙版的照片才可以加载保存在照片中的肖像效果蒙版。这听起来像是一个问题,让我来扩展一下:

  • 如果您自己使用
    AVCapturePhotoOutput
    拍摄图像,则只有在以下情况下,您才能获得肖像效果蒙版:

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

    • 您可以请求它。在拍摄前设置您的照片设置

    • 该设备可以生成一个。肖像效果蒙版来自经过训练的机器学习模型,用于识别人体特征。如果你的照片中没有可识别的人,你就不会得到哑光。(对不起,宠物爱好者。)

    • 您不会选择不保存它。您可以关闭
      embeddesportraitefectsmatteinphoto
      ,或者使用
      AVCapturePhotoFileDataRepresentationCustomizer
      在捕获后和保存前替换/删除照片的蒙版(或其他元素)。很明显,如果你想要哑光,不要扔掉它

  • 任何使用摄像头捕获API的第三方应用程序保存的图像也是如此。(也就是说,如果其他应用程序遵循上述步骤,您可以从其保存的图像中读取蒙版,就像您尝试使用蒙版捕获图像一样。)请参阅

  • 如果你使用苹果的内置摄像头应用程序拍摄照片,它需要是在iOS 12上拍摄的肖像模式照片(背面双摄像头或正面TrueDepth摄像头)


不要使用url,试着使用照片框架获取照片并使用其数据,看看是否有效。不要使用url,试着使用照片框架获取照片并使用其数据,看看是否有效
guard let fileURL = Bundle.main.url(forResource: "custom00", withExtension: "jpg")