2017-06-24 11 views
0

J'utilise le modèle CoreML this pour tester la reconnaissance d'esquisse, mais il ne renvoie aucun résultat. Voici mon code:Modèle CoreML ne renvoyant pas de résultats

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") 
    } 

} 

Et la méthode predict() est appelée à viewDidLoad(). Lorsque results() est imprimé en displayPredictions(), il renvoie le tableau vide []. Je asked the developer of the model quel format d'image le modèle accepte et il a dit que c'est un 128x128 niveaux de gris, cela pourrait être le problème et si oui, comment puis-je convertir le fichier test.png en niveaux de gris 128x128. Si vous avez d'autres idées sur le problème, éventuellement un problème avec la conversion du modèle en utilisant coremltools ou toute autre chose, s'il vous plaît faites le moi savoir. Merci pour toute aide.

+0

Est-ce un modèle de classification? Qu'est-ce que Core ML dit que la sortie attendue est (lorsque vous ouvrez le fichier .mlmodel dans Xcode)? Notez que Vision ne semble actuellement pas fonctionner avec les modèles qui ne sont pas des classificateurs. –

+0

Oui, je suis à peu près certain qu'il s'agit d'un classificateur, le modèle attend un 'Image ' comme entrée et sort un 'MultiArray '. Donc, je devine qu'il sort l'une des étiquettes dans le fichier [map.txt] (https://github.com/keplerlab/neuralCreativityServer/blob/master/server/caffeModel/map.txt). Je pense que cela a quelque chose à voir avec la conversion/sortie elle-même et pas l'entrée car même quand j'essaie avec certaines des données que le modèle a été formé, il sort toujours le tableau vide. –

+0

Si la sortie est un 'MultiArray', ce n'est pas un classificateur (dans Core ML). Un classificateur dans Core ML renvoie un dictionnaire de 'String: Double'. Lorsque vous avez converti le modèle, avez-vous spécifié 'class_labels = 'map.txt''? Ce –

Répondre

-1

J'ai eu le même problème dans le passé. J'ai résolu cela en redimensionnant mon fichier png à une échelle de gris 128x128 avec photoshop. J'ai trouvé cela plus facile que de le coder. Vous pouvez corriger cela avec du code, peut-être que quelqu'un sait comment? Bonne chance;)

+0

Merci de vous y essayer. –

+0

Cela n'a pas résolu le problème. Je pense que le problème est ailleurs. –