Облегченный вывод изображения Tensorflow для python и iOS / Android - PullRequest
1 голос
/ 13 февраля 2020

Я конвертирую модель Keras в TF lite, выходной размер равен (1, 256, 256, 1). результат на python правильный, но когда я пытаюсь построить изображение на ios swift, результат неверный.

Вот код, который я использую для создания UIImage из списка выходных данных.


// helper function
---------------------------------------
// MARK: - Extensions
extension Data {
  init<T>(copyingBufferOf array: [T]) {
    self = array.withUnsafeBufferPointer(Data.init)
  }

  /// Convert a Data instance to Array representation.
  func toArray<T>(type: T.Type) -> [T] where T: ExpressibleByIntegerLiteral {
    var array = [T](repeating: 0, count: self.count/MemoryLayout<T>.stride)
    _ = array.withUnsafeMutableBytes { copyBytes(to: $0) }
    return array
  }
}

func imageFromSRGBColorArray(pixels: [UInt32], width: Int, height: Int) -> UIImage?
{
    guard width > 0 && height > 0 else { return nil }
    guard pixels.count == width * height else { return nil }

    // Make a mutable copy
    var data = pixels

    // Convert array of pixels to a CGImage instance.
    let cgImage = data.withUnsafeMutableBytes { (ptr) -> CGImage in
      let ctx = CGContext(
        data: ptr.baseAddress,
        width: width,
        height: height,
        bitsPerComponent: 8,
        bytesPerRow: MemoryLayout<UInt32>.size * width,
        space: CGColorSpace(name: CGColorSpace.sRGB)!,
        bitmapInfo: CGBitmapInfo.byteOrder32Little.rawValue
          + CGImageAlphaInfo.premultipliedFirst.rawValue
      )!
      return ctx.makeImage()!
    }

    // Convert the CGImage instance to an UIImage instance.
    return UIImage(cgImage: cgImage)
  }

   let results = outputTensor.data.toArray(type: UInt32.self)

   let maskImage = imageFromSRGBColorArray(pixels: results, width: 256, height: 256)

результат, который я получаю, совершенно неверен по сравнению с python. Я думаю, что функция imageFromSRGBColorArray не является правильной. Может ли кто-нибудь помочь мне разобраться в проблеме?

...