Vision — Apple-dan kompüter görmə freymvorkudur, ilk dəfə iOS 11-də 2017-ci ildə təqdim edilmişdir. Vision üz aşkarlama, mətn tanıma (OCR), ştrixkod aşkarlama, obyekt izləmə, təsvir klassifikasiyası və kontur analizi üçün hazır alqoritmlər təqdim edir — bütün bunlar Neural Engine istifadə edərək cihazda yerinə yetirilir. Apple WWDC 2023 məlumatına görə, Vision standart “Foto” tətbiqində üz tanıma və “Kamera”da iPhone və iPad-də real vaxtda mətn aşkarlama üçün istifadə olunur.
Əsas məqamlar
Vision — yüksək səviyyəli kompüter görmə freymvorkudur, mürəkkəb maşın öyrənmə alqoritmlərini sadə VNRequest API-si ilə abstraksiya edir. Tərtibatçı konvolyusiyalı neyron şəbəkələri bilməlidir — sadəcə lazımi tipli sorğu yaratmaq, təsviri ötürmək və nəticəni almaq kifayətdir.
Vision arxitekturası Request → Handler → Result prinsipi üzərində qurulub: VNImageRequestHandler təsviri qəbul edir, VNRequest-i yerinə yetirir və nəticələrlə VNObservation massivi qaytarır. Bu, bir təsvirə bir neçə sorğunu birləşdirməyə imkan verir — məsələn, eyni anda fotoşəkildə üzləri və mətni aşkarlamaq.
Vision iOS 11+ və macOS 10.13+-u dəstəkləyir. Neural Engine vasitəsilə aparat sürətləndirməsi üçün A12 Bionic və ya daha yeni çip tələb olunur. A17 Pro və M seriyalı cihazlarda Vision axın videosu üçün saniyədə 60 kadr emal edir.
Əsas üstünlük Vision — tam məxfilik: bütün hesablamalar cihazda yerinə yetirilir, təsvirlər serverə göndərilmir. Bu, freymvorku həssas məlumatlarla işləyən tətbiqlərdə, məsələn tibbi və ya bank tətbiqlərində istifadə etməyə imkan verir.
VNDetectFaceRectanglesRequest — təsvirdə üzləri aşkarlamaq üçün əsas Vision sorğusu. Konkret şəxsi identifikasiya etmədən hər üzü məhdudlaşdıran düzbucaqlıların koordinatlarını qaytarır.
Daha ətraflı analiz üçün VNDetectFaceLandmarksRequest istifadə edin, o, üzün əsas nöqtələrini müəyyən edir: gözlər, qaşlar, burun, ağız, çənə konturu. Bu məlumatlar real vaxtda maskaların tətbiqi, emoji animasiyası və filtrlər üçün istifadə olunur (FaceTime və Snapchat-dakı kimi).
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 yalnız boundingBox deyil, həm də confidence (0-dan 1-ə qədər inam) və landmarks — sorğu VNDetectFaceLandmarksRequest idisə, üz nöqtələrinin massivini ehtiva edir. Confidence 0.5-dən aşağı olduqda adətən yanlış aşkarlama deməkdir — belə nəticələrin atılması tövsiyə olunur.
Vision həmçinin VNDetectFaceCaptureQualityRequest-i dəstəkləyir, o, üz təsvirinin keyfiyyətini qiymətləndirir: işıqlandırma, kəskinlik, dönmə bucağı. Bu, istifadəçi qeydiyyatı zamanı ən yaxşı kadrı seçmək və ya avatar yaratmaq üçün faydalıdır.
VNRecognizeTextRequest — iOS 13-də təqdim edilmiş Apple-ın daxili OCR mühərrikidir. 13 dil dəstəyi ilə təsvirlərdə çap mətnini tanıyır: ingilis, rus, çin, yapon, koreya, italyan, alman, ispan, portuqal, fransız, ərəb, vyetnam və tay.
VNRecognizeTextRequest iki dəqiqlik səviyyəsini dəstəkləyir: .fast (sürətli, kontrast fonunda sadə mətn üçün) və .accurate (dəqiq, müxtəlif şrift və bucaqları olan mürəkkəb səhnələr üçün). .fast 3–5 dəfə sürətli işləyir, lakin əlyazma mətni və qeyri-standart şriftlərlə daha pis nəticə göstərir.
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 xassəsi dil modeli istifadə edərək tanınan mətnin korreksiyasını aktivləşdirir. Bu, ingilis dili üçün dəqiqliyi 10–15% artırır, lakin emal müddətini uzadır. Rus dili üçün də korreksiya mövcuddur, əgər müvafiq rekognisiya göstərilibsə.
Apple ML Research 2022 məlumatına görə, .accurate səviyyəsində VNRecognizeTextRequest dəqiqliyi ingilis dilində aydın sənəd fotoları üçün 96% və rus dili üçün təxminən 88% təşkil edir. Paketlərdə, lövhələrdə və ekranlarda mətn üçün dəqiqlik 75–85%-ə qədər azalır.
| Recognition Level | Sürət | Dəqiqlik (ingilis) | Rus dili dəstəyi |
|---|---|---|---|
| .fast | 0.1–0.3 san | ~85% | Bəli |
| .accurate | 0.3–1.0 san | ~96% | Bəli |
VNDetectBarcodesRequest — təsvirdə ştrixkodları və QR kodları aşkarlamaq və dekodlaşdırmaq üçün Vision sorğusu. Bütün əsas formatlar dəstəklənir: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec və QR.
AVFoundation-dan (AVCaptureMetadataOutput) fərqli olaraq, Vision yalnız video axını ilə deyil, həm də statik təsvirlərlə işləyir — bu, artıq çəkilmiş fotolardan və ya ekran görüntülərindən kodları skan etməyə imkan verir. Vision həmçinin kodun boundingBox-unu piksel dəqiqliyi ilə müəyyən edir, bu da tapılan kodun ətrafında çərçivə animasiyası üçün əlverişlidir.
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 (dekodlaşdırılmış məzmun), symbology (kod növü) və confidence ehtiva edir. QR kodları üçün payload URL, mətn və ya JSON ola bilər. EAN/UPC üçün məlumat bazasında məhsul axtarışı üçün istifadə edilə bilən rəqəmli məhsul kodu qaytarılır.
Vision bir təsvirdə bir neçə ştrixkodu emal edə bilər — observations massivi hər tapılan kod üçün bir obyekt ehtiva edir. Bu, mal paketlərini və ya çoxsaylı ştrixkodlu sənədləri skan etmək üçün faydalıdır.
VNDetectObjectAtPointRequest və VNSequenceRequestHandler — video axınında obyekt izləmək üçün Vision alətləri. Birincisi obyekti istifadəçinin toxunma nöqtəsi ilə müəyyən edir, ikincisi obyekti video kadrlar arasında izləyir.
VNSequenceRequestHandler təsvirlər ardıcıllığını (video kadrları) qəbul edir və hər kadr üçün izlənilən obyektin yenilənmiş mövqeyini qaytarır. Bu, genişləndirilmiş reallıq tətbiqlərində, video redaktorlarda və müşahidə sistemlərində istifadə olunur.
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
// Obyektin ekrandakı mövqeyini yenilə
}
VNTrackObjectRequest optik axın əsasında izləmə alqoritmindən istifadə edir — hər kadrda detektoru yenidən öyrətməz, əvvəlki vəziyyətə nisbətən obyektin yerdəyişməsini hesablayır. Bu, hətta Neural Engine olmayan cihazlarda real vaxtda işləməyə imkan verir.
Məhdudiyyət: izləmə sürətli hərəkət, örtülmə və ya işıqlandırmanın kəskin dəyişməsi zamanı obyekti itirə bilər. Apple izləməni düzəltmək üçün hər 10–15 kadrdan bir deteksiyanı (VNDetectObjectAtPointRequest) yenidən başlatmağı tövsiyə edir.
VNClassifyImageRequest — 1000 kateqoriya üzrə təsvir klassifikasiyası üçün daxili Vision modelidir (ResNet-50 modeli, ImageNet-də təlim keçmiş). Sorğu kateqoriya adı və inamla VNClassificationObservation massivi qaytarır.
VNDetectContoursRequest təsvirin kontur analizini yerinə yetirir — obyektlərin sərhədlərini ayırır, bu, seqmentasiya, konturlama və tanımadan əvvəl ilkin emal üçün faydalıdır. Sorğu təsvirdə hər konturu təsvir edən nöqtələr massivi qaytarır.
import Vision
// Təsvir klassifikasiyası
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 ümumi kateqoriyalar (pişik, it, maşın, yemək) üçün yaxşı işləyir, lakin spesifik obyektlər üçün uyğun deyil — onlar üçün xüsusi Core ML modeli öyrətmək və VNCoreMLRequest istifadə etmək lazımdır. Apple modeli mobil cihazlar üçün optimallaşdırılıb və cəmi 5 MB yer tutur.
VNDetectContoursRequest kontur növünü göstərən (xarici, daxili, deşik) nöqtələr massivi şəklində konturları qaytarır. Bu sorğu OCR-dən əvvəl təsvirlərin ilkin emalı (mətn kontrastını yaxşılaşdırma), effektlərin çəkilməsi (obyekt konturları) və formaların analizi üçün istifadə olunur.
| Vision sorğusu | Təyinat | iOS versiyası |
|---|---|---|
| VNDetectFaceRectanglesRequest | Təsvirdə üz axtarışı | iOS 11 |
| VNRecognizeTextRequest | Mətn tanıma (OCR) | iOS 13 |
| VNDetectBarcodesRequest | Ştrixkod və QR aşkarlama | iOS 11 |
| VNClassifyImageRequest | Təsvir klassifikasiyası | iOS 13 |
| VNDetectContoursRequest | Kontur analizi | iOS 14 |
| VNTrackObjectRequest | Obyekt izləmə | iOS 11 |
Tez-tez verilən suallar
Vision model öyrətmədən hazır alqoritmlər təqdim edir (üz aşkarlama, OCR, ştrixkodlar). Core ML — xüsusi modelləri yerinə yetirmək üçün mühərrikdir. Vision + VNCoreMLRequest Vision boru kəmərində Core ML modellərini işə salmağa imkan verir, hər ikisinin ən yaxşı tərəflərini birləşdirir: Vision-un hazır detektorları + Core ML-in xüsusi klassifikasiyası.
Bəli, Vision VNSequenceRequestHandler vasitəsilə izləmə və AVCaptureVideoDataOutput vasitəsilə kadr-kadr emalı üçün real vaxtda video axını emalını dəstəkləyir. A12+ və Neural Engine olan cihazlarda Vision üz aşkarlama üçün saniyədə 60 kadr emal edir. Ağır tapşırıqlar (OCR, klassifikasiya) üçün hər 5–10 kadrı emal etmək tövsiyə olunur.
VNRecognizeTextRequest 13 dil dəstəkləyir: ingilis, rus, çin (sadələşdirilmiş və ənənəvi), yapon, koreya, italyan, alman, ispan, portuqal, fransız, ərəb, vyetnam və tay. Bir təsvirdə bir neçə dili tanımaq üçün recognitionLanguages xassəsində massiv göstərin.
Bəli, VNCoreMLRequest vasitəsilə. Siz VNCoreMLModel-ə bükülmüş Core ML modeli yaradır və onu VNCoreMLRequest-ə ötürürsünüz. Vision avtomatik olaraq təsvirin ilkin emalını (miqyaslama, kəsmə) idarə edir və Core ML modelinə ötürür. Nəticə modelin çıxış məlumatları ilə VNCoreMLFeatureValueObservation kimi qaytarılır.
Xeyr, Vision bütün analizi tamamilə cihazda yerinə yetirir. Təsvirlər istifadəçinin cihazını tərk etmir. Bu, Apple-ın əsas arxitekturasıdır: bütün ML freymvorkları (Vision, NaturalLanguage, Core ML, Speech) məxfilik təmin etmək üçün on-device işləyir. Heç bir məlumat Apple serverlərinə göndərilmir.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun