4

アプリで安定した画像をキャプチャしたいのですが、それを達成するために必要な構成が見つかりません。

これは私のコードです:

let frontCamera = cameraWithPosition(AVCaptureDevicePosition.Front)

let captureSession = AVCaptureSession()

if captureSession.canSetSessionPreset(AVCaptureSessionPresetPhoto) {
    captureSession.sessionPreset =  AVCaptureSessionPresetPhoto 
    print("Session preset has been set ")
}
else {
    print("Session preset couldn't be set ")
}

var error: NSError?
var input: AVCaptureDeviceInput!
do {
    input = try AVCaptureDeviceInput(device: frontCamera)
} catch let error1 as NSError {
    error = error1
    input = nil
}

if error == nil && captureSession!.canAddInput(input) {
    captureSession.addInput(input)
    let stillImageOutput = AVCaptureStillImageOutput()
    stillImageOutput.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
    if stillImageOutput.stillImageStabilizationSupported {
        stillImageOutput.automaticallyEnablesStillImageStabilizationWhenAvailable = true
        print("Stabilization supported ")
    }
    else {
        print("Stabilization is not supported ")
    }
}

したがって、セッション プリセットは正しく設定されていますが、画像安定化はサポートされていません。

画像安定化をサポートするにはどうすればよいですか?


**リズミック フィストマンの反応後の 2 回目の試行 : **

背面カメラに切り替えました。設定する前に出力を captureSession に追加しましたが、まだ画像が安定していません。

    let backCamera = cameraWithPosition(AVCaptureDevicePosition.Back)

    let captureSession = AVCaptureSession()

    if captureSession.canSetSessionPreset(AVCaptureSessionPresetPhoto) {
        captureSession.sessionPreset =  AVCaptureSessionPresetPhoto 
        print("Session preset has been set ")
    }
    else {
        print("Session preset couldn't be set ")
    }


    var error: NSError?
    var input: AVCaptureDeviceInput!
    do {
        input = try AVCaptureDeviceInput(device: backCamera)
    } catch let error1 as NSError {
        error = error1
        input = nil
    }

    if error == nil && captureSession.canAddInput(input) {
        captureSession.addInput(input)
        let stillImageOutput = AVCaptureStillImageOutput()
        stillImageOutput.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]


        if captureSession.canAddOutput(stillImageOutput) {
            captureSession.addOutput(stillImageOutput)

            if stillImageOutput.stillImageStabilizationSupported == true {
                stillImageOutput.automaticallyEnablesStillImageStabilizationWhenAvailable = true
                print("Stabilization supported ")
            }
            else {
                print("Stabilization is not supported ")
            }

            if stillImageOutput.stillImageStabilizationActive == true {
                print("Stabilization is active ")
            }
            else {
                print("Stabilization is not active ")
            }
        }
    }

結果:
安定化はサポートされていません
安定化はアクティブではありません

4

1 に答える 1

2

AVCaptureStillImageOutputまず、 に yourを追加するのを忘れていますAVCaptureSession。その機能を照会する前に、それを行う必要があります!

captureSession.addOutput(stillImageOutput)

第二に、フロントカメラではデジタル手ぶれ補正も光学手ぶれ補正もサポートされていません

3 番目に、サポートされているプラ​​ットフォーム (デジタルは 5S 以上で利用できるようです) の背面カメラでは、AVCaptureStillImageOutput automaticallyEnablesStillImageStabilizationWhenAvailableデフォルトで がに設定されYESているため、背面カメラに切り替えると、 何らかの形式の画像安定化を既に使用していることになります。

注: 光学式手ぶれ補正は、6+ および 6S+ でのみ利用できます(ただし、リンクされたテクニカルノートは 6S モデル用にまだ更新されていません)。

于 2015-10-07T23:53:36.633 に答える