2017-10-20 21 views
0

J'utilise CoreML SqueezeNet Model pour détecter le papier ou les rectangles d'une image.L'application se bloque lorsque request.results du modèle CoreML sqeezeNet est casté en tant que [VNRectangleObservation]

J'ai créé le modèle et la demande selon la documentation d'Apple.

guard let model = try? VNCoreMLModel(for: squeezeNetModel.model)else {fatalError()} 
let request = VNCoreMLRequest(model: model) { (request, error) in 
    guard let rectangles = request.results as? [VNClassificationObservation] else{ fatalError()} 
} 

Le code ci-dessus a bien fonctionné. Mais je veux détecter le papier et donc utilisé [VNRectangleObservation] au lieu de [VNClassificationObservation]. Cela provoque le blocage de mon application. Je ne trouve pas de solution à ce problème n'importe où. La raison principale que je veux utiliser [VNRecatangleObservation] est de capturer l'image détectée et de dessiner une superposition de couleur rouge sur l'image détectée.

Répondre

1

La raison pour laquelle votre application se bloque est que request.results est un tableau de VNClassificationObservation objets. Vous ne pouvez pas convertir ceci en un tableau d'objets VNRectangleObservation, puisque c'est quelque chose de complètement différent. C'est comme acheter une bouteille de lait au magasin et essayer d'en faire un coca en mettant une étiquette de Coca-Cola sur la bouteille. Ça ne marche pas.

Si vous voulez détecter dans l'image les objets se produisent, vous devrez utiliser un modèle différent, comme squeezeDet (avec un D) ou YOLO.

+0

Selon le modèle, il retourne [Any] comme résultat, donc je pensais pouvoir le lancer. Merci d'avoir répondu. – cgeek