[swift] Swift에서 카메라로 신분증 인식하기
이제는 Swift로 iOS 앱을 개발할 때** 카메라로 신분증을 인식하는 기능을 추가할 수 있습니다. 이 기능을 구현하기 위해 **Vision 및 Core ML 프레임워크를 사용할 수 있습니다.
아래에서는 신분증 인식을 위한 Swift 코드 예시를 제시해보겠습니다.
import UIKit
import Vision
import AVFoundation
class IDRecognitionViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {
private var videoCapture: AVCaptureSession!
private var videoOutput: AVCaptureVideoDataOutput!
override func viewDidLoad() {
super.viewDidLoad()
videoCapture = AVCaptureSession()
guard let videoDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) else { return }
do {
let videoInput = try AVCaptureDeviceInput(device: videoDevice)
if videoCapture.canAddInput(videoInput) {
videoCapture.addInput(videoInput)
}
videoOutput = AVCaptureVideoDataOutput()
videoOutput.alwaysDiscardsLateVideoFrames = true
videoOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
if videoCapture.canAddOutput(videoOutput) {
videoCapture.addOutput(videoOutput)
}
let videoLayer = AVCaptureVideoPreviewLayer(session: videoCapture)
videoLayer.frame = view.layer.bounds
view.layer.addSublayer(videoLayer)
videoCapture.startRunning()
} catch {
print(error)
}
}
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
guard let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
let request = VNDetectBarcodesRequest { request, error in
guard error == nil else { return }
guard let barcodes = request.results as? [VNBarcodeObservation] else { return }
for barcode in barcodes {
if let payload = barcode.payloadStringValue {
print(payload)
}
}
}
try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:]).perform([request])
}
}
위의 코드에서는 AVCaptureSession을 사용하여 카메라 입력을 설정하고, AVCaptureVideoDataOutput 을 사용하여 비디오 데이터를 받아옵니다.
그 후 Vision 프레임워크를 사용하여 신분증을 탐지하고 Core ML 모델을 활용하여 정보를 추출합니다.
신분증의 바코드와 OCR을 사용하여 정보를 추출할 수 있으며, 필요에 따라 해당 정보를 처리하고 UI에서 표시할 수 있습니다.
카메라로부터 영상 데이터를 받아오는 것에서부터 바코드 및 텍스트 인식에 이르기까지 이 기능을 구현하는데 사용할 수 있는 다양한 방법이 있습니다.
참고 자료: