Vision — bu Apple kompaniyasining kompyuter ko‘rish freymvorki bo‘lib, ilk bor iOS 11 da 2017 yilda taqdim etilgan. Vision yuzlarni aniqlash, matnni tanib olish (OCR), shtrix kodlarni topish, obyektlarni kuzatish, tasvirlarni klassifikatsiyalash va kontur tahlili uchun tayyor algoritmlarni taqdim etadi — barchasi Neural Engine yordamida qurilmada bajariladi. Apple WWDC 2023 ma’lumotlariga ko‘ra, Vision standart “Foto” ilovasida yuzlarni tanib olish va “Kamera” da iPhone va iPad da real vaqtda matnni aniqlash uchun ishlatiladi.
Asosiy ma’lumotlar
Vision — bu yuqori darajadagi kompyuter ko‘rish freymvorki bo‘lib, murakkab mashina o‘rganish algoritmlarini oddiy VNRequest API si orqali abstraksiyalaydi. Dasturchi konvolyutsion neyron tarmoqlarni bilishi shart emas — tegishli turdagi so‘rov yaratish, tasvirni uzatish va natijani olish kifoya.
Vision arxitekturasi Request → Handler → Result tamoyiliga asoslangan: VNImageRequestHandler tasvirni qabul qiladi, VNRequest ni bajaradi va natijalar bilan VNObservation massivini qaytaradi. Bu bitta tasvirga bir nechta so‘rovlarni birlashtirish imkonini beradi — masalan, bir vaqtning o‘zida fotosuratdagi yuzlar va matnni aniqlash.
Vision iOS 11+ va macOS 10.13+ ni qo‘llab-quvvatlaydi. Neural Engine orqali apparat tezlashtirish uchun A12 Bionic yoki undan yangiroq chip talab qilinadi. A17 Pro va M seriyali qurilmalarda Vision oqimli video uchun sekundiga 60 kadrgacha ishlaydi.
Asosiy afzallik Vision — to‘liq maxfiylik: barcha hisob-kitoblar qurilmada bajariladi, tasvirlar serverga yuborilmaydi. Bu freymvorkni nozik ma’lumotlar bilan ishlaydigan ilovalarda, masalan tibbiy yoki bank ilovalarida qo‘llash imkonini beradi.
VNDetectFaceRectanglesRequest — tasvirda yuzlarni aniqlash uchun asosiy Vision so‘rovi. Muayyan shaxsni identifikatsiya qilmasdan, har bir yuzni chegaralovchi to‘rtburchaklar koordinatalarini qaytaradi.
Batafsilroq tahlil uchun VNDetectFaceLandmarksRequest dan foydalaning, u yuzning asosiy nuqtalarini aniqlaydi: ko‘zlar, qoshlar, burun, og‘iz, jag‘ konturi. Bu ma’lumotlar real vaqtda maskalarni qo‘llash, emoji animatsiyasi va filtrlar uchun ishlatiladi (FaceTime va Snapchat dagi kabi).
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 nafaqat boundingBox, balki confidence (0 dan 1 gacha ishonchlilik) va landmarks — agar so‘rov VNDetectFaceLandmarksRequest bo‘lsa, yuz nuqtalari massivini o‘z ichiga oladi. Confidence 0.5 dan past bo‘lsa, odatda noto‘g‘ri aniqlashni bildiradi — bunday natijalarni rad etish tavsiya etiladi.
Vision shuningdek VNDetectFaceCaptureQualityRequest ni qo‘llab-quvvatlaydi, u yuz tasvirining sifatini baholaydi: yoritish, aniqlik, aylanish burchagi. Bu foydalanuvchini ro‘yxatdan o‘tkazishda yoki avatar yaratishda eng yaxshi kadrni tanlash uchun foydalidir.
VNRecognizeTextRequest — iOS 13 da taqdim etilgan Apple ning ichki OCR mexanizmi. 13 tilni qo‘llab-quvvatlagan holda tasvirlardagi bosma matnni taniydi: ingliz, rus, xitoy, yapon, koreys, italyan, nemis, ispan, portugal, fransuz, arab, vyetnam va tay.
VNRecognizeTextRequest ikki aniqlik darajasini qo‘llab-quvvatlaydi: .fast (tez, kontrast fonda oddiy matn uchun) va .accurate (aniq, turli shrift va burchakli murakkab sahnalar uchun). .fast 3–5 marta tezroq ishlaydi, lekin qo‘l yozuvi va nostandart shriftlar bilan yomonroq natija beradi.
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 xususiyati til modeli yordamida tanib olingan matnni tuzatishni faollashtiradi. Bu ingliz tili uchun aniqlikni 10–15% ga oshiradi, lekin ishlov berish vaqtini uzaytiradi. Rus tili uchun ham tuzatish mavjud, agar tegishli rekognitsiya ko‘rsatilgan bo‘lsa.
Apple ML Research 2022 ma’lumotlariga ko‘ra, .accurate darajasida VNRecognizeTextRequest aniqligi ingliz tilidagi hujjatlarning aniq fotosuratlari uchun 96% va rus tili uchun taxminan 88% ni tashkil qiladi. Paketlar, belgilar va ekranlardagi matn uchun aniqlik 75–85% gacha pasayadi.
| Recognition Level | Tezlik | Aniqlik (ingliz) | Rus tili qo‘llab-quvvatlash |
|---|---|---|---|
| .fast | 0.1–0.3 soniya | ~85% | Ha |
| .accurate | 0.3–1.0 soniya | ~96% | Ha |
VNDetectBarcodesRequest — tasvirda shtrix kodlar va QR kodlarni aniqlash va dekodlash uchun Vision so‘rovi. Barcha asosiy formatlar qo‘llab-quvvatlanadi: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec va QR.
AVFoundation dan (AVCaptureMetadataOutput) farqli o‘laroq, Vision nafaqat video oqimi bilan, balki statik tasvirlar bilan ham ishlaydi — bu allaqachon olingan fotosuratlar yoki ekran tasvirlaridan kodlarni skanerlash imkonini beradi. Vision shuningdek kodning boundingBox ini piksel aniqligida aniqlaydi, bu topilgan kod atrofida ramka animatsiyasi uchun qulay.
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 (dekodlangan mazmun), symbology (kod turi) va confidence ni o‘z ichiga oladi. QR kodlar uchun payload URL, matn yoki JSON bo‘lishi mumkin. EAN/UPC uchun mahsulotning raqamli kodi qaytariladi, undan ma’lumotlar bazasida tovarni qidirish uchun foydalanish mumkin.
Vision bitta tasvirda bir nechta shtrix kodlarni qayta ishlay oladi – observations massivi har bir topilgan kod uchun bitta obyektni o‘z ichiga oladi. Bu tovar paketlari yoki bir nechta shtrix kodli hujjatlarni skanerlash uchun foydalidir.
VNDetectObjectAtPointRequest va VNSequenceRequestHandler — video oqimida obyektlarni kuzatish uchun Vision vositalari. Birinchisi obyektni foydalanuvchining teginish nuqtasi bilan aniqlaydi, ikkinchisi obyektni video kadrlar orasida kuzatadi.
VNSequenceRequestHandler tasvirlar ketma-ketligini (video kadrlarini) qabul qiladi va har bir kadr uchun kuzatilayotgan obyektning yangilangan pozitsiyasini qaytaradi. Bu kengaytirilgan reallik ilovalari, video muharrirlar va video kuzatuv tizimlarida qo‘llaniladi.
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
// Obyektning ekrandagi holatini yangilang
}
VNTrackObjectRequest optik oqimga asoslangan kuzatish algoritmidan foydalanadi — har bir kadrda detektorni qayta o‘rgatmaydi, balki obyektning oldingi holatga nisbatan siljishini hisoblaydi. Bu hatto Neural Engine bo‘lmagan qurilmalarda ham real vaqtda ishlash imkonini beradi.
Cheklov: kuzatish tez harakat, yopilish yoki yoritishning keskin o‘zgarishida obyektni yo‘qotishi mumkin. Apple kuzatishni to‘g‘irlash uchun har 10–15 kadrda deteksiyani (VNDetectObjectAtPointRequest) qayta ishga tushirishni tavsiya qiladi.
VNClassifyImageRequest — 1000 toifada tasvirlarni klassifikatsiyalash uchun ichki Vision modeli (ResNet-50 modeli, ImageNet da o‘qitilgan). So‘rov toifa nomi va ishonchlilik bilan VNClassificationObservation massivini qaytaradi.
VNDetectContoursRequest tasvirning kontur tahlilini bajaradi — obyektlarning chegaralarini ajratadi, bu segmentatsiya, konturlash va tanib olishdan oldin dastlabki ishlov berish uchun foydalidir. So‘rov tasvirdagi har bir konturni tavsiflovchi nuqtalar massivini qaytaradi.
import Vision
// Tasvir klassifikatsiyasi
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 umumiy toifalar (mushuk, it, mashina, ovqat) uchun yaxshi ishlaydi, lekin maxsus obyektlar uchun mos emas — ular uchun maxsus Core ML modelini o‘qitish va VNCoreMLRequest dan foydalanish kerak. Apple modeli mobil qurilmalar uchun optimallashtirilgan va atigi 5 MB joy egallaydi.
VNDetectContoursRequest kontur turini ko‘rsatuvchi (tashqi, ichki, teshik) nuqtalar massivi shaklida konturlarni qaytaradi. Bu so‘rov OCR dan oldin tasvirlarni dastlabki qayta ishlash (matn kontrastini yaxshilash), effektlarni chizish (obyekt konturlari) va shakllarni tahlil qilish uchun ishlatiladi.
| Vision so‘rovi | Maqsad | iOS versiyasi |
|---|---|---|
| VNDetectFaceRectanglesRequest | Tasvirda yuzlarni qidirish | iOS 11 |
| VNRecognizeTextRequest | Matnni tanib olish (OCR) | iOS 13 |
| VNDetectBarcodesRequest | Shtrix kod va QR aniqlash | iOS 11 |
| VNClassifyImageRequest | Tasvirlarni klassifikatsiyalash | iOS 13 |
| VNDetectContoursRequest | Kontur tahlili | iOS 14 |
| VNTrackObjectRequest | Obyektlarni kuzatish | iOS 11 |
Tez-tez beriladigan savollar
Vision modelni o‘qitmasdan tayyor algoritmlarni taqdim etadi (yuzni aniqlash, OCR, shtrix kodlar). Core ML — bu maxsus modellarni bajarish mexanizmi. Vision + VNCoreMLRequest Vision quvurida Core ML modellarini ishga tushirish imkonini beradi, ikkala dunyoning eng yaxshi tomonlarini birlashtiradi: Vision ning tayyor detektorlari + Core ML ning maxsus klassifikatsiyasi.
Ha, Vision VNSequenceRequestHandler orqali kuzatish va AVCaptureVideoDataOutput orqali kadrma-kadr ishlov berish uchun real vaqtda video oqimini qayta ishlashni qo‘llab-quvvatlaydi. A12+ va Neural Engine li qurilmalarda Vision yuzlarni aniqlash uchun sekundiga 60 kadrgacha ishlaydi. Og‘ir vazifalar (OCR, klassifikatsiya) uchun har 5–10 kadrni qayta ishlash tavsiya etiladi.
VNRecognizeTextRequest 13 tilni qo‘llab-quvvatlaydi: ingliz, rus, xitoy (soddalashtirilgan va an’anaviy), yapon, koreys, italyan, nemis, ispan, portugal, fransuz, arab, vyetnam va tay. Bitta tasvirda bir nechta tillarni tanib olish uchun recognitionLanguages xususiyatida massivni ko‘rsating.
Ha, VNCoreMLRequest orqali. Siz VNCoreMLModel ga o‘ralgan Core ML modelini yaratasiz va uni VNCoreMLRequest ga uzatasiz. Vision avtomatik ravishda tasvirni oldindan qayta ishlashni (masshtablash, kesish) boshqaradi va uni Core ML modeliga uzatadi. Natija modelning chiqish ma’lumotlari bilan VNCoreMLFeatureValueObservation sifatida qaytariladi.
Yo‘q, Vision barcha tahlilni to‘liq qurilmada bajaradi. Tasvirlar foydalanuvchi qurilmasini tark etmaydi. Bu Apple ning asosiy arxitekturasi: barcha ML freymvorklari (Vision, NaturalLanguage, Core ML, Speech) maxfiylikni ta’minlash uchun on-device ishlaydi. Hech qanday ma’lumot Apple serverlariga yuborilmaydi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.