Vision เป็นเฟรมเวิร์กคอมพิวเตอร์วิชันของ Apple ซึ่งเปิดตัวครั้งแรกใน iOS 11 เมื่อปี 2017 Vision มีอัลกอริทึมพร้อมใช้งานสำหรับการตรวจจับใบหน้า การรู้จำข้อความ (OCR) การตรวจจับบาร์โค้ด การติดตามวัตถุ การจำแนกภาพ และการวิเคราะห์โครงร่าง — ทั้งหมดทำงานบนอุปกรณ์โดยใช้ Neural Engine ตามข้อมูลจาก Apple WWDC 2023 Vision ถูกใช้ในแอพรูปภาพมาตรฐานสำหรับการจดจำใบหน้าและในแอพกล้องถ่ายรูปสำหรับการตรวจจับข้อความแบบเรียลไทม์บน iPhone และ iPad
ประเด็นสำคัญ
Vision เป็นเฟรมเวิร์กคอมพิวเตอร์วิชันระดับสูงที่ซ่อนอัลกอริทึมการเรียนรู้ของเครื่องที่ซับซ้อนไว้เบื้องหลัง API คำขอที่เรียบง่าย (VNRequest) นักพัฒนาไม่จำเป็นต้องเข้าใจโครงข่ายประสาทเทียมแบบคอนโวลูชัน — เพียงสร้างคำขอประเภทที่เหมาะสม ส่งภาพ และรับผลลัพธ์
สถาปัตยกรรมของ Vision เป็นไปตามหลักการ Request → Handler → Result: VNImageRequestHandler รับภาพ ดำเนินการ VNRequest และส่งคืนอาร์เรย์ของ VNObservation พร้อมผลลัพธ์ ซึ่งช่วยให้สามารถรวมคำขอหลายรายการในภาพเดียวได้ — เช่น การตรวจจับใบหน้าและข้อความในภาพถ่ายพร้อมกัน
Vision รองรับ iOS 11+ และ macOS 10.13+ การเร่งความเร็วฮาร์ดแวร์ผ่าน Neural Engine ต้องใช้ชิป A12 Bionic หรือใหม่กว่า บนอุปกรณ์ที่มี A17 Pro และซีรีส์ M Vision สามารถประมวลผลได้สูงสุด 60 เฟรมต่อวินาทีสำหรับวิดีโอสตรีมมิ่ง
ข้อได้เปรียบหลัก ของ Vision คือความเป็นส่วนตัวที่สมบูรณ์: การคำนวณทั้งหมดดำเนินการบนอุปกรณ์ ภาพจะไม่ถูกส่งไปยังเซิร์ฟเวอร์ ซึ่งช่วยให้สามารถใช้เฟรมเวิร์กในแอปพลิเคชันที่ทำงานกับข้อมูลที่ละเอียดอ่อน เช่น แอปทางการแพทย์หรือธนาคาร
VNDetectFaceRectanglesRequest คือคำขอพื้นฐานของ Vision สำหรับตรวจจับใบหน้าในภาพ โดยส่งคืนพิกัดของสี่เหลี่ยมที่ล้อมรอบใบหน้าแต่ละใบ โดยไม่ระบุตัวบุคคลที่เฉพาะเจาะจง
สำหรับการวิเคราะห์โดยละเอียดยิ่งขึ้น ให้ใช้ VNDetectFaceLandmarksRequest ซึ่งระบุจุดสำคัญของใบหน้า: ดวงตา คิ้ว จมูก ปาก โครงร่างกราม ข้อมูลนี้ใช้สำหรับการวางมาสก์ การเคลื่อนไหวอิโมจิ และฟิลเตอร์แบบเรียลไทม์ (เช่น ใน FaceTime และ Snapchat)
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 ไม่เพียงประกอบด้วย boundingBox แต่ยังรวมถึง confidence (ความเชื่อมั่นตั้งแต่ 0 ถึง 1) และ landmarks — อาร์เรย์ของจุดบนใบหน้าหากคำขอเป็น VNDetectFaceLandmarksRequest ค่า confidence ที่ต่ำกว่า 0.5 มักบ่งชี้ว่าผลบวกปลอม — ควรทิ้งผลลัพธ์ดังกล่าว
Vision ยังรองรับ VNDetectFaceCaptureQualityRequest ซึ่งประเมินคุณภาพของภาพใบหน้า: แสงสว่าง ความคมชัด มุมการหมุน ซึ่งมีประโยชน์สำหรับการเลือกเฟรมที่ดีที่สุดระหว่างการลงทะเบียนผู้ใช้หรือสร้างอวาตาร์
VNRecognizeTextRequest คือเอนจิ้น OCR ในตัวของ Apple ที่เปิดตัวใน iOS 13 ซึ่งรู้จำข้อความที่พิมพ์ในภาพโดยรองรับ 13 ภาษา: อังกฤษ รัสเซีย จีน ญี่ปุ่น เกาหลี อิตาลี เยอรมัน สเปน โปรตุเกส ฝรั่งเศส อาหรับ เวียดนาม และไทย
VNRecognizeTextRequest รองรับความแม่นยำสองระดับ: .fast (รวดเร็ว สำหรับข้อความง่ายบนพื้นหลังที่ตัดกัน) และ .accurate (แม่นยำ สำหรับฉากที่ซับซ้อนด้วยแบบอักษรและมุมต่างๆ) .fast เร็วกว่า 3–5 เท่าแต่จัดการกับข้อความที่เขียนด้วยลายมือและแบบอักษรที่ไม่ได้มาตรฐานได้มีประสิทธิภาพน้อยกว่า
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
คุณสมบัติ usesLanguageCorrection เปิดการแก้ไขข้อความที่รู้จำโดยใช้แบบจำลองภาษา ซึ่งช่วยเพิ่มความแม่นยำสำหรับภาษาอังกฤษ 10–15% แต่เพิ่มเวลาในการประมวลผล การแก้ไขภาษารัสเซียก็สามารถใช้ได้เมื่อระบุการรู้จำที่เหมาะสม
ตามข้อมูลของ Apple ML Research 2022 ความแม่นยำของ VNRecognizeTextRequest ที่ระดับ .accurate อยู่ที่ 96% สำหรับภาพถ่ายเอกสารที่ชัดเจนเป็นภาษาอังกฤษและประมาณ 88% สำหรับภาษารัสเซีย สำหรับข้อความบนบรรจุภัณฑ์ ป้าย และหน้าจอ ความแม่นยำลดลงเหลือ 75–85%
| ระดับการรู้จำ | ความเร็ว | ความแม่นยำ (อังกฤษ) | รองรับรัสเซีย |
|---|---|---|---|
| .fast | 0.1–0.3 วินาที | ~85% | ใช่ |
| .accurate | 0.3–1.0 วินาที | ~96% | ใช่ |
VNDetectBarcodesRequest — คำขอ Vision สำหรับตรวจจับและถอดรหัสบาร์โค้ดและคิวอาร์โค้ดในภาพ รองรับทุกรูปแบบหลัก: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec และ QR
แตกต่างจาก AVFoundation (AVCaptureMetadataOutput) Vision ทำงานไม่เพียงกับสตรีมวิดีโอเท่านั้น แต่ยังทำงานกับภาพนิ่งด้วย — ทำให้สามารถสแกนโค้ดจากภาพถ่ายที่มีอยู่หรือภาพหน้าจอ Vision ยังระบุ boundingBox ของโค้ดด้วยความแม่นยำระดับพิกเซล ซึ่งสะดวกสำหรับการสร้างกรอบเคลื่อนไหวรอบโค้ดที่ตรวจจับได้
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 ประกอบด้วย payloadStringValue (เนื้อหาที่ถอดรหัสแล้ว) symbology (ประเภทโค้ด) และ confidence สำหรับคิวอาร์โค้ด เพย์โหลดสามารถเป็น URL ข้อความ หรือ JSON สำหรับ EAN/UPC จะส่งคืนรหัสผลิตภัณฑ์ที่เป็นตัวเลขซึ่งสามารถใช้ค้นหารายการในฐานข้อมูลได้
Vision สามารถประมวลผล บาร์โค้ดหลายรายการ ในภาพเดียว — อาร์เรย์ observations มีหนึ่งอ็อบเจกต์สำหรับแต่ละโค้ดที่ตรวจจับได้ ซึ่งมีประโยชน์สำหรับการสแกนชุดผลิตภัณฑ์หรือเอกสารที่มีบาร์โค้ดหลายรายการ
VNDetectObjectAtPointRequest และ VNSequenceRequestHandler — เครื่องมือของ Vision สำหรับติดตามวัตถุในสตรีมวิดีโอ ตัวแรกระบุวัตถุตามจุดสัมผัสของผู้ใช้ ตัวที่สองติดตามวัตถุระหว่างเฟรมวิดีโอ
VNSequenceRequestHandler รับลำดับของภาพ (เฟรมวิดีโอ) และส่งคืนตำแหน่งที่อัปเดตของวัตถุที่กำลังติดตามสำหรับแต่ละเฟรม ซึ่งใช้ในแอปพลิเคชันความเป็นจริงเสริม โปรแกรมตัดต่อวิดีโอ และระบบเฝ้าระวัง
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
// อัปเดตตำแหน่งวัตถุบนหน้าจอ
}
VNTrackObjectRequest ใช้อัลกอริทึมการติดตามแบบออปติคัลโฟลว์ — มันไม่ได้ฝึกตัวตรวจจับใหม่ในทุกเฟรมแต่คำนวณการกระจัดของวัตถุจากตำแหน่งก่อนหน้า ซึ่งช่วยให้ทำงานแบบเรียลไทม์ได้แม้บนอุปกรณ์ที่ไม่มี Neural Engine
ข้อจำกัด: การติดตามอาจสูญเสียวัตถุระหว่างการเคลื่อนไหวเร็ว การบดบัง หรือการเปลี่ยนแปลงแสงอย่างกะทันหัน Apple แนะนำให้เริ่มการตรวจจับใหม่ (VNDetectObjectAtPointRequest) ทุก 10–15 เฟรมเพื่อแก้ไขการติดตาม
VNClassifyImageRequest — โมเดลในตัวของ Vision สำหรับจำแนกภาพเป็น 1,000 หมวดหมู่ (โมเดล ResNet-50 ที่ฝึกบน ImageNet) คำขอส่งคืนอาร์เรย์ของ VNClassificationObservation พร้อมชื่อหมวดหมู่และความเชื่อมั่น
VNDetectContoursRequest ทำการวิเคราะห์โครงร่างของภาพ — แยกขอบเขตของวัตถุ มีประโยชน์สำหรับการแบ่งส่วน การวาดโครงร่าง และการประมวลผลล่วงหน้าก่อนการรู้จำ คำขอส่งคืนอาร์เรย์ของจุดที่อธิบายแต่ละโครงร่างในภาพ
import Vision
// การจำแนกภาพ
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 ทำงานได้ดีสำหรับหมวดหมู่ทั่วไป (แมว สุนัข รถยนต์ อาหาร) แต่ไม่เหมาะสำหรับวัตถุเฉพาะ — สำหรับวัตถุเหล่านั้น คุณต้องฝึกโมเดล Core ML ที่กำหนดเองและใช้ VNCoreMLRequest โมเดลของ Apple ได้รับการปรับให้เหมาะสมสำหรับอุปกรณ์มือถือและใช้พื้นที่เพียง 5 MB
VNDetectContoursRequest ส่งคืนโครงร่างเป็นอาร์เรย์ของจุดพร้อมประเภทโครงร่าง (ภายนอก ภายใน รู) คำขอนี้ใช้สำหรับการประมวลผลภาพล่วงหน้าก่อน OCR (ปรับปรุงคอนทราสต์ของข้อความ) การวาดเอฟเฟกต์ (การวาดโครงร่างวัตถุ) และการวิเคราะห์รูปร่าง
| คำขอ Vision | วัตถุประสงค์ | เวอร์ชัน iOS |
|---|---|---|
| VNDetectFaceRectanglesRequest | ค้นหาใบหน้าในภาพ | iOS 11 |
| VNRecognizeTextRequest | รู้จำข้อความ (OCR) | iOS 13 |
| VNDetectBarcodesRequest | ตรวจจับบาร์โค้ดและ QR | iOS 11 |
| VNClassifyImageRequest | จำแนกภาพ | iOS 13 |
| VNDetectContoursRequest | วิเคราะห์โครงร่าง | iOS 14 |
| VNTrackObjectRequest | ติดตามวัตถุ | iOS 11 |
คำถามที่พบบ่อย
Vision มีอัลกอริทึมพร้อมใช้งาน (ตรวจจับใบหน้า OCR บาร์โค้ด) โดยไม่ต้องฝึกโมเดล Core ML เป็นเอนจิ้นสำหรับดำเนินการโมเดลที่กำหนดเอง Vision + VNCoreMLRequest ช่วยให้เรียกใช้โมเดล Core ML ภายในไปป์ไลน์ของ Vision ได้รับสิ่งที่ดีที่สุดของทั้งสองโลก: ตัวตรวจจับพร้อมใช้ของ Vision + การจำแนกประเภทแบบกำหนดเองของ Core ML
ใช่ Vision รองรับการประมวลผลสตรีมวิดีโอแบบเรียลไทม์ผ่าน VNSequenceRequestHandler สำหรับการติดตามและ AVCaptureVideoDataOutput สำหรับการประมวลผลแบบเฟรมต่อเฟรม บนอุปกรณ์ที่มี A12+ และ Neural Engine Vision ประมวลผลได้ถึง 60 fps สำหรับการตรวจจับใบหน้า สำหรับงานหนัก (OCR การจำแนกประเภท) แนะนำให้ประมวลผลทุก 5–10 เฟรม
VNRecognizeTextRequest รองรับ 13 ภาษา: อังกฤษ รัสเซีย จีน (ตัวย่อและตัวเต็ม) ญี่ปุ่น เกาหลี อิตาลี เยอรมัน สเปน โปรตุเกส ฝรั่งเศส อาหรับ เวียดนาม และไทย หากต้องการรู้จำหลายภาษาในภาพเดียว ให้ระบุอาร์เรย์ในคุณสมบัติ recognitionLanguages
ได้ ผ่าน VNCoreMLRequest คุณสร้างโมเดล Core ML ที่ห่อใน VNCoreMLModel และส่งต่อไปยัง VNCoreMLRequest Vision จัดการการประมวลผลภาพล่วงหน้า (การปรับขนาด การครอบตัด) โดยอัตโนมัติและป้อนให้กับโมเดล Core ML ผลลัพธ์จะถูกส่งคืนเป็น VNCoreMLFeatureValueObservation พร้อมข้อมูลเอาต์พุตของโมเดล
ไม่ Vision ดำเนินการวิเคราะห์ทั้งหมดบนอุปกรณ์อย่างสมบูรณ์ ภาพจะไม่ออกจากอุปกรณ์ของผู้ใช้ นี่คือสถาปัตยกรรมหลักของ Apple: เฟรมเวิร์ก ML ทั้งหมด (Vision, NaturalLanguage, Core ML, Speech) ทำงานบนอุปกรณ์เพื่อรับประกันความเป็นส่วนตัว ไม่มีข้อมูลใดถูกส่งไปยังเซิร์ฟเวอร์ของ Apple
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม