mawnch
mawnch

Reputation: 403

How to add autofocus to AVCaptureSession? SWIFT

I'm using AVFoundation to recognize text and perform OCR. How do I add autofocus? I don't want to have the yellow square thing when user taps the screen, I just want it to automatically focus on the object, a credit card for example.

Here is my session code.

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()

}

Upvotes: 16

Views: 15147

Answers (2)

Droid Chris
Droid Chris

Reputation: 3783

Here is what I did:

 //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()
 }

Upvotes: 16

Gordon Childs
Gordon Childs

Reputation: 36072

On my 6S the default camera focus mode is .ContinuousAutoFocus, which continuously focuses on whatever is taking up most of the camera's field of vision. Sounds like that's what you want.

You can check if your camera supports auto focus like so:

camera.isFocusModeSupported(.ContinuousAutoFocus)

and if it's not already set, set it like so:

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

Upvotes: 25

Related Questions