【问题标题】:Convert a VNCoreMLFeatureValueObservation result (3D Double Array) into multiple UIImages将一个 VNCoreMLFeatureValueObservation 结果(3D 双精度数组)转换为多个 UIImage
【发布时间】:2018-12-30 09:17:29
【问题描述】:

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

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

【问题讨论】:

    标签: ios swift machine-learning coreml


    【解决方案1】:

    在窥探了一下之后,我发现我必须添加这些帮助函数:

    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)!
    
    
    
            }
    

    希望有一种更清洁的方法,但现在可以使用

    【讨论】:

      猜你喜欢
      • 2016-07-23
      • 2020-05-24
      • 2015-09-13
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多