为什么我的 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
我有一个 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