警告“‘init()’已弃用”。 【Swift、Ios app、学习模型】

问题描述 投票:0回答:4

我正在使用 Swift 制作图像分类 iOS 应用程序。

当我写作时

guard let model = try? VNCoreMLModel(for: SqueezeNet().model) else { return }

我收到此警告。

'init()' is deprecated: Use init(configuration:) instead and handle errors appropriately.

你知道如何摆脱它吗?

swift ios-app-extension
4个回答
9
投票

对我来说,Apple 示例项目的代码已经解决了:

guard let mlModel = try? YOLOv3(configuration: .init()).model,
              let model = try? VNCoreMLModel(for: mlModel) else {
            print("Failed to load detector!")
            return


这是给我警告的代码:

guard let model = try? VNCoreMLModel(for: YOLOv3().model) else {
            print("Could not load model")
            return

8
投票

正如消息所述,

init()
已弃用。新的初始化程序采用一个配置参数。默认配置可能适合您,在这种情况下,您可以将
SqueezeNet()
替换为:

SqueezeNet(configuration: MLModelConfiguration())

2
投票

这很奇怪。右键单击

SqueezeNet()
并跳转到其定义。它会带你去上课。

找到该类的

init()
方法。它在您的
SqueezeNet
类中应该如下所示:

/**
    Construct SqueezeNet instance by automatically loading the model from the app's bundle.
*/
@available(*, deprecated, message: "Use init(configuration:) instead and handle errors appropriately.")
convenience init() {
    try! self.init(contentsOf: type(of:self).urlOfModelInThisBundle)
}

我不确定你是如何设置你的机器学习的,但看起来好像是:

  • @available(*, deprecated, message: "Use init(configuration:) instead and handle errors appropriately.")

不是你的错。这可能意味着以下任何一种情况:

  1. 您的 ML 设置不正确
  2. 您的 iOS 不是最新的

轻松修复:

您所要做的就是将其粘贴到您的项目中:

extension SqueezeNet {
    convenience init(_ foo: Void) {
        try! self.init(contentsOf: type(of:self).urlOfModelInThisBundle)
    }
}

然后,像这样编辑代码:

guard let model = try? VNCoreMLModel(for: SqueezeNet(()).model) else { return }

它应该不能正常工作。如果没有请告诉我。


0
投票

使用它在 React Native cli 中创建项目

反应本机版本0.76

npx @react-native-community/cli 初始化 FaceDetect

© www.soinside.com 2019 - 2024. All rights reserved.