首页 > 解决方案 > CoreML 出错:导入 mymodel.mlmodel 时源文件无效

问题描述

使用 CoreML 模型构建我的 ios 应用程序时遇到问题。我已使用示例代码在我的项目中实现 coreML。我可以在使用 repo 中的给定模型从 github 克隆示例代码时运行示例代码,但是当我粘贴到自己的模型中时出现错误:

lexical preprocessor issue
    source file is not valid UTF-8
        SSD_model.mlmodel

我的模型是一个用于生成边界框的 SSD 模型(而不仅仅是像 repo 模型那样的对象检测),所以这可能会产生问题。我使用 tensorflow 对象检测 API 对其进行了训练,并使用这篇有用的博客文章将其导出到 coreML 。通过在另一个为 SSD 模型制作的脚本中对其进行测试,我已经验证了我的模型运行良好。这是我现在如何导入模型的第一个示例的片段:

#import <CoreML/CoreML.h>
#import <Vision/Vision.h>
#import "SSD_model.mlmodel"

- (void)viewDidLoad {
    [super viewDidLoad];

    model = [[[SSD_model alloc] init] model]
    m = [VNCoreMLModel modelForMLModel: model error:nil];

我需要更改此目标 C 代码以使其工作吗?或者我可能忘记的任何项目设置?谢谢!

标签: iosobjective-cxcodecoreml

解决方案


你得到这个错误是因为这个=>#import "SSD_model.mlmodel"

本质上,编译器会尝试导入一些源代码,而是找到不是的东西。

您需要先编译此模型才能使用它。您可以通过Xcode(它会为您自动生成一个接口)或使用在运行时编译模型的API来编译它(这样您就可以更新您的模型而无需发布新版本的应用程序)。


注意:在您链接的示例中,作者导入SomeModel.h(我认为是 ObjC 的 autogen 标头)而不是 SomeModel.mlmodel. 所以我想这也是你可能打算做的。


推荐阅读