【问题标题】:Using CoreML with React Native将 CoreML 与 React Native 结合使用
【发布时间】:2018-03-08 07:44:26
【问题描述】:

我收到了错误

参数标签 '(image:)' 不匹配任何可用的重载

我遵循了本教程here 和苹果的文档,但是当我尝试将框架桥接到 React Native 的图像之外时,我开始收到此错误。 Swift 和 Reac Native 之间的桥梁正在发挥作用,只有当我开始尝试使用 coreML 时才会出现错误

我认为这与新的 swift 语法有关,但我不知道如何修复它,我还没有看到有人将 CoreML 与 React Native 一起使用

这是我的全部功能:

import Foundation
import CoreML

@objc(Printer)
class Printer: NSObject {

  @objc func imageRec(_ image:CGImage) -> CVPixelBuffer? {
let model = Inceptionv3();

  UIGraphicsBeginImageContextWithOptions(CGSize(width: 299, height: 299), true, 1.0)
//image.draw(in: CGRect(x: 0, y: 0, width: 299, height: 299))
let newImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()

let attrs = [kCVPixelBufferCGImageCompatibilityKey: kCFBooleanTrue, kCVPixelBufferCGBitmapContextCompatibilityKey: kCFBooleanTrue] as CFDictionary
var pixelBuffer : CVPixelBuffer?
let status = CVPixelBufferCreate(kCFAllocatorDefault, Int(newImage.size.width), Int(newImage.size.height), kCVPixelFormatType_32ARGB, attrs, &pixelBuffer)
guard (status == kCVReturnSuccess) else {
  return nil
}

CVPixelBufferLockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0))
let pixelData = CVPixelBufferGetBaseAddress(pixelBuffer!)

let rgbColorSpace = CGColorSpaceCreateDeviceRGB()
let context = CGContext(data: pixelData, width: Int(newImage.size.width), height: Int(newImage.size.height), bitsPerComponent: 8, bytesPerRow: CVPixelBufferGetBytesPerRow(pixelBuffer!), space: rgbColorSpace, bitmapInfo: CGImageAlphaInfo.noneSkipFirst.rawValue)

context?.translateBy(x: 0, y: newImage.size.height)
context?.scaleBy(x: 1.0, y: -1.0)

UIGraphicsPushContext(context!)
newImage.draw(in: CGRect(x: 0, y: 0, width: newImage.size.width, height: newImage.size.height))
UIGraphicsPopContext()
CVPixelBufferUnlockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0))

guard let prediction = try? model.prediction(image: newImage) else {
}

}
}

【问题讨论】:

    标签: swift react-native coreml


    【解决方案1】:

    你必须初始化modelInput(这是一个当你添加和数据模型时自动生成的类)类,然后将modelInput发送到预测。

    以下是可能有帮助的代码 sn-p:

            // create indupt data model
            // in your case this must be taking image as argument
            let input = ProfitPredictorInput.init(R_D_Spend: 
              Double(rndInv)!, Administration: Double(adminInv)!, 
               Marketing_Spend: Double(marketingInv)!)
    
            // give input data model to your mlmodel
            let outData = try mlModel?.prediction(input: input)
    

    您可以参考this

    【讨论】:

    • 我对什么是 R_D_Spend、Administration 和 Marketing_Spend 感到困惑?我试过这样做,但我在 init 行得到了同样的错误。
    • R_D_Spend、Administration、Marketing_Spend 是我的 ML 模型的参数。在 Xcode 中打开您的 MLModel。它将显示您的 ml 模型的输入输出参数,您必须使用它。
    • 嗯参数是'image'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 2022-12-29
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    相关资源
    最近更新 更多