2017-06-22 34 views
4

VNClassificationObservationからの取得に問題があります。VNClassificationObservationからオブジェクトの矩形/座標を取得する方法

オブジェクトを認識してポップアップにオブジェクト名を表示する私の目標IDは、名前を取得できますが、オブジェクトの座標またはフレームを取得できません。

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

それから私が更新

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

を扱う:

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

答えて

1

分類は、オブジェクト座標またはフレームを返さないためです。ここ

はコードです。分類器は、カテゴリのリストにわたって確率分布を与えるだけである。

ここではどのモデルを使用していますか?

+0

私はInceptionv3()モデルを使用していますが、座標を取得できません。 – Svitlana

+1

これは、Inception-v3では座標が与えられず、クラス名の辞書とこれらのクラスの確率しか与えられないからです。 –

+0

ありがとう、他のモデルを検索します – Svitlana

4

純粋なクラシファイアモデルは、「この写真は何ですか?」としか答えられず、画像内のオブジェクトを検出して配置しません。 free models on the Apple developer site(Inception v3を含む)はすべてこの種のものです。

Visionがこのようなモデルで動作する場合、VisionはMLModelファイルで宣言された出力に基づいてモデルを分類子として識別し、出力としてVNClassificationObservationオブジェクトを返します。

オブジェクトを特定して特定するモデルを見つけたり作成したりしても、それをVisionで使用することはできます。そのモデルをCore MLフォーマットに変換すると、MLModelファイルには複数の出力が記述されます。 Visionが複数の出力を持つモデルで動作する場合は、VNCoreMLFeatureValueObservationオブジェクトの配列を返します。これはモデルの出力ごとに1つです。

モデルが出力を宣言することによって、どの特徴値が何を表すかが決まります。分類とバウンディングボックスを報告するモデルは、文字列と4つの倍精度文字、または文字列とマルチ配列などを出力できます。

+0

VNCoreMLFeatureValueObservationの結果を提供する特定のモデルを提案できますか? –

関連する問題