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
- Tạo một dự án SwiftUI mới trong Xcode.
- 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:
DynamsoftCaptureVisionBundleDynamsoftMRZScannerBundle
- 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:
<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
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
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
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
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
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
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
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
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
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!