Je suis coincé avec un problème. Comment puis-je définir le point lumineux sur l'image binarisée. J'utilise ios11 et Vision maintenant.iOS Vision détecter la lumière sur l'image binarisée
J'utilise le filtre de binarisation CIColorControls
(également essayé de combiner cela avec CIColorInvert
). Pour la détection de la lumière, j'utilise VNImageRequestHandler
avec VNDetectRectanglesRequest
. Dans VNDetectRectanglesRequest
Je vérifie pour VNDetectedObjectObservation
Mais ne peut pas atteindre la détection de trame 100% (parfois app ne peut pas reconnaître le point de lumière sur les cadres). Qu'est ce que je fais mal? Apprécierait toute aide
Voici mon code
lazy var rectanglesRequest: VNDetectRectanglesRequest = {
return VNDetectRectanglesRequest(completionHandler: self.handleRectangles)
}()
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
connection.videoOrientation = AVCaptureVideoOrientation.portrait
guard let uiImage = imageFromSampleBuffer(sampleBuffer: sampleBuffer) else { return }
let correctedImage = uiImage
.applyingFilter("CIColorControls", withInputParameters: [
kCIInputSaturationKey: 0,
kCIInputContrastKey: 4.5,
kCIInputBrightnessKey: -1.54
])
//.applyingFilter("CIColorInvert", withInputParameters: nil)
self.searchLightSpot(ciImage: correctedImage)
DispatchQueue.main.async { [unowned self] in //unowned
self.frameImageView.image = UIImage(ciImage: correctedImage)
}
}
func searchLightSpot(ciImage: CIImage) {
var requestOptions: [VNImageOption: Any] = [:]
let handler = VNImageRequestHandler(ciImage: ciImage, options: requestOptions)
DispatchQueue.global(qos: .userInteractive).async {
do {
try handler.perform([self.rectanglesRequest])
} catch {
print(error)
}
}
}
func handleRectangles(request: VNRequest, error: Error?) {
guard let observations = request.results as? [VNDetectedObjectObservation]
else {
print("unexpected result type from VNDetectedObjectObservation")
return
}
guard let detectedObject = observations.first else {
print("not detected object")
return
}
print("detected object: ", detectedObject)
}