Обнаружение автофокусировки камеры

Я работаю над видео приложением. Я хочу сбросить видеокадры, когда камера автофокусируется. Во время автофокусировки захваченное изображение становится размытым, и обработка изображения для этого кадра становится плохой, но после завершения автофокусировки обработка изображения становится превосходной. Любое тело дает мне решение?


person Community    schedule 13.07.2014    source источник
comment
developer.apple.com/library/ios/documentation/AVFoundation/   -  person Albert Renshaw    schedule 13.07.2014


Ответы (4)


adjustingFocus имущество.
Указывает, настраивает ли устройство в данный момент настройки фокусировки. (только для чтения)

*Примечания. Вы можете наблюдать за изменениями значения этого свойства, используя наблюдение за значением ключа.

iOS 4.0 и выше


https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVCaptureDevice_Class/Reference/Reference.html#//apple_ref/occ/instp/AVCaptureDevice/adjustingFocus

person Albert Renshaw    schedule 13.07.2014

Ниже приведен пример кода в Swift 3.x.

Сначала необходимо добавить наблюдателя к выбранному устройству захвата при инициализации камеры.

captureDevice.addObserver(self, forKeyPath: "adjustingFocus", options: [.new], context: nil)

Затем методObservValue переопределяется. Обращаясь к необязательному значению, возвращаемому методом, можно идентифицировать кадры автофокусировки.

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {

    guard let key = keyPath, let changes = change else {
        return
    }

    if key == "adjustingFocus" {

        let changedValue = changes[.newKey]
        if (changedValue! as! Bool){ 
            // camera is auto-focussing
        }else{         
            // camera is not auto-focussing
        }
    }
}
person AnuradhaH    schedule 19.10.2017

Пример на Swift 4+

class ViewController: UIViewController, AVCapturePhotoCaptureDelegate {
    //@objc var captureDevice: AVCaptureDevice?

        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            self.addObservers()
        }

       func addObservers() {
             self.addObserver(self, forKeyPath: "captureDevice.adjustingFocus", options: .new, context: nil)

       }

       func removeObservers() {
          self.removeObserver(self, forKeyPath: "captureDevice.adjustingFocus")
       }


      override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {

         if keyPath == "captureDevice.adjustingFocus" {
             print("============== adjustingFocus: \(self.captureDevice?.lensPosition)") 
        }

    } //End of class
person Tuan Huynh    schedule 31.07.2018

Наблюдение за adjustingFocus не работает для меня. Это всегда нет. И я нахожу это.

Обратите внимание, что когда используется традиционная автофокусировка с определением контраста, свойство AVCaptureDevice AdjustingFocus переключается на YES, когда выполняется фокусировка, и переключается обратно на NO, когда это делается. Когда используется автофокусировка с определением фазы, для свойства AdjustingFocus не устанавливается значение YES, поскольку метод определения фазы имеет тенденцию фокусироваться чаще, но в небольших, иногда незаметных количествах. Вы можете просмотреть свойство LensPosition AVCaptureDevice, чтобы увидеть движения объектива, которые управляются автофокусировкой с определением фазы.

от Apple

Я еще не пробовал, я попробую и обновлю позже.

Редактировать. Я пробовал это и подтверждаю, что это правильно.

person myron    schedule 11.05.2018