Apple a de nouvelles fonctionnalités dans iOS 11 qui vous permet d'utiliser le cadre de vision pour la détection d'objets sans modèles. J'essaye ces nouvelles API mais trouve le résultat de VNDetectRectanglesRequest n'est pas bon. Est-ce que j'utilise les API correctement?iOS 11 en utilisant le cadre de vision VNDetectRectanglesRequest de faire la détection d'objet pas précisément?
Voici quelques bonnes cas:
Et certains mauvais cas:
Voici mon code:
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
}
}
}
}
Ce que vous demandez n'est pas clair. Demandez-vous sur quels cas cela va réussir et échouer sous? Cela va être difficile à décrire, car la mise en œuvre d'Apple est une boîte noire et ils pourraient utiliser un certain nombre de techniques différentes pour le déterminer. Par exemple, l'exemple de votre bouteille n'a pas de coins rectangulaires propres ou de bords droits, donc s'ils utilisaient une détection de coin ou de ligne, ils ne pourraient pas bien gérer cette boîte. –
Je modifie la question. Je ne sais pas exactement comment utiliser les API correctement ou la sortie boundingBox n'est juste pas assez bonne maintenant –
Utiliser corelm pour charger le modèle tiny-yolo obtiendra une meilleure détection d'objet que d'utiliser le framework de vision jusqu'à présent –