[swift] Swift에서 카메라로 모자이크 처리하기

iOS 앱을 개발하는 과정에서 카메라 기능을 활용하여 실시간으로 모자이크를 처리하는 기능을 추가해야 하는 경우가 있습니다. Swift에서는 AVFoundation 프레임워크를 사용하여 카메라를 제어하고 비디오 프레임을 처리할 수 있습니다. 이 기능을 사용하여 카메라로부터 입력된 비디오 프레임을 가져와 모자이크를 처리하는 방법을 알아보겠습니다.

단계 1: 카메라 접근 권한 획득

우선 카메라 접근 권한을 얻기 위해 Info.plist 파일에 NSCameraUsageDescription 키를 추가해야 합니다. 이 키에는 카메라 권한을 요청하는 메시지를 입력해야 합니다.

<key>NSCameraUsageDescription</key>
<string>카메라를 사용하여 모자이크를 처리하기 위해 카메라 접근이 필요합니다.</string>

단계 2: 카메라 및 비디오 입력 세션 설정

AVFoundation을 사용하여 카메라로부터 비디오 입력을 가져오기 위해 AVCaptureSession을 설정해야 합니다.

let captureSession = AVCaptureSession()

guard let videoDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) else { return }

let videoInput = try AVCaptureDeviceInput(device: videoDevice)

if captureSession.canAddInput(videoInput) {
    captureSession.addInput(videoInput)
}

단계 3: 비디오 프레임 처리

AVCaptureVideoDataOutput을 사용하여 카메라로부터 가져온 비디오 프레임을 처리할 수 있습니다.

let videoOutput = AVCaptureVideoDataOutput()
videoOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
if captureSession.canAddOutput(videoOutput) {
    captureSession.addOutput(videoOutput)
}
captureSession.startRunning()

단계 4: 모자이크 처리

captureOutput(_:didOutput:from:) 메서드를 사용하여 가져온 비디오 프레임에 모자이크를 처리하는 로직을 추가합니다.

extension YourViewController: AVCaptureVideoDataOutputSampleBufferDelegate {
    func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
        guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
        // 모자이크 처리 로직 구현
        // ...
    }
}

위와 같은 단계를 따라 Swift에서 카메라로 모자이크를 처리할 수 있습니다. 만약 OpenCV 라이브러리를 사용한다면 모자이크 처리와 관련된 다양한 기능을 더 쉽게 구현할 수 있을 것입니다.

참고 자료