AppleにはiOS 11の新機能があり、ビジョンフレームワークを使用してモデルなしでオブジェクト検出を行うことができます。私はこれらの新しいAPIを試してみましたが、がVNDetectRectanglesRequestの結果が良くないことが分かりました。 APIを正しく使用していますか?ここでiOS 11では、ビジョンフレームワークVNDetectRectanglesRequestを使用してオブジェクトの検出を正確に行うことはできませんか?
は、いくつかの良いケースです:
そして、いくつかの悪い場合:ここで
私のコードです:
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
guard let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
// create the request
let request2 = VNDetectRectanglesRequest { (request, error) in
self.VNDetectRectanglesRequestCompletionBlock(request: request, error: error)
}
do {
request2.minimumConfidence = 0.7
try self.visionSequenceHandler.perform([request2], on: pixelBuffer)
} catch {
print("Throws: \(error)")
}
}
func VNDetectRectanglesRequestCompletionBlock(request: VNRequest, error: Error?) {
if let array = request.results {
if array.count > 0 {
let ob = array.first as? VNRectangleObservation
print("count: \(array.count)")
print("fps: \(self.measureFPS())")
DispatchQueue.main.async {
let boxRect = ob!.boundingBox
let transRect = self.transformRect(fromRect: boxRect, toViewRect: self.cameraLayer.frame)
var transformedRect = ob!.boundingBox
//transformedRect.origin.y = 1 - transformedRect.origin.y
let convertedRect = self.cameraLayer.layerRectConverted(fromMetadataOutputRect: transformedRect)
self.highlightView?.frame = convertedRect
}
}
}
}
あなたが求めていることは明確ではありません。これがどのようなケースで成功し、失敗するのか尋ねていますか?それは記述が難しいでしょう.Appleの実装はブラックボックスなので、これを決めるためにさまざまなテクニックを使用することができます。たとえば、ボトルの例ではクリーンな長方形のコーナーや直線のエッジがないため、コーナーやラインの検出を使用している場合は、そのケースをうまく処理できない可能性があります。 –
質問を編集します。私は正確にAPIを正しく使用する方法がわからない、または出力boundingBoxだけでは十分ではない –
corelmを使用して小さなyoloモデルをロードすると、これまでのビジョンフレームワークを使用するよりもオブジェクト検出が向上する –