ios - 将一个 VNCoreMLFeatureValueObservation 结果(3D Double Array)转换为多个 UIImage

标签 ios swift machine-learning coreml

我有一个 coreml 模型,它在运行后返回一个 VNCoreMLFeatureValueObservation 对象,其中包含 1 个“MultiArray:Double 10 x IMG_SIZE x IMG_SIZE 数组”

我如何将其转换为 10 个 UIImages,每个具有 IMG_SIZE x IMG_SIZE 尺寸,并且它们的值为灰度?

最佳答案

在四处窥探之后,我发现我必须添加这些辅助函数:

https://github.com/hollance/CoreMLHelpers到我的 Xcode 项目。 来自 MultiArray 初始化问题: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 0..<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)
            }



            self.imagePred0.image = mArrays[0].image(offset: 0, scale: 255)!
            self.imagePred1.image = mArrays[1].image(offset: 0, scale: 255)!
            self.imagePred2.image = mArrays[2].image(offset: 0, scale: 255)!
            self.imagePred3.image = mArrays[3].image(offset: 0, scale: 255)!
            self.imagePred4.image = mArrays[4].image(offset: 0, scale: 255)!
            self.imagePred5.image = mArrays[5].image(offset: 0, scale: 255)!
            self.imagePred6.image = mArrays[6].image(offset: 0, scale: 255)!
            self.imagePred7.image = mArrays[7].image(offset: 0, scale: 255)!
            self.imagePred8.image = mArrays[8].image(offset: 0, scale: 255)!
            self.imagePred9.image = mArrays[9].image(offset: 0, scale: 255)!



        }

希望有一个更简洁的方法,但目前有效

关于ios - 将一个 VNCoreMLFeatureValueObservation 结果(3D Double Array)转换为多个 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51470008/

相关文章:

iphone - iOS 应用程序 sqlite3 上的离线缓存损坏

ios - 合并按钮操作以减少重复

arrays - Swift - 使用范围运算符将项目添加到数组,奇怪的行为

python - 统一文本和图像分类 (Python)

ios - 使用任何手势关闭 UIPopoverPresentationController,而不仅仅是点击

ios - self.textField.delegate = self 如何快速工作?

ios - 无法将类型 UIDatePicker 的值分配给类型字符串? swift 2.2

r - 使用 R 从文本中提取位置列表

python - t-SNE 映射到 2D 或 3D 图

iphone - 如何在选择器 View iOS 中设置文本对齐方式