Vision: framework thị giác máy tính trong iOS

Tác giả: IT Sectr Đã đăng: 2026-07-19 Thời gian đọc: 9 phút

Vision là framework thị giác máy tính của Apple, được giới thiệu lần đầu tiên trong iOS 11 vào năm 2017. Vision cung cấp các thuật toán sẵn sàng để phát hiện khuôn mặt, nhận dạng văn bản (OCR), phát hiện mã vạch, theo dõi đối tượng, phân loại hình ảnh và phân tích đường viền — tất cả được thực hiện trên thiết bị bằng Neural Engine. Theo Apple WWDC 2023, Vision được sử dụng trong ứng dụng Ảnh tiêu chuẩn để nhận dạng khuôn mặt và trong ứng dụng Máy ảnh để phát hiện văn bản thời gian thực trên iPhone và iPad.

Điểm chính

  • Vision là framework thị giác máy tính trên thiết bị của Apple với chu trình phân tích đầy đủ trên thiết bị.
  • Hỗ trợ phát hiện khuôn mặt, nhận dạng văn bản (OCR), mã vạch, phân loại và theo dõi đối tượng.
  • Hoạt động thông qua cơ chế VNRequest thống nhất — các yêu cầu đến một hình ảnh hoặc luồng video.
  • Tích hợp với Core ML để sử dụng mô hình tùy chỉnh qua VNCoreMLRequest.
  • Framework được tối ưu hóa cho Neural Engine trên chip A12+ để đạt hiệu suất thời gian thực.

Vision trong iOS là gì?

Vision là một framework thị giác máy tính cấp cao, trừu tượng hóa các thuật toán học máy phức tạp đằng sau một API yêu cầu đơn giản (VNRequest). Nhà phát triển không cần hiểu về mạng nơ-ron tích chập — chỉ cần tạo loại yêu cầu phù hợp, truyền một hình ảnh và nhận kết quả.

Kiến trúc của Vision tuân theo nguyên tắc Yêu cầu → Trình xử lý → Kết quả: VNImageRequestHandler nhận một hình ảnh, thực thi VNRequest và trả về một mảng VNObservation với kết quả. Điều này cho phép kết hợp nhiều yêu cầu trên một hình ảnh — ví dụ: đồng thời phát hiện khuôn mặt và văn bản trong một bức ảnh.

Vision hỗ trợ iOS 11+ và macOS 10.13+. Tăng tốc phần cứng qua Neural Engine yêu cầu chip A12 Bionic trở lên. Trên các thiết bị có A17 Pro và dòng M, Vision xử lý tới 60 khung hình mỗi giây cho video phát trực tiếp.

Lợi thế chính của Vision là quyền riêng tư hoàn toàn: tất cả tính toán được thực hiện trên thiết bị, hình ảnh không bao giờ được gửi đến máy chủ. Điều này cho phép sử dụng framework trong các ứng dụng xử lý dữ liệu nhạy cảm, như ứng dụng y tế hoặc ngân hàng.

Phát hiện và nhận dạng khuôn mặt

VNDetectFaceRectanglesRequest là yêu cầu cơ bản của Vision để phát hiện khuôn mặt trong một hình ảnh. Nó trả về tọa độ của các hình chữ nhật bao quanh mỗi khuôn mặt, mà không xác định một người cụ thể.

Để phân tích chi tiết hơn, hãy sử dụng VNDetectFaceLandmarksRequest, xác định các điểm chính trên khuôn mặt: mắt, lông mày, mũi, miệng, đường viền hàm. Dữ liệu này được sử dụng để áp dụng mặt nạ, hoạt ảnh biểu tượng cảm xúc và bộ lọc thời gian thực (như trong FaceTime và Snapchat).

swift
import Vision
import UIKit

guard let image = UIImage(named: "photo") else { return }
let request = VNDetectFaceRectanglesRequest()
let handler = VNImageRequestHandler(cgImage: image.cgImage!, options: [:])

try handler.perform([request])
for observation in request.results ?? [] {
    let bbox = observation.boundingBox
    print("Face at x=\\(bbox.origin.x), y=\\(bbox.origin.y)")
}

VNFaceObservation chứa không chỉ boundingBox mà còn confidence (độ tin cậy từ 0 đến 1) và landmarks — một mảng các điểm trên khuôn mặt nếu yêu cầu là VNDetectFaceLandmarksRequest. Confidence dưới 0,5 thường chỉ ra kết quả dương tính giả — những kết quả này nên được loại bỏ.

Vision cũng hỗ trợ VNDetectFaceCaptureQualityRequest, đánh giá chất lượng hình ảnh khuôn mặt: ánh sáng, độ sắc nét, góc xoay. Điều này hữu ích để chọn khung hình tốt nhất khi đăng ký người dùng hoặc tạo hình đại diện.

Nhận dạng văn bản (OCR) với Vision

VNRecognizeTextRequest là công cụ OCR tích hợp của Apple, được giới thiệu trong iOS 13. Nó nhận dạng văn bản in trong hình ảnh với hỗ trợ 13 ngôn ngữ: tiếng Anh, tiếng Nga, tiếng Trung, tiếng Nhật, tiếng Hàn, tiếng Ý, tiếng Đức, tiếng Tây Ban Nha, tiếng Bồ Đào Nha, tiếng Pháp, tiếng Ả Rập, tiếng Việt và tiếng Thái.

VNRecognizeTextRequest hỗ trợ hai mức độ chính xác: .fast (nhanh, cho văn bản đơn giản trên nền tương phản) và .accurate (chính xác, cho các cảnh phức tạp với nhiều phông chữ và góc độ khác nhau). .fast nhanh hơn 3–5 lần nhưng xử lý văn bản viết tay và phông chữ không chuẩn kém hiệu quả hơn.

swift
import Vision

let textRequest = VNRecognizeTextRequest { request, _ in
    guard let observations = request.results as? [VNRecognizedTextObservation]
    else { return }
    for observation in observations {
        let topCandidate = observation.topCandidates(1).first
        print(topCandidate?.string ?? "")
    }
}
textRequest.recognitionLevel = .accurate
textRequest.usesLanguageCorrection = true

Thuộc tính usesLanguageCorrection bật tính năng hiệu chỉnh văn bản đã nhận dạng bằng mô hình ngôn ngữ. Điều này cải thiện độ chính xác cho tiếng Anh lên 10–15% nhưng tăng thời gian xử lý. Hiệu chỉnh tiếng Nga cũng có sẵn khi chỉ định nhận dạng phù hợp.

Theo Apple ML Research 2022, VNRecognizeTextRequest ở mức .accurate đạt độ chính xác 96% cho ảnh tài liệu rõ nét bằng tiếng Anh và khoảng 88% cho tiếng Nga. Đối với văn bản trên bao bì, biển hiệu và màn hình, độ chính xác giảm xuống 75–85%.

Mức nhận dạngTốc độĐộ chính xác (tiếng Anh)Hỗ trợ tiếng Nga
.fast0,1–0,3 giây~85%
.accurate0,3–1,0 giây~96%

Phát hiện mã vạch và mã QR

VNDetectBarcodesRequest — yêu cầu Vision để phát hiện và giải mã mã vạch và mã QR trong hình ảnh. Tất cả các định dạng chính đều được hỗ trợ: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec và QR.

Không giống như AVFoundation (AVCaptureMetadataOutput), Vision hoạt động không chỉ với luồng video mà còn với hình ảnh tĩnh — cho phép quét mã từ ảnh có sẵn hoặc ảnh chụp màn hình. Vision cũng xác định boundingBox của mã với độ chính xác đến từng pixel, thuận tiện cho việc tạo hoạt ảnh khung xung quanh mã được phát hiện.

swift
import Vision

let barcodeRequest = VNDetectBarcodesRequest { request, _ in
    guard let observations = request.results as? [VNBarcodeObservation]
    else { return }
    for observation in observations {
        let payload = observation.payloadStringValue ?? ""
        print("Barcode: \\(payload), Symbology: \\(observation.symbology.rawValue)"
    }
}

VNBarcodeObservation chứa payloadStringValue (nội dung đã giải mã), symbology (loại mã) và confidence. Đối với mã QR, payload có thể là URL, văn bản hoặc JSON. Đối với EAN/UPC, một mã sản phẩm số được trả về, có thể dùng để tra cứu mặt hàng trong cơ sở dữ liệu.

Vision có thể xử lý nhiều mã vạch trên một hình ảnh — mảng observations chứa một đối tượng cho mỗi mã được phát hiện. Điều này hữu ích để quét lô sản phẩm hoặc tài liệu có nhiều mã vạch.

Theo dõi đối tượng trong luồng video

VNDetectObjectAtPointRequestVNSequenceRequestHandler — các công cụ của Vision để theo dõi đối tượng trong luồng video. Công cụ đầu tiên xác định đối tượng bằng điểm chạm của người dùng, công cụ thứ hai theo dõi đối tượng giữa các khung hình video.

VNSequenceRequestHandler nhận một chuỗi các hình ảnh (khung hình video) và trả về vị trí cập nhật của đối tượng được theo dõi cho mỗi khung hình. Điều này được sử dụng trong các ứng dụng thực tế tăng cường, trình chỉnh sửa video và hệ thống giám sát.

swift
import Vision

let trackingRequest = VNTrackObjectRequest(detectedObjectObservation: initialObservation)
let sequenceHandler = VNSequenceRequestHandler()

for frame in videoFrames {
    try sequenceHandler.perform([trackingRequest],
        on: frame.cgImage!)
    let newBBox = trackingRequest.results?.first?.boundingBox
    // Cập nhật vị trí đối tượng trên màn hình
}

VNTrackObjectRequest sử dụng thuật toán theo dõi dựa trên luồng quang học — nó không huấn luyện lại bộ phát hiện trên mỗi khung hình mà tính toán độ dịch chuyển của đối tượng so với vị trí trước đó. Điều này cho phép hoạt động thời gian thực ngay cả trên các thiết bị không có Neural Engine.

Hạn chế: theo dõi có thể mất đối tượng khi di chuyển nhanh, bị che khuất hoặc thay đổi ánh sáng đột ngột. Apple khuyến nghị khởi động lại phát hiện (VNDetectObjectAtPointRequest) sau mỗi 10–15 khung hình để hiệu chỉnh theo dõi.

Phân loại hình ảnh và phân tích đường viền

VNClassifyImageRequest là mô hình tích hợp của Vision để phân loại hình ảnh thành 1.000 danh mục (mô hình ResNet-50 được huấn luyện trên ImageNet). Yêu cầu trả về một mảng VNClassificationObservation với tên danh mục và độ tin cậy.

VNDetectContoursRequest thực hiện phân tích đường viền hình ảnh — trích xuất ranh giới đối tượng, hữu ích cho phân đoạn, vẽ đường viền và tiền xử lý trước khi nhận dạng. Yêu cầu trả về một mảng các điểm mô tả mỗi đường viền trong hình ảnh.

swift
import Vision

// Phân loại hình ảnh
let classificationRequest = VNClassifyImageRequest { request, _ in
    guard let results = request.results as? [VNClassificationObservation]
    else { return }
    let topMatch = results.prefix(3).filter { $0.confidence > 0.3 }
    for match in topMatch {
        print("\\(match.identifier): \\(match.confidence)"
    }
}

VNClassifyImageRequest hoạt động tốt cho các danh mục chung (mèo, chó, xe hơi, thức ăn) nhưng không phù hợp cho các đối tượng cụ thể — đối với những đối tượng đó, bạn cần huấn luyện một mô hình Core ML tùy chỉnh và sử dụng VNCoreMLRequest. Mô hình của Apple được tối ưu hóa cho thiết bị di động và chỉ chiếm 5 MB.

VNDetectContoursRequest trả về các đường viền dưới dạng mảng các điểm với loại đường viền (bên ngoài, bên trong, lỗ). Yêu cầu này được sử dụng để tiền xử lý hình ảnh trước OCR (cải thiện độ tương phản văn bản), vẽ hiệu ứng (vẽ đường viền đối tượng) và phân tích hình dạng.

Yêu cầu VisionMục đíchPhiên bản iOS
VNDetectFaceRectanglesRequestTìm khuôn mặt trong hình ảnhiOS 11
VNRecognizeTextRequestNhận dạng văn bản (OCR)iOS 13
VNDetectBarcodesRequestPhát hiện mã vạch và QRiOS 11
VNClassifyImageRequestPhân loại hình ảnhiOS 13
VNDetectContoursRequestPhân tích đường viềniOS 14
VNTrackObjectRequestTheo dõi đối tượngiOS 11

Câu hỏi thường gặp

Sự khác biệt giữa Vision và Core ML cho thị giác máy tính là gì?

Vision cung cấp các thuật toán sẵn sàng (phát hiện khuôn mặt, OCR, mã vạch) mà không cần huấn luyện mô hình. Core ML là công cụ để thực thi các mô hình tùy chỉnh. Vision + VNCoreMLRequest cho phép chạy các mô hình Core ML trong pipeline Vision, kết hợp ưu điểm của cả hai: bộ phát hiện sẵn có của Vision + phân loại tùy chỉnh của Core ML.

Vision có hoạt động thời gian thực trên video không?

Có, Vision hỗ trợ xử lý luồng video thời gian thực qua VNSequenceRequestHandler để theo dõi và AVCaptureVideoDataOutput để xử lý từng khung hình. Trên các thiết bị có A12+ và Neural Engine, Vision xử lý tới 60 fps cho phát hiện khuôn mặt. Đối với các tác vụ nặng (OCR, phân loại), nên xử lý mỗi 5–10 khung hình.

VNRecognizeTextRequest hỗ trợ những ngôn ngữ nào?

VNRecognizeTextRequest hỗ trợ 13 ngôn ngữ: tiếng Anh, tiếng Nga, tiếng Trung (giản thể và phồn thể), tiếng Nhật, tiếng Hàn, tiếng Ý, tiếng Đức, tiếng Tây Ban Nha, tiếng Bồ Đào Nha, tiếng Pháp, tiếng Ả Rập, tiếng Việt và tiếng Thái. Để nhận dạng nhiều ngôn ngữ trong một hình ảnh, hãy chỉ định một mảng trong thuộc tính recognitionLanguages.

Có thể sử dụng Vision với mô hình Core ML không?

Có, thông qua VNCoreMLRequest. Bạn tạo một mô hình Core ML được bọc trong VNCoreMLModel và truyền nó cho VNCoreMLRequest. Vision tự động xử lý tiền xử lý hình ảnh (thay đổi kích thước, cắt xén) và đưa vào mô hình Core ML. Kết quả được trả về dưới dạng VNCoreMLFeatureValueObservation với dữ liệu đầu ra của mô hình.

Vision có gửi hình ảnh đến máy chủ Apple không?

Không, Vision thực hiện tất cả phân tích hoàn toàn trên thiết bị. Hình ảnh không bao giờ rời khỏi thiết bị của người dùng. Đây là kiến trúc cốt lõi của Apple: tất cả các framework ML (Vision, NaturalLanguage, Core ML, Speech) đều hoạt động trên thiết bị để đảm bảo quyền riêng tư. Không có dữ liệu nào được gửi đến máy chủ của Apple.

Tóm tắt

  • Vision — framework thị giác máy tính trên thiết bị của Apple với API dựa trên VNRequest, khả dụng từ iOS 11 trên tất cả thiết bị Apple.
  • VNDetectFaceRectanglesRequestVNDetectFaceLandmarksRequest phát hiện khuôn mặt và các điểm chính cho bộ lọc, mặt nạ và hoạt ảnh.
  • VNRecognizeTextRequest — OCR tích hợp cho 13 ngôn ngữ với các mức .fast và .accurate, độ chính xác lên đến 96% cho tài liệu.
  • VNDetectBarcodesRequest giải mã tất cả các định dạng mã vạch và QR phổ biến cả trong ảnh và luồng video.
  • VNTrackObjectRequest theo dõi đối tượng giữa các khung hình video qua luồng quang học mà không huấn luyện lại bộ phát hiện.
  • Tích hợp Core ML qua VNCoreMLRequest cho phép chạy các mô hình phân loại và phát hiện tùy chỉnh trong pipeline Vision.
  • Tất cả tính toán được thực hiện trên thiết bị bằng Neural Engine — không gửi hình ảnh đến máy chủ và đảm bảo quyền riêng tư dữ liệu hoàn toàn.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm