2017-06-24 3 views
0

Ich verwende this CoreML-Modell, um Skizzenerkennung zu testen, aber es gibt keine Ergebnisse zurück. Hier ist mein Code:CoreML-Modell gibt keine Ergebnisse zurück

func predict(){ 
    guard let image = UIImage(named: "test.png") else{ 
     print("Image not found") 
     return 
    } 
    do{ 
     let model = try VNCoreMLModel(for: sketch2().model) 
     let request = VNCoreMLRequest(model: model, completionHandler: displayPredictions) 
     let handler = VNImageRequestHandler(cgImage: (image.cgImage!)) 
     try handler.perform([request]) 
    }catch{ 

    } 
} 

func displayPredictions(request: VNRequest, error: Error?) { 

    if let results = request.results as? [VNClassificationObservation]{ 
     print(results) 
    }else{ 
     print("some error") 
    } 

} 

Und die predict() Methode wird in viewDidLoad() genannt. Wenn results() in displayPredictions() gedruckt wird, gibt es das leere Array [] zurück. I asked the developer of the model Welches Format des Bildes das Modell akzeptiert und er sagte, dass es eine 128x128 Graustufen ist, könnte dies das Problem sein und wenn ja, wie würde ich die test.png Datei in eine 128x128 Graustufen konvertieren. Wenn Sie weitere Ideen zu dem Problem haben, möglicherweise ein Problem mit der Konvertierung des Modells mit coremltools oder irgendetwas anderem, lassen Sie es mich bitte wissen. Danke für jede Hilfe.

+0

Ist es ein Klassifizierungsmodell? Was sagt Core ML die erwartete Ausgabe ist (wenn Sie die .mlmodel-Datei in Xcode öffnen)? Beachten Sie, dass Vision derzeit anscheinend nicht mit Modellen arbeitet, die _nicht_ Klassifikatoren sind. –

+0

Ja, ich bin ziemlich sicher, dass es ein Klassifikator ist, das Modell erwartet ein 'Image ' als Eingabe und gibt ein 'MultiArray ' aus. Ich vermute also, dass es eines der Labels in der [map.txt-Datei] (https://github.com/keplerlab/neuralCreativityServer/blob/master/server/caffeModel/map.txt) ausgibt. Ich denke, es hat etwas mit der Umwandlung/Ausgabe selbst und nicht mit der Eingabe zu tun, selbst wenn ich mit einigen der Daten experimentiere, auf denen das Modell trainiert wurde, gibt es immer noch das leere Array aus. –

+0

Wenn die Ausgabe ein 'MultiArray' ist, dann ist es kein Klassifizierer (in Core ML). Ein Klassifikator in Core ML gibt ein Dictionary von 'String: Double' zurück. Haben Sie bei der Konvertierung des Modells "class_labels = 'map.txt'" angegeben? –

Antwort

-1

Ich hatte das gleiche Problem in der Vergangenheit. Ich löste das, indem ich meine png-Datei auf eine 128x128-Graustufe mit Photoshop herunterskalierte. Ich fand das einfacher, als es zu programmieren. Sie können das mit Code beheben, vielleicht weiß jemand wie? Viel Glück;)

+0

Danke wird es versuchen. –

+0

Das behebt das Problem nicht. Ich denke, das Problem ist woanders. –

Verwandte Themen