Vision — ay isang framework ng computer vision mula sa Apple, unang ipinakilala sa iOS 11 noong 2017. Nagbibigay ang Vision ng mga handa na algorithm para sa pagtuklas ng mukha, pagkilala ng teksto (OCR), pagtuklas ng barcode, pagsubaybay ng bagay, pag-uuri ng larawan, at pagsusuri ng contour — lahat ay isinasagawa sa device gamit ang Neural Engine. Ayon sa Apple WWDC 2023, ginagamit ang Vision sa karaniwang app na “Mga Larawan” para sa pagkilala ng mukha at sa “Camera” para sa real-time na pagtuklas ng teksto sa iPhone at iPad.
Mga Pangunahing Punto
Vision — ay isang mataas na antas ng framework ng computer vision na nag-aabstrak ng mga kumplikadong algorithm ng machine learning sa likod ng simpleng API ng mga kahilingan (VNRequest). Hindi kailangan ng developer na maunawaan ang convolutional neural network — sapat na upang lumikha ng isang kahilingan ng tamang uri, ipadala ang larawan, at matanggap ang resulta.
Ang arkitektura ng Vision ay binuo sa prinsipyong Request → Handler → Result: Ang VNImageRequestHandler ay tumatanggap ng larawan, isinasagawa ang VNRequest, at nagbabalik ng array ng VNObservation na may mga resulta. Pinapayagan nito ang pagsasama-sama ng maraming kahilingan sa isang larawan — halimbawa, sabay na pagtuklas ng mga mukha at teksto sa isang larawan.
Sinusuportahan ng Vision ang iOS 11+ at macOS 10.13+. Para sa hardware acceleration sa pamamagitan ng Neural Engine, kinakailangan ang A12 Bionic chip o mas bago. Sa mga device na may A17 Pro at M series, pinoproseso ng Vision ang hanggang 60 frames bawat segundo para sa streaming video.
Pangunahing bentahe ng Vision — ganap na pagkapribado: lahat ng pagkalkula ay isinasagawa sa device, ang mga larawan ay hindi ipinapadala sa server. Pinapayagan nito ang paggamit ng framework sa mga app na gumagana sa sensitibong data, halimbawa sa medikal o banking app.
VNDetectFaceRectanglesRequest — ang pangunahing kahilingan ng Vision para sa pagtuklas ng mga mukha sa isang larawan. Nagbabalik ito ng mga coordinate ng mga parihaba na naglilimita sa bawat mukha, nang walang pagkakakilanlan ng partikular na tao.
Para sa mas detalyadong pagsusuri gamitin ang VNDetectFaceLandmarksRequest, na tumutukoy sa mga pangunahing punto ng mukha: mata, kilay, ilong, bibig, contour ng panga. Ang data na ito ay ginagamit para sa paglalagay ng maskara, animation ng emoji, at mga filter sa real-time (tulad ng sa FaceTime at 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 ay naglalaman hindi lamang ng boundingBox, kundi pati na rin ng confidence (tiwala mula 0 hanggang 1) at landmarks — array ng mga punto ng mukha, kung ang kahilingan ay VNDetectFaceLandmarksRequest. Ang confidence na mas mababa sa 0.5 ay karaniwang nangangahulugan ng maling pagtuklas — ang mga naturang resulta ay inirerekomenda na itapon.
Sinusuportahan din ng Vision ang VNDetectFaceCaptureQualityRequest, na sinusuri ang kalidad ng larawan ng mukha: ilaw, talas, anggulo ng pag-ikot. Ito ay kapaki-pakinabang para sa pagpili ng pinakamahusay na frame sa pagpaparehistro ng user o paggawa ng avatar.
VNRecognizeTextRequest — ay ang built-in na OCR engine ng Apple, ipinakilala sa iOS 13. Kinikilala nito ang naka-print na teksto sa mga larawan na may suporta para sa 13 wika: Ingles, Ruso, Chinese, Japanese, Korean, Italyano, Aleman, Espanyol, Portuges, Pranses, Arabic, Vietnamese, at Thai.
VNRecognizeTextRequest ay sumusuporta sa dalawang antas ng katumpakan: .fast (mabilis, para sa simpleng teksto sa contrast background) at .accurate (tumpak, para sa kumplikadong mga eksena na may iba't ibang font at anggulo). Ang .fast ay gumagana nang 3–5 beses na mas mabilis, ngunit mas mahina sa paghawak ng sulat-kamay na teksto at hindi karaniwang mga font.
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
Ang property na usesLanguageCorrection ay nag-a-activate ng pagwawasto ng kinikilalang teksto gamit ang isang modelo ng wika. Pinapataas nito ang katumpakan para sa Ingles ng 10–15%, ngunit pinahaba ang oras ng pagproseso. Para sa wikang Ruso, ang pagwawasto ay magagamit din kung ang naaangkop na pagkilala ay tinukoy.
Ayon sa Apple ML Research 2022, ang katumpakan ng VNRecognizeTextRequest sa antas na .accurate ay 96% para sa malinaw na mga larawan ng dokumento sa Ingles at mga 88% para sa Ruso. Para sa teksto sa mga packaging, karatula, at screen, ang katumpakan ay bumababa sa 75–85%.
| Recognition Level | Bilis | Katumpakan (Ingles) | Suporta sa Ruso |
|---|---|---|---|
| .fast | 0.1–0.3 seg | ~85% | Oo |
| .accurate | 0.3–1.0 seg | ~96% | Oo |
VNDetectBarcodesRequest — ang kahilingan ng Vision para sa pagtuklas at pag-decode ng mga barcode at QR code sa larawan. Lahat ng pangunahing format ay sinusuportahan: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec, at QR.
Hindi tulad ng AVFoundation (AVCaptureMetadataOutput), ang Vision ay gumagana hindi lamang sa video stream, kundi pati na rin sa mga static na larawan — pinapayagan nito ang pag-scan ng mga code mula sa mga larawang kuha na o screenshot. Tinutukoy din ng Vision ang boundingBox ng code na may katumpakan ng pixel, na maginhawa para sa animation ng frame sa paligid ng nakitang code.
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 ay naglalaman ng payloadStringValue (na-decode na nilalaman), symbology (uri ng code), at confidence. Para sa QR code, ang payload ay maaaring URL, teksto, o JSON. Para sa EAN/UPC, ang numerikong code ng produkto ay ibinabalik, na maaaring gamitin para sa paghahanap ng item sa database.
Maaaring iproseso ng Vision ang maraming barcode sa isang larawan — ang array ng observations ay naglalaman ng isang bagay para sa bawat nakitang code. Ito ay kapaki-pakinabang para sa pag-scan ng mga pakete ng produkto o dokumento na may maraming barcode.
VNDetectObjectAtPointRequest at VNSequenceRequestHandler — mga tool ng Vision para sa pagsubaybay ng mga bagay sa video stream. Ang una ay tumutukoy ng bagay sa pamamagitan ng touch point ng user, ang pangalawa ay sumusubaybay sa bagay sa pagitan ng mga frame ng video.
VNSequenceRequestHandler ay tumatanggap ng pagkakasunod-sunod ng mga larawan (mga frame ng video) at para sa bawat frame ay nagbabalik ng na-update na posisyon ng sinusubaybayang bagay. Ito ay ginagamit sa augmented reality apps, video editor, at video surveillance system.
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
// I-update ang posisyon ng bagay sa screen
}
VNTrackObjectRequest ay gumagamit ng tracking algorithm batay sa optical flow — hindi nito muling sinasanay ang detector sa bawat frame, kundi kinakalkula ang displacement ng bagay kaugnay sa dating posisyon. Pinapayagan nito ang real-time na paggana kahit sa mga device na walang Neural Engine.
Limitasyon: maaaring mawala ng tracking ang bagay sa mabilis na paggalaw, pagtakip, o biglaang pagbabago ng ilaw. Inirerekomenda ng Apple na i-restart ang detection (VNDetectObjectAtPointRequest) tuwing 10–15 frame para sa pagwawasto ng tracking.
VNClassifyImageRequest — ay ang built-in na modelo ng Vision para sa pag-uuri ng larawan sa 1000 kategorya (modelong ResNet-50, sinanay sa ImageNet). Ang kahilingan ay nagbabalik ng array ng VNClassificationObservation na may pangalan ng kategorya at tiwala.
VNDetectContoursRequest ay nagsasagawa ng pagsusuri ng contour ng larawan — kinukuha ang mga hangganan ng bagay, na kapaki-pakinabang para sa segmentation, contouring, at pre-processing bago ang pagkilala. Ang kahilingan ay nagbabalik ng array ng mga punto na naglalarawan ng bawat contour sa larawan.
import Vision
// Pag-uuri ng larawan
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 ay mahusay na gumagana para sa pangkalahatang kategorya (pusa, aso, kotse, pagkain), ngunit hindi angkop para sa mga tiyak na bagay — para sa mga ito kailangan sanayin ang isang custom na modelo ng Core ML at gamitin ang VNCoreMLRequest. Ang modelo mula sa Apple ay na-optimize para sa mobile device at tumatagal lamang ng 5 MB.
VNDetectContoursRequest ay nagbabalik ng mga contour bilang array ng mga punto na may indikasyon ng uri ng contour (panlabas, panloob, butas). Ang kahilingang ito ay ginagamit para sa pre-processing ng mga larawan bago ang OCR (pagpapabuti ng contrast ng teksto), para sa pagguhit ng mga epekto (pagbalangkas ng bagay), at para sa pagsusuri ng hugis.
| Kahilingan ng Vision | Layunin | Bersyon ng iOS |
|---|---|---|
| VNDetectFaceRectanglesRequest | Paghahanap ng mga mukha sa larawan | iOS 11 |
| VNRecognizeTextRequest | Pagkilala ng teksto (OCR) | iOS 13 |
| VNDetectBarcodesRequest | Pagtuklas ng barcode at QR | iOS 11 |
| VNClassifyImageRequest | Pag-uuri ng larawan | iOS 13 |
| VNDetectContoursRequest | Pagsusuri ng contour | iOS 14 |
| VNTrackObjectRequest | Pagsubaybay ng bagay | iOS 11 |
Mga Madalas Itanong
Vision ay nagbibigay ng mga handa na algorithm (pagtuklas ng mukha, OCR, barcode) nang walang pagsasanay ng modelo. Ang Core ML — ay ang engine para sa pagpapatakbo ng mga custom na modelo. Ang Vision + VNCoreMLRequest ay nagpapahintulot sa pagpapatakbo ng mga modelo ng Core ML sa pipeline ng Vision, pinagsasama ang pinakamahusay sa parehong mundo: mga handa na detector ng Vision + custom na pag-uuri ng Core ML.
Oo, sinusuportahan ng Vision ang real-time na pagproseso ng video stream sa pamamagitan ng VNSequenceRequestHandler para sa tracking at sa pamamagitan ng AVCaptureVideoDataOutput para sa frame-by-frame na pagproseso. Sa mga device na may A12+ at Neural Engine, pinoproseso ng Vision ang hanggang 60 frames bawat segundo para sa pagtuklas ng mukha. Para sa mabibigat na gawain (OCR, pag-uuri), inirerekomenda na iproseso ang bawat 5–10 frame.
VNRecognizeTextRequest ay sumusuporta sa 13 wika: Ingles, Ruso, Chinese (pinasimple at tradisyonal), Japanese, Korean, Italyano, Aleman, Espanyol, Portuges, Pranses, Arabic, Vietnamese, at Thai. Para sa pagkilala ng maraming wika sa isang larawan, tukuyin ang isang array sa property na recognitionLanguages.
Oo, sa pamamagitan ng VNCoreMLRequest. Gumawa ka ng modelo ng Core ML na nakabalot sa VNCoreMLModel, at ipadala ito sa VNCoreMLRequest. Awtomatikong pinangangasiwaan ng Vision ang pre-processing ng larawan (pag-scale, pag-crop) at ipinapadala ito sa modelo ng Core ML. Ang resulta ay ibinabalik bilang VNCoreMLFeatureValueObservation na may output data ng modelo.
Hindi, ang Vision ay nagsasagawa ng buong pagsusuri nang ganap sa device. Ang mga larawan ay hindi umaalis sa device ng user. Ito ang pangunahing arkitektura ng Apple: lahat ng ML framework (Vision, NaturalLanguage, Core ML, Speech) ay gumagana on-device upang matiyak ang privacy. Walang data na ipinapadala sa mga server ng Apple.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din