【发布时间】:2019-03-05 17:10:48
【问题描述】:
CoreImage 中有这个新的但仍未记录的CICoreMLModelFilter。它有两个参数:
inputImage - 用作输入图像的图像。对于也使用背景图像的过滤器,这是前景图像。
inputModel - 用于对图像应用效果的 CoreML 模型。
这个想法很简单 - 拍摄一张图片,应用样式转换并输出风格化的图片。
所以我将 CoreML 模型加载到我的测试应用程序中,并尝试将此模型作为 inputModel 键传递:
guard
let mlFilter = CIFilter(name: "CICoreMLModelFilter")
else {
return nil
}
let model = StarryStyle().model
mlFilter.setValue(workingImage, forKey: "inputImage")
mlFilter.setValue(model, forKey: "inputModel")
guard
let mlResult = mlFilter.outputImage
else {
return nil
}
每当我尝试运行这个非常简单的代码时,都会出现以下异常:
[Espresso::handle_ex_] exception=Unsupported engine type
无论我尝试加载什么 MLModel,它总是抛出上述异常。我在 Mojave (10.14) 上运行 Swift 4.2。
有人尝试过使用 CoreImage 和 CoreML 吗?
【问题讨论】:
-
您尝试做的事情可能完全不受支持,但 Espresso 是实际运行 Core ML 模型的东西。 “引擎类型”可以是 MPS(用于使用 GPU)、ANE(用于 A12 上的新神经引擎)以及可能的其他类型。看看这里请求的实际引擎类型是什么会很有趣。你是在 iPhone XS 上运行它吗?如果不是,这可能就是解释。
-
Matthijs,感谢您的意见,但我非常不同意。完全有可能做到这一点,因为这已在此 WWDC 会议developer.apple.com/videos/play/wwdc2018/719 (43:20) 中显示。他们加载 CoreML 模型并将其传递给
CICoreMLModelFilter以实现样式迁移。 -
啊,但是如果他们在 WWDC 上展示了它,那么它并不是真正的无证。 ;-) 他们是在 WWDC 上的 Mojave 上展示它还是在手机上展示它?
-
我刚刚用我的模型测试了过滤器,它确实有效(在 iPhone X 上)。但是,每次调用
outputImage都会泄漏大量内存,并且在几帧之后,应用程序就会耗尽内存。它还在输入图像上使用缩放以匹配模型的输入大小——没有像 Vision 那样的智能缩放和裁剪。我想你最好写自己的CIImageProcessorKernel来将 CoreML 模型集成到 Core Image 中。
标签: swift core-graphics core-image coreml