Vision Apple’ın bilgisayarlı görü framework’üdür ve ilk olarak 2017’de iOS 11 ile tanıtılmıştır. Vision, yüz algılama, metin tanıma (OCR), barkod algılama, nesne takibi, görüntü sınıflandırma ve kontur analizi için hazır algoritmalar sunar — tümü Neural Engine kullanılarak cihaz üzerinde gerçekleştirilir. Apple WWDC 2023’e göre Vision, standart Fotoğraflar uygulamasında yüz tanıma için ve Kamera uygulamasında iPhone ve iPad’de gerçek zamanlı metin algılama için kullanılır.
Önemli Noktalar
Vision, karmaşık makine öğrenimi algoritmalarını basit bir istek API’sinin (VNRequest) arkasında soyutlayan üst düzey bir bilgisayarlı görü framework’üdür. Geliştiricinin evrişimli sinir ağlarını anlaması gerekmez — sadece uygun istek türünü oluşturun, bir görüntü gönderin ve sonucu alın.
Vision’ın mimarisi Request → Handler → Result prensibini izler: VNImageRequestHandler bir görüntüyü kabul eder, VNRequest’i yürütür ve sonuçlarla birlikte bir VNObservation dizisi döndürür. Bu, tek bir görüntü üzerinde birden fazla isteği birleştirmeye olanak tanır — örneğin, bir fotoğrafla aynı anda yüzleri ve metni algılamak.
Vision iOS 11+ ve macOS 10.13+’ü destekler. Neural Engine aracılığıyla donanım hızlandırması için A12 Bionic çip veya daha yenisi gerekir. A17 Pro ve M serisi cihazlarda, Vision akış video için saniyede 60 kareye kadar işlem yapar.
Ana avantajı tam gizliliktir: tüm hesaplamalar cihazda yapılır, görüntüler asla bir sunucuya gönderilmez. Bu, framework’ün tıbbi veya bankacılık uygulamaları gibi hassas verilerle çalışan uygulamalarda kullanılmasına olanak tanır.
VNDetectFaceRectanglesRequest, bir görüntüde yüzleri algılamak için temel Vision isteğidir. Belirli bir kişiyi tanımlamadan, her yüzü çevreleyen dikdörtgenlerin koordinatlarını döndürür.
Daha ayrıntılı analiz için, yüzün temel noktalarını tanımlayan VNDetectFaceLandmarksRequest’i kullanın: gözler, kaşlar, burun, ağız, çene hattı. Bu veriler, maske uygulamak, emoji animasyonları ve gerçek zamanlı filtreler (FaceTime ve Snapchat’te olduğu gibi) için kullanılır.
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ızca boundingBox değil, aynı zamanda confidence (0’1 arası güven) ve landmarks — istek VNDetectFaceLandmarksRequest ise yüz noktalarından oluşan bir dizi — içerir. 0,5’in altındaki confidence genellikle yanlış pozitif olduğunu gösterir — bu tür sonuçlar atılmalıdır.
Vision ayrıca yüz görüntüsü kalitesini (aydınlatma, keskinlik, dönüş açısı) değerlendiren VNDetectFaceCaptureQualityRequest’i de destekler. Bu, kullanıcı kaydı sırasında en iyi kareyi seçmek veya avatar oluşturmak için kullanışlıdır.
VNRecognizeTextRequest, iOS 13 ile tanıtılan Apple’ın yerleşik OCR motorudur. 13 dili destekleyerek görüntülerdeki basılı metni tanır: İngilizce, Rusça, Çince, Japonca, Korece, İtalyanca, Almanca, İspanyolca, Portekizce, Fransızca, Arapça, Vietnamca ve Tayca.
VNRecognizeTextRequest iki doğruluk seviyesini destekler: .fast (hızlı, kontrastlı arka plandaki basit metin için) ve .accurate (doğru, farklı yazı tipleri ve açılara sahip karmaşık sahneler için). .fast 3–5 kat daha hızlıdır ancak el yazısı metni ve standart olmayan yazı tiplerini daha az etkili bir şekilde işler.
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 özelliği, bir dil modeli kullanarak tanınan metin düzeltmesini etkinleştirir. Bu, İngilizce doğruluğunu %10–15 artırır ancak işlem süresini uzatır. Uygun tanıma belirtildiğinde Rusça dil düzeltmesi de mevcuttur.
Apple ML Research 2022’ye göre, .accurate seviyesindeki VNRecognizeTextRequest doğruluğu, İngilizce net belge fotoğrafları için %96 ve Rusça için yaklaşık %88’dir. Paketler, tabelalar ve ekranlardaki metin için doğruluk %75–85’e düşer.
| Tanıma Seviyesi | Hız | Doğruluk (İngilizce) | Rusça Desteği |
|---|---|---|---|
| .fast | 0,1–0,3 sn | ~%85 | Evet |
| .accurate | 0,3–1,0 sn | ~%96 | Evet |
VNDetectBarcodesRequest — görüntülerde barkod ve QR kodlarını algılamak ve çözmek için bir Vision isteği. Tüm ana formatlar desteklenir: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec ve QR.
AVFoundation’dan (AVCaptureMetadataOutput) farklı olarak, Vision yalnızca video akışlarıyla değil, aynı zamanda statik görüntülerle de çalışır — mevcut fotoğraflardan veya ekran görüntülerinden kod taramasına olanak tanır. Vision ayrıca kodun boundingBox’ını piksel hassasiyetiyle belirler; bu, algılanan kodun etrafında bir çerçeve canlandırmak için kullanışlıdır.
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 (çözülen içerik), symbology (kod türü) ve confidence içerir. QR kodları için yük bir URL, metin veya JSON olabilir. EAN/UPC için, bir veritabanında ürünü aramak için kullanılabilecek sayısal bir ürün kodu döndürülür.
Vision, tek bir görüntüde birden çok barkodu işleyebilir — observations dizisi, algılanan her kod için bir nesne içerir. Bu, ürün gruplarını veya birden çok barkoda sahip belgeleri taramak için kullanışlıdır.
VNDetectObjectAtPointRequest ve VNSequenceRequestHandler — video akışındaki nesneleri izlemek için Vision araçları. İlki, kullanıcının dokunma noktasıyla bir nesneyi tanımlar, ikincisi video kareleri arasında bir nesneyi izler.
VNSequenceRequestHandler, bir dizi görüntüyü (video kareleri) kabul eder ve her kare için izlenen nesnenin güncellenmiş konumunu döndürür. Bu, artırılmış gerçeklik uygulamalarında, video düzenleyicilerinde ve gözetim sistemlerinde kullanılır.
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
// Ekrandaki nesne konumunu güncelle
}
VNTrackObjectRequest, optik akış tabanlı bir izleme algoritması kullanır — dedektörü her karede yeniden eğitmez, ancak nesnenin önceki konumuna göre yer değiştirmesini hesaplar. Bu, Neural Engine olmayan cihazlarda bile gerçek zamanlı performans sağlar.
Sınırlama: hızlı hareket, tıkanma veya ani aydınlatma değişiklikleri sırasında izleme nesneyi kaybedebilir. Apple, izleme düzeltmesi için her 10–15 karede bir algılamayı (VNDetectObjectAtPointRequest) yeniden başlatmayı önerir.
VNClassifyImageRequest, 1.000 kategoride görüntü sınıflandırması için Vision’ın yerleşik modelidir (ImageNet üzerinde eğitilmiş ResNet-50 modeli). İstek, kategori adı ve güven ile VNClassificationObservation dizisi döndürür.
VNDetectContoursRequest, görüntü kontur analizi yapar — nesne sınırlarını çıkarır, segmentasyon, ana hat çizme ve tanıma öncesi ön işleme için kullanışlıdır. İstek, görüntüdeki her konturu tanımlayan bir dizi nokta döndürür.
import Vision
// Görüntü sınıflandırma
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, genel kategoriler (kedi, köpek, araba, yiyecek) için iyi çalışır ancak belirli nesneler için uygun değildir — bunlar için özel bir Core ML modeli eğitmeniz ve VNCoreMLRequest kullanmanız gerekir. Apple’ın modeli mobil cihazlar için optimize edilmiştir ve yalnızca 5 MB yer kaplar.
VNDetectContoursRequest, kontur türüyle (dış, iç, delik) birlikte nokta dizisi olarak konturları döndürür. Bu istek, OCR öncesi görüntü ön işleme (metin kontrastını iyileştirme), efekt çizme (nesne ana hatları) ve şekil analizi için kullanılır.
| Vision İsteği | Amaç | iOS Sürümü |
|---|---|---|
| VNDetectFaceRectanglesRequest | Görüntülerde yüz arama | iOS 11 |
| VNRecognizeTextRequest | Metin tanıma (OCR) | iOS 13 |
| VNDetectBarcodesRequest | Barkod ve QR algılama | iOS 11 |
| VNClassifyImageRequest | Görüntü sınıflandırma | iOS 13 |
| VNDetectContoursRequest | Kontur analizi | iOS 14 |
| VNTrackObjectRequest | Nesne takibi | iOS 11 |
Sıkça Sorulan Sorular
Vision, model eğitimi olmadan hazır algoritmalar (yüz algılama, OCR, barkod) sağlar. Core ML, özel modelleri çalıştırmak için motordur. Vision + VNCoreMLRequest, Vision ardışık düzeneğinde Core ML modellerini çalıştırarak her iki dünyanın en iyisini sunar: Vision’ın hazır dedektörleri + Core ML özel sınıflandırması.
Evet, Vision, izleme için VNSequenceRequestHandler ve kare kare işleme için AVCaptureVideoDataOutput aracılığıyla gerçek zamanlı video akışı işlemeyi destekler. A12+ ve Neural Engine’e sahip cihazlarda, Vision yüz algılama için 60 fps’ye kadar işlem yapar. Ağır görevler (OCR, sınıflandırma) için her 5–10 karede bir işlem yapılması önerilir.
VNRecognizeTextRequest 13 dili destekler: İngilizce, Rusça, Çince (basitleştirilmiş ve geleneksel), Japonca, Korece, İtalyanca, Almanca, İspanyolca, Portekizce, Fransızca, Arapça, Vietnamca ve Tayca. Tek bir görüntüde birden çok dili tanımak için recognitionLanguages özelliğinde bir dizi belirtin.
Evet, VNCoreMLRequest aracılığıyla. VNCoreMLModel içine sarılmış bir Core ML modeli oluşturur ve bunu VNCoreMLRequest’e iletirsiniz. Vision, görüntü ön işlemeyi (ölçeklendirme, kırpma) otomatik olarak halleder ve Core ML modeline besler. Sonuç, modelin çıkış verileriyle birlikte VNCoreMLFeatureValueObservation olarak döndürülür.
Hayır, Vision tüm analizi tamamen cihazda gerçekleştirir. Görüntüler asla kullanıcının cihazından çıkmaz. Bu Apple’ın temel mimarisidir: tüm ML framework’leri (Vision, NaturalLanguage, Core ML, Speech) gizliliği sağlamak için cihaz üzerinde çalışır. Apple’ın sunucularına hiçbir veri gönderilmez.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun