我有一个运行良好的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代码= 3“ VNCoreMLTransform请求失败” UserInfo = {NSLocalizedDescription = VNCoreMLTransform请求失败,NSUnderlyingError = 0x280cbbab0 {Error Domain = com.apple.CoreML代码= 0“没有必需的输入功能传递给神经网络。“
所以,似乎我没有正确地将第二个参数传递给请求处理程序。我一直找不到答案。
谢谢您的帮助。
[查看featureProvider
的VNCoreMLRequest
属性。这是一个提供其他输入的对象,即图像输入以外的任何其他输入。