如何在Swift中用单个图像运行TFlite对象检测?

问题描述 投票:1回答:1

我从here获得了iOS的tensorflow示例应用程序。我的模型可以在该tf的应用程序中进行实时检测,但是我想用一张图像来完成。据我所知,运行模型的主要部分是:

self.result = self.modelDataHandler?.runModel(onFrame: buffer)

buffer变量是一个CVPixelBuffer,我可以像tf的应用一样使用CMSampleBufferGetImageBuffer()从视频帧中获取它。但是我的应用程序没有使用框架,因此我没有此选项。

我捕获的照片是UIImage,我尝试将其转换为CVPixelBuffer以便与上面的代码一起使用:

let ciImage: CIImage = CIImage(cgImage: (self.image?.cgImage)!)
let buffer: CVPixelBuffer = self.getBuffer(from: ciImage)!

getBuffer()是:

func getBuffer(from image: CIImage) -> CVPixelBuffer? {
    let attrs = [kCVPixelBufferCGImageCompatibilityKey: kCFBooleanTrue, kCVPixelBufferCGBitmapContextCompatibilityKey: kCFBooleanTrue] as CFDictionary

    var pixelBuffer : CVPixelBuffer?

    let status = CVPixelBufferCreate(kCFAllocatorDefault, Int(image.extent.width), Int(image.extent.height), kCVPixelFormatType_32BGRA, attrs, &pixelBuffer)

    guard (status == kCVReturnSuccess) else {
        print("Error converting ciImage to CVPixelBuffer")
        return nil
    }

    return pixelBuffer
}

然后运行:

self.result = self.modelDataHandler?.runModel(onFrame: buffer)
let inferences: [Inference] = self.result!.inferences
let time: Double = self.result!.inferenceTime

因此,我的time约为50或60毫秒,但inferences为空。我不知道从UIImage到CVPixelBuffer的转换是否正确,或者我是否忘记了另一个错误或过程。

如果您有任何疑问,请问我,任何帮助都将非常有用!谢谢。

ios swift object-detection tensorflow-lite
1个回答
0
投票

我发现了问题,我从UIImage到CVPixelBuffer的转换是错误的,不需要CIImage。从this question中,我得到了正确的代码来执行此转换。

© www.soinside.com 2019 - 2024. All rights reserved.