Какой диапазон углов мы можем определить с помощью VNDetectHorizonRequest? - PullRequest
0 голосов
/ 27 октября 2018

Мы обнаружили угол горизонта изображения между -10 градусами и 10 градусами в соответствии с 0 опорным углом для потокового видео со следующим кодом.

Кроме того, когда обнаруженный угол изображения был равен нулю или когда он находится за пределами этого диапазона, результат не возвращается. Таким образом, невозможно определить, был ли он нулевым или находится вне этого диапазона.

И этот диапазон кажется очень узким. Что-то не так с нашим кодом или это оно?

Есть другая проблема. Найденный здесь угол исходит из анализа изображения или он также связан с углом физического устройства?

       func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection){

         pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!

         DispatchQueue.main.async() {
           self.lookForHorizon(imageBuffer: pixelBuffer)
         }

        // Other things

}




     var requestForHorizon = [VNImageBasedRequest]()
     lazy var horizonRequest: VNDetectHorizonRequest = {return VNDetectHorizonRequest(completionHandler: self.detectHorizonHandler) }()


  func lookForHorizon(imageBuffer: CVImageBuffer){

    frameUIImage =  takeAFrameImage(imageBuffer: imageBuffer)
    let cgUIImage = frameUIImage.cgImage!

    DispatchQueue.main.async() {

        var requestOption:[VNImageOption : Any] = [:]  
        if let camData = CMGetAttachment(cgUIImage,
                                         key: kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix,
                                         attachmentModeOut: nil) {
            requestOption = [.cameraIntrinsics:camData]
        }

        let imageRequestHandler = VNImageRequestHandler(
            cgImage: cgUIImage,
            orientation: CGImagePropertyOrientation(rawValue: 6)!,
            options: requestOption)

        do { 
            try imageRequestHandler.perform(self.requestForHorizon)
        } catch {
            print("error with imageRequestHandler.perform \(error)")
        }  
    }
}


func detectHorizonHandler(request: VNRequest, error: Error?) {

    guard let observations = request.results else {
        print("no result")
        return
    }

    let result = observations.map({$0 as? VNHorizonObservation})

    if result.count > 0 {

        let horizonAngle = CGFloat(result[0]?.angle ?? 0)     
        print("angle = \(horizonAngle)")

    } else {
         print("no angle info")
    }  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...