2017-06-22 3 views
4

bekommen ein Problem mit bekommen von VNClassificationObservation.Wie man Objekt rect/Koordinaten von VNClassificationObservation

Meine Ziel-ID, um das Objekt zu erkennen und Popup mit dem Objektnamen anzuzeigen, ich bin in der Lage, Name zu bekommen, aber ich kann nicht Objektkoordinaten oder Rahmen erhalten.

Hier Code:

let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: requestOptions) 
do { 
    try handler.perform([classificationRequest, detectFaceRequest]) 
} catch { 
    print(error) 
} 

Dann ich mit

func handleClassification(request: VNRequest, error: Error?) { 
     guard let observations = request.results as? [VNClassificationObservation] else { 
      fatalError("unexpected result type from VNCoreMLRequest") 
     } 

    // Filter observation 
    let filteredOservations = observations[0...10].filter({ $0.confidence > 0.1 }) 

    // Update UI 
    DispatchQueue.main.async { [weak self] in 

    for observation in filteredOservations { 
      print("observation: ",observation.identifier) 
      //HERE: I need to display popup with observation name 
    } 
    } 
} 

AKTUALISIERT:

lazy var classificationRequest: VNCoreMLRequest = { 

    // Load the ML model through its generated class and create a Vision request for it. 
    do { 
     let model = try VNCoreMLModel(for: Inceptionv3().model) 
     let request = VNCoreMLRequest(model: model, completionHandler: self.handleClassification) 
     request.imageCropAndScaleOption = VNImageCropAndScaleOptionCenterCrop 
     return request 
    } catch { 
     fatalError("can't load Vision ML model: \(error)") 
    } 
}() 

Antwort

1

Das ist, weil Klassifizierer-Koordinaten oder keine Frames Objekte zurück. Ein Klassifikator gibt nur eine Wahrscheinlichkeitsverteilung über eine Liste von Kategorien.

Welches Modell verwenden Sie hier?

+0

Ich benutze Inceptionv3() .model und es sieht so aus, dass ich keine Koordinaten bekommen kann. – Svitlana

+1

Das liegt daran, dass Inception-v3 keine Koordinaten liefert, sondern nur ein Wörterbuch mit Klassennamen und die Wahrscheinlichkeiten für diese Klassen. –

+0

Ok vielen Dank, suchen Sie nach einem anderen Modell – Svitlana

4

Ein reines Klassifikatormodell kann nur "was ist das ein Bild von?" Beantworten, Objekte im Bild nicht erkennen und lokalisieren. Alle free models on the Apple developer site (einschließlich Inception v3) sind von dieser Art.

Wenn Vision mit einem solchen Modell arbeitet, identifiziert es das Modell als Klassifizierer basierend auf den in der MLModel-Datei deklarierten Ausgaben und gibt VNClassificationObservation Objekte als Ausgabe zurück.

Wenn Sie ein Modell finden oder erstellen, das darauf trainiert ist, Objekte zu identifizieren und zu lokalisieren, können Sie es weiterhin mit Vision verwenden. Wenn Sie dieses Modell in das Core ML-Format konvertieren, beschreibt die MLModel-Datei mehrere Ausgaben. Wenn Vision mit einem Modell arbeitet, das über mehrere Ausgänge verfügt, wird ein Array mit VNCoreMLFeatureValueObservation Objekten zurückgegeben - eines für jeden Ausgang des Modells.

Wie das Modell seine Ausgaben deklariert, würde bestimmen, welche Merkmalswerte was darstellen. Ein Modell, das eine Klassifizierung und eine Bounding Box meldet, könnte eine Zeichenkette und vier Doubles ausgeben, oder eine Zeichenkette und ein Multiarray, usw.

+0

Können Sie ein bestimmtes Modell vorschlagen, das VNCoreMLFeatureValueObservation Ergebnisse liefert? –

Verwandte Themen