swiftpackage 打包 mlpackage
.mlpackage 文件是苹果的机器学习框架 CoreML 模型包的格式。一般使用的时候是将它直接拖进 xcode 中。 这时,xcode 会将它编译生成 .mlmodelc 文件以及对应的 swift 或 object-c 代码文件。 这样,在你的项目里面才能正常使用他们。
当使用 swiftpackage 中通过 resources 字段来打包 .mlpackage 包的时候, 它们并不会自动编译,此时就会无法正常使用了。需要采用如下步骤来处理:
- 使用命令行手动编译 .mlpacakge
如果 xcrun 说找不到 coremlcompiler,你需要运行如下指令:
- 修改生成代码文件
假设我们的原始模型文件叫 abc.mlpacakge。通过执行上面的指令,你会获得:
- abc.mlmodelc
- abc.swift
你需要将它们拷贝到你的 swiftpackage 项目中,并修改一下 abc.swift 中一个函数:
class nmp {
// 找到这个函数,修改其实现为如下内容。否则通过 swiftpacakge 引入的时候会找不到资源
class var urlOfModelInThisBundle : URL {
return Bundle.module.url(forResource: , withExtension: , subdirectory: nil)!
}
}
- 修改 swiftpackage 中 resources 字段引入的名字
修改 Package.swift
targets: [
.target(
name: ,
// 假设原来为 resources: [.process("abc.mlpackage")]
resources: [.process()]
),
]
完成以上步骤,就可以让你的机器学习模型正常运行了。