2016-09-18 28 views
5

Używam AVFoundation do rozpoznawania tekstu i wykonywania OCR. Jak dodać autofokus? Nie chcę mieć żółtego kwadratu, gdy użytkownik dotknie ekranu, chcę tylko, żeby automatycznie skupił się na obiekcie, na przykład na karcie kredytowej.Jak dodać autofokus do AVCaptureSession? SWIFT

Oto mój kod sesji.

func setupSession() { 
    session = AVCaptureSession() 
    session.sessionPreset = AVCaptureSessionPresetHigh 

    let camera = AVCaptureDevice 
    .defaultDeviceWithMediaType(AVMediaTypeVideo) 

    do { input = try AVCaptureDeviceInput(device: camera) } catch { return } 

    output = AVCaptureStillImageOutput() 
    output.outputSettings = [ AVVideoCodecKey: AVVideoCodecJPEG ] 

    guard session.canAddInput(input) 
    && session.canAddOutput(output) else { return } 

    session.addInput(input) 
    session.addOutput(output) 

    previewLayer = AVCaptureVideoPreviewLayer(session: session) 

    previewLayer!.videoGravity = AVLayerVideoGravityResizeAspect 
    previewLayer!.connection?.videoOrientation = .Portrait 

    view.layer.addSublayer(previewLayer!) 

    session.startRunning() 

} 

Odpowiedz

7

Na moich 6S domyślny tryb ustawiania ostrości aparatu .ContinuousAutoFocus, który nieustannie skupia się na cokolwiek jest podejmowanie najbardziej ostrości aparatu wzroku. Wygląda na to, że tego chcesz.

Można sprawdzić, czy aparat obsługuje automatycznego ustawiania ostrości tak:

camera.isFocusModeSupported(.ContinuousAutoFocus) 

i jeśli nie jest już ustawiony, ustaw ją tak:

try! camera.lockForConfiguration() 
camera.focusMode = .ContinuousAutoFocus 
camera.unlockForConfiguration() 
3

Oto co zrobiłem:

//get instance of phone camera 
let captureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) 
//try to enable auto focus 
if(captureDevice!.isFocusModeSupported(.continuousAutoFocus)) { 
    try! captureDevice!.lockForConfiguration() 
    captureDevice!.focusMode = .continuousAutoFocus 
    captureDevice!.unlockForConfiguration() 
}