0

ピクセル バッファ用のこのコードがありますが、問題があります。何らかの理由で、画像は 224 x 224 である必要があります。2 つ目の問題は、CoreML がそれほど正確ではないことです。ピクセル バッファを設定するより正確な方法が必要です。

インポート CoreVideo インポート UIKit インポート CoreImage

struct pixelBufferGenerator {
    static func buffer(from image: UIImage) -> CVPixelBuffer? {



        let tDictionary = [kCVPixelBufferCGImageCompatibilityKey: kCFBooleanTrue, kCVPixelBufferCGBitmapContextCompatibilityKey: kCFBooleanTrue] as CFDictionary
        var pixelBuffer : CVPixelBuffer?
        let status = CVPixelBufferCreate(kCFAllocatorDefault, Int(image.size.width), Int(image.size.height), kCVPixelFormatType_32ARGB, tDictionary, &pixelBuffer)
    guard (status == kCVReturnSuccess) else {
        return nil


    }

    CVPixelBufferLockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0))
    let pixelData = CVPixelBufferGetBaseAddress(pixelBuffer!)

    let rgbColorSpace = CGColorSpaceCreateDeviceRGB()
    let context = CGContext(data: pixelData, width: Int(image.size.width), height: Int(image.size.height), bitsPerComponent: 8, bytesPerRow: CVPixelBufferGetBytesPerRow(pixelBuffer!), space: rgbColorSpace, bitmapInfo: CGImageAlphaInfo.noneSkipFirst.rawValue)


    UIGraphicsPushContext(context!)
    image.draw(in: CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height))
    UIGraphicsPopContext()
    CVPixelBufferUnlockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0))

        return pixelBuffer
    }
}

この解決策は少し冗長に思えます。

4

0 に答える 0