标签: coreml

为具有灵活形状的 CoreML 2 模型指定输入/输出维度

我设法创建了一个具有灵活输入/输出形状大小的 CoreML 2.0 模型:

在此处输入图片说明

但是,我不知道如何在我的 Xcode 项目中设置大小。如果我将输入像素缓冲区大小设置为 2048x2048,输出像素缓冲区仍然是 1536x1536。如果我将其设置为 768x768,则生成的像素缓冲区仍为 1536x1536 - 但在 768x768 区域之外是空白的。

我检查了自动生成的 Swift 模型类,但没有看到任何线索。

我在任何地方都找不到展示如何使用“灵活性”尺寸的示例。

在 WWDC 2018 Session 708 “What's New in Core ML”中,第 1 部分指出:

这意味着现在您必须运送单个模型。您不必有任何冗余代码。如果您需要在标清和高清之间切换,您可以更快地完成,因为我们不需要从头开始重新加载模型;我们只需要调整它的大小。您有两个选项来指定模型的灵活性。您可以为其尺寸定义一个范围,因此您可以定义最小宽度和高度以及最大宽度和高度。然后在推理时选择两者之间的任何值。但也有另一种方式。您可以枚举将要使用的所有形状。例如,所有不同的纵横比,所有不同的分辨率,这对性能更好。Core ML 更早地了解您的用例,因此它可以 - 它有机会执行更多优化。

他们说“我们只需要调整它的大小”。这太令人沮丧了,因为他们没有告诉你如何调整它的大小!他们还说“然后在推理中选择介于两者之间的任何值”,但不提供如何选择介于两者之间的值的线索!

这是我添加灵活形状大小的方法:

import coremltools
from coremltools.models.neural_network import flexible_shape_utils
spec = coremltools.utils.load_spec('mymodel_fxedShape.mlmodel')
img_size_ranges = flexible_shape_utils.NeuralNetworkImageSizeRange()
img_size_ranges.add_height_range(640, 2048)
img_size_ranges.add_width_range(640, 2048)
flexible_shape_utils.update_image_size_range(spec, feature_name='inputImage', size_range=img_size_ranges)
flexible_shape_utils.update_image_size_range(spec, feature_name='outputImage', size_range=img_size_ranges)
coremltools.utils.save_spec(spec, 'myModel.mlmodel')
Run Code Online (Sandbox Code Playgroud)

以下是该模型的说明:

description {
  input {
    name: "inputImage"
    shortDescription: "Image to stylize"
    type {
      imageType {
        width: 1536
        height: …
Run Code Online (Sandbox Code Playgroud)

ios swift coreml

7
推荐指数
1
解决办法
1513
查看次数

如何判断 Apple 的 Vision 框架中哪些语言可用于文本识别?

我正在尝试向我的应用程序添加该选项,以在使用 Apple 的 Vision 框架识别文本时允许使用不同的语言。

似乎有一个功能,用于编程返回所支持的语言,但我不知道如果我正确地调用它,因为我只得到“EN-US”这回我相当 肯定不是唯一支持的语言?

这是我目前拥有的:

// current revision number of Vision
let revision = VNRecognizeTextRequest.currentRevision
var possibleLanguages: Array<String> = []

do {
    possibleLanguages = try VNRecognizeTextRequest.supportedRecognitionLanguages(for: .accurate, 
                                                                            revision: revision)
} catch {
    print("Error getting the supported languages.")
}

print("Possible languages for revision \(revision):\n(possibleLanguages.joined(separator: "\n"))")
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,谢谢。

machine-learning augmented-reality swift apple-vision coreml

7
推荐指数
2
解决办法
2285
查看次数

如何在 CoreML 中初始化 MLMultiArray

我有一个由 40 个数组组成的数组,其中包含 12 个双重特征,所以类型是 [[double]]。目前我正在将此数据发送到 Google Cloud ML API 以获得相关预测。

由于 Apple 最近推出了 CoreML 和 coremltools,我将我的模型从 keras 转换为 .mlmodel 以避免数千次 google cloud api 调用并直接在我的 iPhone 上进行推理:

coreml_model = coremltools.converters.keras.convert(new_Model, input_names=['accelerations'],
                                                    output_names=['scores'])
coreml_model.save('PredictionModel.mlmodel')
Run Code Online (Sandbox Code Playgroud)

将模型添加到我的 Xcode 项目后,它看起来像: 在此处输入图片说明

我不知道这些其他输入和输出来自哪里。要获得预测,我需要将我的 12 个双精度数组数组转换为 MLMultiArray,但我不知道如何执行此操作。有没有人遇到过类似的问题?这是我目前未完成的方法:

_predictionModel = PredictionModel()
guard let mlMultiArray = try? MLMultiArray(dataPointer: <#T##UnsafeMutableRawPointer#>, shape: <#T##[NSNumber]#>, dataType: <#T##MLMultiArrayDataType#>, strides: <#T##[NSNumber]#>, deallocator: <#T##((UnsafeMutableRawPointer) -> Void)?##((UnsafeMutableRawPointer) -> Void)?##(UnsafeMutableRawPointer) -> Void#>) else {
        fatalError("Unexpected runtime error.")
    }
guard let predictionOutput = try? _predictionModel.prediction(accelerations: mlMultiArray, lstm_1_h_in: nil, lstm_1_c_in: …
Run Code Online (Sandbox Code Playgroud)

swift ios11 xcode9-beta coreml xcode9

6
推荐指数
1
解决办法
8844
查看次数

如何从VNClassificationObservation获取对象rect/coordinates

有来自的问题VNClassificationObservation.

我的目标是识别对象并使用对象名称显示弹出窗口,我能够获得名称,但我无法获得对象坐标或框架.

这是代码:

let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: requestOptions)
do {
    try handler.perform([classificationRequest, detectFaceRequest])
} catch {
    print(error)
}
Run Code Online (Sandbox Code Playgroud)

然后我处理

func handleClassification(request: VNRequest, error: Error?) {
      guard let observations = request.results as? [VNClassificationObservation] else {
          fatalError("unexpected result type from VNCoreMLRequest")
      }

    // Filter observation
    let filteredOservations = observations[0...10].filter({ $0.confidence > 0.1 })

    // Update UI
   DispatchQueue.main.async { [weak self] in

    for  observation in filteredOservations {
            print("observation: ",observation.identifier)
            //HERE: I need to display popup with observation name
    } …
Run Code Online (Sandbox Code Playgroud)

image-recognition ios swift ios11 coreml

6
推荐指数
2
解决办法
2155
查看次数

Coreml:尚未生成模型类

我已经使用coremltools从keras转换了模型,将其添加到项目中并添加到目标中。然后,当我在“模型类”部分的导航器中按模型时,我得到“尚未生成模型类”。这是什么意思?

在此处输入图片说明

xcode ios coreml

6
推荐指数
1
解决办法
696
查看次数

ARKit 和 Vision 框架——检测墙壁边缘

我想知道理论上是否可以检测墙壁边缘/线条(如图所示)?

我所能实现的只是检测相机预览可见的矩形的顶点。但是我们不能将真正的墙壁视为矩形。那么,是否有任何先进的技术(比如通过 Core ML 训练或其他方式)来实现这一目标?

在此处输入图片说明

object-detection augmented-reality apple-vision arkit coreml

6
推荐指数
1
解决办法
700
查看次数

检测脚并将 3D 模型靴子放置在 ARKit 中

我想使用 Scenekit(ARKit) 检测脚部,并像身体检测一样放置 3D 鞋子,然后将衬衫放在上面。有什么帮助吗?我怎样才能做到这一点 ?增强现实套件?想象 ?或 CoreML

工作的顺序是什么?

object-detection scenekit apple-vision arkit coreml

6
推荐指数
0
解决办法
690
查看次数

Swift 无法打开 CoreML 模型

我正在尝试使用我创建的 CoreMl 模型,但出现错误(其他模型不会出现此错误)。该错误由以下行引发:let compiled = try MLModel.compileModel(at: URL(fileURLWithPath: "/Users/myname/Desktop/ItemSimilarityRecommender.mlmodel"))。(注意:我尝试使用我的包中的路径并得到相同的错误)

错误是Error Domain=com.apple.CoreML Code=3 "Error reading protobuf spec. validator error: unable to open file for read" UserInfo={NSLocalizedDescription=Error reading protobuf spec. validator error: unable to open file for read}

我在网上可以找到的关于此错误的唯一信息是,如果省略“.mlmodel”,则可能会发生这种情况,这显然不是我的问题。当我在计算机上手动编译模型时,程序也失败。我制作了这个模型的多个版本来尝试解决这个问题,每次我都会遇到相同的错误。

编辑:

我可以手动编译该文件,它会创建一个看似有效的 .mlmodelc 文件。但是,当我使用 时try MLModel(contentsOf:),它会抛出以下错误:

2021-11-07 15:56:43.131400-0500 Movie Thing[52871:2279366] [coreml] 无法打开文件:/Users/me/Desktop/ItemSimilarityRecommender.mlmodelc/coremldata.bin。它不是有效的 .mlmodelc 文件。2021-11-07 15:56:43.132186-0500 Movie Thing[52871:2279366] [coreml] MLModelAsset:加载失败,错误错误 Domain=com.apple.CoreML Code=0“无法加载模型:file:/// Users/me/Desktop/ItemSimilarityRecommender.mlmodelc/。使用 Xcode 编译模型或MLModel.compileModel(at:)." UserInfo={NSLocalizedDescription=无法加载模型:file:///Users/me/Desktop/ItemSimilarityRecommender.mlmodelc/。使用 Xcode 或MLModel.compileModel(at:). ,NSUnderlyingError = 0x6000036e3090 {Error Domain = com.apple.CoreML …

macos swift coreml createml mlmodel

6
推荐指数
0
解决办法
2056
查看次数

CoreML:使用图像分类器“无法评估管道中的模型 0”

我正在尝试使用自定义模型对图像进行分类,如下所示。输入图像的分辨率正确(299 x 299)。但是,调用时prediction(image:)出现错误“无法评估管道中的模型 0”

// Image is given
let pixelBuffer = pixelBuffer(from: image)

if let pictureClassifier = try? PictureClassifier() {
    var prediction: PictureClassifierOutput?
    do {
        prediction = try pictureClassifier?.prediction(image: pixelBuffer)
    } catch {
        if let mlModelError = error as? MLModelError {
            print(mlModelError.errorCode, mlModelError.localizedDescription)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

swift coreml

6
推荐指数
0
解决办法
295
查看次数

Swift coreml:检查模型路径时无法获取主目录

我正在使用此代码从图像中提取文本,代码第一次运行完美,之后它开始给出此错误消息[coreml] Failed to get the home directory when checking model path。这是我用来提取文本形式图像的代码。这与我从苹果文档中复制的代码相同

func requestORC(image: UIImage) {
        
        //        guard let cgImage = UIImage(named: "test")?.cgImage else { return }
        guard let cgImage = image.cgImage else { return }
        
        //        / Create a new image-request handler.
        let requestHandler = VNImageRequestHandler(cgImage: cgImage)
        
        // Create a new request to recognize text.
        let request = VNRecognizeTextRequest(completionHandler: recognizeTextHandler)
        
        do {
            // Perform the text-recognition request.
            try requestHandler.perform([request])
        } catch {
            print("Unable to perform the …
Run Code Online (Sandbox Code Playgroud)

xcode swift coreml swiftui

6
推荐指数
0
解决办法
894
查看次数