2017-09-26 3 views
2

enter image description hereEn utilisant CoreML avec React natif

Je reçois l'erreur

étiquettes Argument '(l'image :)' ne correspond à aucun surcharge disponible

J'ai suivi ce tutoriel here et La documentation d'apple, mais quand j'ai essayé de faire le lien entre le framework et une image de React Native, j'ai commencé à avoir cette erreur. Le pont entre Swift et Reac Native fonctionne, seulement quand je commence à essayer coreML ai-je des erreurs?

Je pense que cela a quelque chose à voir avec la nouvelle syntaxe swift mais je ne suis pas sûr de savoir comment y remédier, j'ai aussi ont pas vu quelqu'un en utilisant CoreML avec React natif encore

Voici ma pleine fonction:

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

} 
} 

Répondre

1

vous devez initialiser modelInput (ce qui est une classe autogenerate lorsque vous ajoutez et modèle de données) de classe, puis envoyez modelInput à la prédiction.

Ce qui suit est extrait de code qui peut aider:

 // 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) 

vous pouvez utiliser this pour référence.

+0

Je suis confus à ce que R_D_Spend, Administration et Marketing_Spend sont? J'ai essayé de faire ceci mais j'ai la même erreur juste sur la ligne d'init. – codegeek511

+0

R_D_Spend, Administration, Marketing_Spend sont les paramètres de mon modèle ML. Ouvrez votre MLModel dans Xcode. il montrera le paramètre d'entrée-sortie pour votre ml-modèle que vous devez utiliser à la place. – user3378829

+0

Hmmm le paramètre est 'image' – codegeek511