Ich steckte mit einem Problem. Wie kann ich den Lichtfleck auf dem binarisierten Bild definieren? Ich benutze jetzt ios11 und Vision.iOS Vision erkennen Licht auf binarisierten Bild
Ich benutze Binarisierungsfilter CIColorControls
(auch versucht, dies mit CIColorInvert
zu kombinieren).
Für die Lichterkennung verwende ich VNImageRequestHandler
mit VNDetectRectanglesRequest
. In VNDetectRectanglesRequest
Ich überprüfe für VNDetectedObjectObservation
Aber kann nicht die 100% -Rahmenerkennung (manchmal App kann nicht erkennen, Lichtfleck auf Rahmen). Was mache ich falsch? Jede mögliche Hilfe schätzt
Hier ist mein 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)
}