Я встраиваю сеть сегментации изображений в приложение swift.
Модель отвечает изображением в градациях серого вместо 0-255 и выводит значения в диапазоне 0-1.
Есть ли способ заставить coremltools генерировать mlmodels, которые изменяют масштаб отклика модели на 0-255, как это возможно на входе?
Может быть, есть способ сделать это в быстром коде?
Я получаю CVPixelBuffer от модели и преобразую его в CGImage, чтобы отобразить его в UIImageView. Выход в диапазоне 0-1 выглядит как черный.
Есть ли какой-либо готовый метод для изменения масштаба до 0-255, чтобы его можно было отобразить?
Вот мой код:
расширение CVPixelBuffer {
func toCGImage() -> CGImage?{
CVPixelBufferLockBaseAddress(self, .readOnly)
let width = CVPixelBufferGetWidth(self)
let height = CVPixelBufferGetHeight(self)
let data = CVPixelBufferGetBaseAddress(self)!
let outContext = CGContext(data: data,
width: width,
height: height,
bitsPerComponent: 8,
bytesPerRow: CVPixelBufferGetBytesPerRow(self),
space: CGColorSpaceCreateDeviceGray(),
bitmapInfo: CGImageAlphaInfo.none.rawValue)!
// space: CGColorSpaceCreateDeviceRGB(),
// bitmapInfo: CGImageByteOrderInfo.order32Little.rawValue | CGImageAlphaInfo.noneSkipFirst.rawValue)!
// outContext.translateBy(x: 0, y: 1)
// outContext.scaleBy(x: 0, y: 255)
let outImage = outContext.makeImage()!
CVPixelBufferUnlockBaseAddress(self, .readOnly)
return outImage
}
}
экспериментировал с bitmapinfo в качестве orderMask, но это только приложение для сбоя.
bitmapInfo: CGImageByteOrderInfo.orderMask.rawValue | CGImageAlphaInfo.noneSkipFirst.rawValue)!
Я отправляю ответ модели в UIImageView так:
DispatchQueue.main.async {
self.imageView?.image = UIImage(cgImage: cgImage)
}
Пожалуйста, помогите, спасибо