2017-09-26 83 views
2

enter image description here使用CoreML与之反应原住民

我收到错误

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

我跟着这个教程here和苹果的文档,但是当我试图桥接框架,除了从React Native的图像我开始得到这个错误。 Swift和Reac Native之间的桥梁工作,只有当我开始尝试使用coreML时,我得到的错误

我认为它与新的swift语法有关,但我不知道如何解决它,我也还没有看到使用CoreML任何与之反应原住民尚未

这里是我的全部功能:

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 { 
} 

} 
} 

回答

1

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

以下是代码片段,可以帮助:

 // 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参考。

+0

我对R_D_Spend,Administration和Marketing_Spend是什么感到困惑?我试过这样做,但是我在init行上得到了同样的错误。 – codegeek511

+0

R_D_Spend,Administration,Marketing_Spend是我的ML模型的参数。在Xcode中打开你的MLModel。它会显示你的ml模型的输入输出参数,你必须使用它。 – user3378829

+0

嗯参数是'图像' – codegeek511