为什么我的 MLKit 模型在处理图像时总是 returns 错误?

Why does my MLKit model always returns an error when processing an image?

我有一个 Google MLKit 模型用于在捕获图像后标记图像,但每次我尝试处理图像时,它总是给我这个错误:

label process error:: Pipeline failed to fully start: Calculator::Open() for node "ClassifierClientCalculator" failed: #vk The TFLite Model Metadata must not contain label maps when text_label_map_file is used.

这是我的 MLKit 图像标签器配置代码(此代码基于 MLKit 的文档):

private func configureModelSource() { // Called in viewDidLoad()
    guard let manifestPath = Bundle.main.path(forResource: "filename", ofType: "json") else { return }
    guard let localModel = LocalModel(manifestPath: manifestPath) else { return }
    let options = CustomImageLabelerOptions(localModel: localModel)
    options.confidenceThreshold = NSNumber(value: 0.0)
    imageLabeler = ImageLabeler.imageLabeler(options: options)
}

private func processImage(with image: UIImage) { // Called after capturing an Image
    guard imageLabeler != nil else { return }
    
    let visionImage = VisionImage(image: image)
    visionImage.orientation = image.imageOrientation
    
    imageLabeler?.process(visionImage) { labels, error in
        guard error == nil, let labels = labels, !labels.isEmpty else {
            print("label process error:: \(error?.localizedDescription ?? "nil")")
            return
        }
        for label in labels {
            // Do something...
        }
    }
}

有办法解决吗?对于上下文,model.tflite 文件已更新。出现此错误的文件之前的文件按预期工作。但是每次我 运行 我的应用程序时,新的 model.tflite 文件总是给我这个错误。这是与文件相关的错误还是我的代码做错了我必须同时更新它?

根据错误信息,我的理解如下:

鉴于您使用的是 LocalModel(manifestPath: manifestPath) API,它期望使用旧版 TFLite 模型格式,其中标签图通过单独的文本文件提供,而 model.tflite 本身不提供包含标签映射。这就是为什么您的模型更新之前的文件有效。

要使用更新后的 model.tflite(它的元数据中似乎包含实验室地图),我认为您可以尝试以下操作,直接将 model.tflite 文件与自定义模型一起使用 API 不通过 filename.json 清单:

guard let modelPath = Bundle.main.path(forResource: "model", ofType: "tflite") else { return }
guard let localModel = LocalModel(path: modelPath) else { return }

您可以在此处查看有关自定义模型的文档:https://developers.google.com/ml-kit/vision/image-labeling/custom-models/ios