在仔细观察了一下之后,我发现我必须添加以下辅助功能:
https://github.com/hollance/CoreMLHelpers
到我的Xcode项目。
从多阵列初始化问题来看:
https://stackoverflow.com/a/44462908/403403
然后我拼凑出这个解决方案:
let request = VNCoreMLRequest(model: model) { (request, error) in
guard let results = request.results as? [VNCoreMLFeatureValueObservation] else {
fatalError("Model failed to process image")
}
let obs : VNCoreMLFeatureValueObservation = (results.first)!
let m: MLMultiArray = obs.featureValue.multiArrayValue!
var mArrays = [MLMultiArray]()
for i in 1..<10 {
let start = i*(IMG_SIZE*IMG_SIZE)
guard let tmp : MLMultiArray = try? MLMultiArray(shape:[768,768], dataType:MLMultiArrayDataType.double) else {
fatalError("Unexpected runtime error. MLMultiArray")
}
for n in 0..<(IMG_SIZE*IMG_SIZE) {
tmp[n] = m[start+n]
}
mArrays.append(tmp)
}
guard let mlMultiArray : MLMultiArray = try? MLMultiArray(shape:[768,768], dataType:MLMultiArrayDataType.double) else {
fatalError("Unexpected runtime error. MLMultiArray")
}
for n in 0..<(IMG_SIZE*IMG_SIZE) {
mlMultiArray[n] = m[n]
}
let imagePredict : UIImage = mlMultiArray.image(offset: 0, scale: 255)!
self.imagePred1.image = imagePredict
self.imagePred2.image = mArrays[0].image(offset: 0, scale: 255)!
self.imagePred3.image = mArrays[1].image(offset: 0, scale: 255)!
self.imagePred4.image = mArrays[2].image(offset: 0, scale: 255)!
self.imagePred5.image = mArrays[3].image(offset: 0, scale: 255)!
self.imagePred6.image = mArrays[4].image(offset: 0, scale: 255)!
self.imagePred7.image = mArrays[5].image(offset: 0, scale: 255)!
self.imagePred8.image = mArrays[6].image(offset: 0, scale: 255)!
self.imagePred9.image = mArrays[7].image(offset: 0, scale: 255)!
}
希望有一个更清洁的方法,但现在有效