[swift] Swift에서 카메라로 물체 추적하기

이번 블로그 포스트에서는 Swift를 사용하여 카메라로 물체를 추적하는 방법에 대해 살펴보겠습니다.

카메라 액세스 권한 요청

먼저 카메라 액세스 권한을 요청해야 합니다. Info.plist 파일에 NSCameraUsageDescription 키를 추가하여 사용자에게 카메라 액세스에 대한 이유를 설명하세요.

<key>NSCameraUsageDescription</key>
<string>카메라 액세스 권한이 필요합니다.</string>

카메라 세팅

다음으로 카메라를 세팅하고 뷰에 표시합니다.

import UIKit
import AVFoundation

class CameraViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {
    let captureSession = AVCaptureSession()
    var previewLayer: AVCaptureVideoPreviewLayer!

    override func viewDidLoad() {
        super.viewDidLoad()

        guard let captureDevice = AVCaptureDevice.default(for: .video) else { return }
        guard let input = try? AVCaptureDeviceInput(device: captureDevice) else { return }

        captureSession.addInput(input)
        captureSession.startRunning()

        previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        previewLayer.frame = view.frame
        view.layer.addSublayer(previewLayer)
    }

    func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
        // 물체 추적 코드 작성
    }
}

물체 추적

captureOutput 메서드 내에서 물체를 추적하고 원하는 작업을 수행합니다. 예를 들어 Core ML과 Vision 프레임워크를 사용하여 물체를 식별하거나 OpenCV 등의 라이브러리를 활용하여 물체를 추적할 수 있습니다.

import Vision

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
    guard let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }

    // Vision 프레임워크를 사용하여 물체 식별
    let request = VNDetectRectanglesRequest(completionHandler: { request, error in
        // 추적된 물체에 대한 작업 수행
    })

    let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:])
    try? handler.perform([request])
}

이제 Swift를 사용하여 카메라로 물체를 추적하는 방법에 대해 간단히 알아보았습니다. Vision 프레임워크를 사용하여 물체를 식별하고 추적하는 방법에 대해 더 자세히 알아보길 원한다면 Vision 프레임워크 문서를 참고하시기 바랍니다.

더 많은 정보를 얻고 싶다면 AVFoundation 프레임워크 문서도 참고하시기 바랍니다.