我设法创建了一个具有灵活输入/输出形状大小的 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) 我正在尝试向我的应用程序添加该选项,以在使用 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
我有一个由 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)
我不知道这些其他输入和输出来自哪里。要获得预测,我需要将我的 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) 有来自的问题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) 我想知道理论上是否可以检测墙壁边缘/线条(如图所示)?
我所能实现的只是检测相机预览可见的矩形的顶点。但是我们不能将真正的墙壁视为矩形。那么,是否有任何先进的技术(比如通过 Core ML 训练或其他方式)来实现这一目标?
object-detection augmented-reality apple-vision arkit coreml
我想使用 Scenekit(ARKit) 检测脚部,并像身体检测一样放置 3D 鞋子,然后将衬衫放在上面。有什么帮助吗?我怎样才能做到这一点 ?增强现实套件?想象 ?或 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 …
我正在尝试使用自定义模型对图像进行分类,如下所示。输入图像的分辨率正确(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) 我正在使用此代码从图像中提取文本,代码第一次运行完美,之后它开始给出此错误消息[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)