【发布时间】:2020-07-19 18:01:35
【问题描述】:
我有一个运行良好的 Swift / CoreML 代码。我想通过使用 Vision 框架来简化我的代码。 在这段代码中,有一个我想去掉的 UIImage -> CGImage -> CVPixelBuffer 转换。我知道使用 Vision 可以直接将 CGImage 作为输入参数传递。我遇到的问题是我的模型需要 2 个输入(图像 + MLMultiArray)和输出和图像:
Inputs
my_input : Image (Color 512 x 512)
my_sigma : MultiArray (Float32 1)
Outputs
my_output : Image (Color 512 x 512)
我尝试按如下方式传递 sigma 参数:
guard let cgImage = uiImage.cgImage else {
return nil
}
let options:[VNImageOption: Any] = [VNImageOption(rawValue: "my_sigma"): 0.1]
let handler = VNImageRequestHandler(cgImage: cgImage, options: options)
do {
try handler.perform(visionRequest)
} catch {
print(error)
}
这样做,我得到以下错误:
[coreml] 验证输入失败。没有结果:Error Domain=com.apple.vis Code=3 "The VNCoreMLTransform request failed" UserInfo={NSLocalizedDescription=The VNCoreMLTransform request failed, NSUnderlyingError=0x280cbbab0 {Error Domain=com.apple.CoreML Code=0 "Required input feature not传递给神经网络。”
所以,看来我没有正确地将第二个参数传递给请求处理程序。我一直没能找到答案。
- 将此类参数传递给 Vision 的正确方法是什么?
- 你知道我是否可以使用 Vision 直接输出图像吗?
感谢您的帮助。
【问题讨论】: