0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Xây Dựng Ứng Dụng Quét ID iOS với Nhận Diện Tài Liệu và OCR

Đăng vào 1 tháng trước

• 8 phút đọc

Giới thiệu

Trong thời đại công nghệ hiện nay, việc nhận diện tài liệu và văn bản đang trở nên ngày càng quan trọng. Framework Vision của Apple cung cấp các API mạnh mẽ để thực hiện các tác vụ nhận diện hình ảnh như phát hiện khuôn mặt, phát hiện biên giới tài liệu và trích xuất văn bản. Bài viết này sẽ hướng dẫn bạn cách sử dụng các API này cùng với SDK Dynamsoft MRZ để xây dựng một ứng dụng quét ID trên iOS.

Video Demo: Ứng Dụng Quét ID iOS

[Video demo sẽ được thêm vào đây]

Các yêu cầu trước khi bắt đầu

  • Giấy phép dùng thử miễn phí 30 ngày cho SDK Quét MRZ của Dynamsoft
  • Xcode 15.0 trở lên
  • Mục tiêu triển khai iOS 14.0+
  • Một thiết bị iOS thực tế (tính năng camera không hoạt động trên simulator)

Cài đặt Dự án

  1. Tạo một dự án SwiftUI mới trong Xcode.
  2. Thêm SDK Dynamsoft MRZ qua Swift Package Manager:
    • Trong Xcode: File > Add Package Dependency
    • Nhập URL: https://github.com/Dynamsoft/mrz-scanner-spm
    • Chọn phiên bản: 3.0.5200
    • Thêm cả hai sản phẩm:
      • DynamsoftCaptureVisionBundle
      • DynamsoftMRZScannerBundle
  3. Chuyển đến cài đặt dự án, chọn mục tiêu ứng dụng của bạn và vào tab Info. Thêm các khóa sau để yêu cầu quyền truy cập camera:
    Copy
    <key>NSCameraUsageDescription</key>
    <string>Quyền truy cập camera là cần thiết để quét tài liệu và phát hiện khuôn mặt.</string>

Bước 1: Quản lý Quyền

Trước tiên, hãy tạo một trình quản lý quyền để xử lý quyền truy cập camera:

swift Copy
import AVFoundation
import Photos
import SwiftUI

class PermissionsManager: ObservableObject {
    @Published var cameraPermissionStatus: AVAuthorizationStatus = .notDetermined

    init() {
        checkPermissions()
        startMonitoringPermissions()
    }

    func checkPermissions() {
        cameraPermissionStatus = AVCaptureDevice.authorizationStatus(for: .video)
    }

    private func startMonitoringPermissions() {
        NotificationCenter.default.addObserver(
            forName: UIApplication.didBecomeActiveNotification,
            object: nil,
            queue: .main
        ) { [weak self] _ in
            self?.checkPermissions()
        }
    }

    func requestCameraPermission() {
        AVCaptureDevice.requestAccess(for: .video) { [weak self] granted in
            DispatchQueue.main.async {
                self?.checkPermissions() 
            }
        }
    }

    var isCameraAuthorized: Bool {
        cameraPermissionStatus == .authorized
    }

    deinit {
        NotificationCenter.default.removeObserver(self)
    }
}

Tiếp theo, tạo một giao diện người dùng thân thiện để yêu cầu quyền truy cập:

swift Copy
struct PermissionsView: View {
    @ObservedObject var permissionsManager: PermissionsManager
    @Binding var isPresented: Bool

    var body: some View {
        VStack(spacing: 30) {
            Image(systemName: "camera.viewfinder")
                .font(.system(size: 60))
                .foregroundColor(.blue)
            Text("Cần Quyền Truy Cập Camera")
                .font(.title2)
                .fontWeight(.semibold)
            Text("Ứng dụng quét ID cần quyền truy cập camera để quét tài liệu và phát hiện khuôn mặt.")
                .font(.body)
                .multilineTextAlignment(.center)
                .foregroundColor(.secondary)
                .padding(.horizontal)
            if permissionsManager.isCameraAuthorized {
                Button("Tiếp Tục") {
                    isPresented = false
                }
                .buttonStyle(.borderedProminent)
                .controlSize(.large)
            }
            Spacer()
        }
        .padding()
        .onAppear {
            permissionsManager.checkPermissions()
        }
    }
}

Bước 2: Quản lý Camera

Tạo một lớp quản lý camera:

swift Copy
import AVFoundation
import UIKit
import Vision
import DynamsoftMRZScannerBundle

final class CameraManager: NSObject, ObservableObject {
    @Published var captureSession = AVCaptureSession()
    @Published var previewLayer: AVCaptureVideoPreviewLayer?
    @Published var detectedFaces: [VNFaceObservation] = []
    @Published var detectedRectangles: [VNRectangleObservation] = []
    @Published var isSessionRunning = false

    override init() {
        super.init()
        setupCamera()
        setLicense()
    }

    func setupCamera() {
        // Cấu hình camera
    }

    func setLicense() {
        // Thiết lập giấy phép cho SDK
    }
}

Bước 3: Nhận Diện Thực Thời Gian với Framework Vision

Triển khai delegate xử lý video để phát hiện khuôn mặt và biên tài liệu:

swift Copy
extension CameraManager: AVCaptureVideoDataOutputSampleBufferDelegate {
    func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
        // Xử lý khung video để nhận diện
    }
}

Bước 4: Chỉnh Sửa Hình Ảnh Tài Liệu

Triển khai sửa chữa phối cảnh cho tài liệu đã chụp:

swift Copy
struct ImageRectifier {
    static func rectifyImage(_ image: UIImage) -> UIImage? {
        // Chỉnh sửa hình ảnh
        return nil
    }
}

Bước 5: Dịch Vụ OCR với Framework Vision

Tạo dịch vụ OCR:

swift Copy
class OCRService {
    static let shared = OCRService()
    func extractText(from image: UIImage) {
        // Trích xuất văn bản từ hình ảnh
    }
}

Bước 6: Nhận Diện MRZ

Cấu hình máy quét MRZ trong lớp CameraManager:

swift Copy
extension CameraManager {
    func processMRZOnImage(_ image: UIImage) {
        // Xử lý MRZ
    }
}

Bước 7: Giao Diện Camera SwiftUI

Tạo giao diện camera chính với các lớp phủ thời gian thực:

swift Copy
struct CameraView: View {
    @StateObject private var cameraManager = CameraManager()
    var body: some View {
        // Giao diện camera
    }
}

Bước 8: Hiển Thị Kết Quả

Tạo một view SwiftUI mới để hiển thị hình ảnh đã chuẩn hóa, kết quả OCR và kết quả MRZ:

swift Copy
struct ResultView: View {
    let image: UIImage
    let ocrResults: [String]
    let mrzResults: [String: String]
    var body: some View {
        // Hiển thị kết quả quét
    }
}

Thực Hành Tốt Nhất

  • Đảm bảo quyền truy cập camera được yêu cầu rõ ràng từ người dùng.
  • Kiểm tra và xử lý các tình huống lỗi có thể xảy ra.

Cạm Bẩy Thường Gặp

  • Không xử lý tình huống khi người dùng từ chối quyền truy cập camera.
  • Bỏ qua việc kiểm tra trạng thái phiên camera.

Mẹo Hiệu Suất

  • Sử dụng các preset chất lượng camera phù hợp để tối ưu hóa hiệu suất.
  • Giảm thiểu số lượng khung hình xử lý nếu không cần thiết.

Giải Quyết Vấn Đề

  • Nếu không nhận diện được khuôn mặt, hãy kiểm tra ánh sáng và khoảng cách giữa camera và đối tượng.
  • Đảm bảo rằng SDK đã được khởi tạo và giấy phép đã được xác minh.

Hỏi Đáp

Q: Ứng dụng này có hỗ trợ quét tài liệu không?
A: Có, ứng dụng này hỗ trợ quét tài liệu và nhận diện văn bản thông qua OCR và MRZ.

Q: Tôi cần những gì để sử dụng ứng dụng này?
A: Bạn cần có giấy phép Dynamsoft MRZ SDK và thiết bị iOS thực tế.

Kết Luận

Bài viết này đã hướng dẫn bạn cách xây dựng một ứng dụng quét ID trên iOS sử dụng framework Vision của Apple và SDK của Dynamsoft. Hãy bắt đầu xây dựng ứng dụng của bạn ngay hôm nay và khám phá những khả năng mà công nghệ nhận diện hình ảnh mang lại!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào