从UIImage转换为MLMultiArray

时间:2019-05-12 20:00:48

标签: ios swift multidimensional-array coreml coremltools

我正在使用预先训练的mlmodel进行图像分类。该模型将3 x 224 x 224 MultiArray作为图像格式输入。对于当前的应用程序,我正在使用UIImage。有没有一种方法可以将UIImage转换为MLMultiArray?

我已经看到了从Keras模型转换为CoreML模型的一些答案,但是我的模型已经是mlmodel格式,无法访问数据。

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是更改mlmodel文件中输入的格式。即使您没有原始的Keras模型,也可以执行此操作。

在Python脚本中执行以下操作:

import coremltools
import coremltools.proto.FeatureTypes_pb2 as ft 

spec = coremltools.utils.load_spec("YourModel.mlmodel")

input = spec.description.input[0]
input.type.imageType.colorSpace = ft.ImageFeatureType.RGB
input.type.imageType.height = 224 
input.type.imageType.width = 224

coremltools.utils.save_spec(spec, "YourNewModel.mlmodel")

也可以将UIImage转换为MLMultiArray,但是如果您的模型仍然可以在图像上正常工作,则最好将输入类型更改为图像。

顺便说一句,如果您仍然拥有原始Keras模型,则可以通过向coremltools Keras转换器提供image_input_names="your_input"来自动执行此操作。在这种情况下,无需编写新的Python脚本。