Vision — framework wizji komputerowej od Apple, wbudowany w iOS, macOS i iPadOS, dostarczający gotowe API do analizy obrazów, wideo i danych w czasie rzeczywistym. Obejmuje wykrywanie twarzy, rozpoznawanie tekstu, kodów kreskowych, konturów obiektów i śledzenie ruchu — wszystko na urządzeniu bez wysyłania danych na serwer. Według Apple Vision Documentation (2026), framework przetwarza do 60 klatek na sekundę na urządzeniach z chipem A14 i nowszym.
Najważniejsze
Vision — to wysokopoziomowy framework wizji komputerowej, przedstawiony przez Apple na WWDC 2017. Zapewnia programistom jednolity interfejs do wykonywania różnych zadań analizy obrazów i wideo bez konieczności zagłębiania się w matematykę wizji komputerowej czy optymalizację pod konkretny neuroprocesor. Vision automatycznie wykorzystuje Apple Neural Engine na urządzeniach z chipami A12+.
W przeciwieństwie do niskopoziomowych bibliotek takich jak OpenCV, Vision abstrahuje złożoność: programista tworzy obiekt VNRequest, konfiguruje parametry i uruchamia przetwarzanie przez VNImageRequestHandler. Framework sam decyduje, na którym układzie wykonać zadanie — CPU, GPU czy ANE — i zwraca strukturyzowany wynik. Według Apple (WWDC 2025), Vision jest używany w 40% aplikacji App Store pracujących z obrazami.
Vision zawiera API do wykrywania twarzy i ich punktów orientacyjnych (do 68 punktów), rozpoznawania tekstu (OCR) z obsługą 30+ języków, skanowania kodów kreskowych QR i EAN, śledzenia obiektów między klatkami, wykrywania prostokątów i konturów, klasyfikacji obrazów przez Core ML, oceny ruchu i przepływu optycznego oraz wykrywania osoby na obrazie z segmentacją. Każda operacja jest reprezentowana przez oddzielną podklasę VNRequest.
Vision jest zbudowany na architekturze Request → Handler → Results, gdzie każde żądanie to konkretne zadanie: znajdź twarze, rozpoznaj tekst, śledź obiekt. Przyjrzyjmy się najbardziej poszukiwanym API.
VNRequest — abstrakcyjna klasa bazowa, od której dziedziczą wszystkie konkretne żądania Vision. Każde żądanie zawiera completionHandler, parametry konfiguracyjne i regionOfInterest do przetwarzania części obrazu. Po utworzeniu żądania jest ono przekazywane do VNImageRequestHandler (dla statycznych obrazów) lub VNSequenceRequestHandler (dla strumienia wideo). Wyniki zwracane są w postaci tablicy obserwacji — podklas VNObservation.
VNDetectFaceRectanglesRequest znajduje wszystkie twarze na obrazie i zwraca ich ramki. VNDetectFaceLandmarksRequest dodatkowo określa 68 kluczowych punktów orientacyjnych: kontur oczu, brwi, nosa, ust i szczęki. VNDetectFaceCaptureQualityRequest ocenia jakość zdjęcia twarzy — od 0 do 1 — przydatne do biometrii. Według Apple, dokładność wykrywania twarzy na urządzeniach z Neural Engine osiąga 99% przy frontalnym ujęciu.
VNRecognizeTextRequest — API do optycznego rozpoznawania znaków (OCR) na obrazach. Obsługuje tekst drukowany w alfabecie łacińskim, cyrylicy, chińskim, japońskim, koreańskim i innych językach. Wynik — tablica VNRecognizedTextObservation, z których każda zawiera ciąg tekstu, bounding box i poziom ufności. Dostępne są dwa tryby: szybki (Fast) do skanowania dokumentów i dokładny (Accurate) do złożonych czcionek.
Aby użyć Vision, wystarczy zaimportować framework, utworzyć obiekt VNRequest i przekazać go do VNImageRequestHandler. Rozważmy przykład rozpoznawania tekstu na obrazie.
Kod tworzy VNRecognizeTextRequest z dokładnym trybem rozpoznawania, uruchamia go na obrazie i wyświetla rozpoznany tekst w konsoli. Ten prosty przykład demonstruje minimalną integrację Vision w projekcie Swift z użyciem VNImageRequestHandler w kilku linijkach kodu.
import Vision
// 1. Utworzenie żądania rozpoznawania tekstu
let request = VNRecognizeTextRequest { request, error in
guard let observations = request.results
as? [VNRecognizedTextObservation]
else { return }
for observation in observations {
let topCandidate = observation
.topCandidates(1)
.first
print("Tekst: \(topCandidate?.string ?? "")")
}
}
// 2. Włączenie trybu dokładnego
request.recognitionLevel = .accurate
request.usesLanguageCorrection = true
// 3. Uruchomienie przetwarzania
let handler = VNImageRequestHandler(
url: imageURL, options: [:]
)
try? handler.perform([request])
Kod Swift konfiguruje VNRecognizeTextRequest z dokładnym poziomem rozpoznawania i włączoną korekcją językową. VNImageRequestHandler ładuje obraz z URL i wykonuje żądanie. Wyniki zawierają rozpoznane ciągi tekstu z bounding boxami i poziomem ufności dla każdego tokena. Tablicę VNRecognizedTextObservation można wygodnie wyświetlić na ekranie.
Do przetwarzania wideo w czasie rzeczywistym używa się VNSequenceRequestHandler zamiast VNImageRequestHandler. Przyjmuje on tablicę obrazów (klatek) i wykonuje to samo żądanie sekwencyjnie, zachowując stan między klatkami — jest to niezbędne do śledzenia obiektów. VNSequenceRequestHandler automatycznie zarządza pamięcią: stare obserwacje są usuwane, gdy obiekt opuszcza kadr. Wydajność w czasie rzeczywistym zależy od złożoności żądania: wykrywanie twarzy działa z prędkością 60 FPS, a rozpoznawanie tekstu — 15–30 FPS na urządzeniach z chipem A16.
Vision i Core Image — dwa frameworki Apple do pracy z obrazami, ale rozwiązują one zasadniczo różne zadania. Core Image to framework do filtrowania i transformacji obrazów (nakładanie filtrów, korekcja kolorów, rozmycie). Vision to framework do rozumienia zawartości obrazu: co się na nim znajduje.
| Cecha | Vision | Core Image |
|---|---|---|
| Zadanie | Analiza i rozpoznawanie | Filtracja i przetwarzanie |
| Wykrywanie twarzy | Tak, z punktami orientacyjnymi | Tylko CIDetector |
| Rozpoznawanie tekstu | Tak (OCR) | Nie |
| Filtry | Nie | 200+ filtrów |
| Integracja z Core ML | Tak (VNCoreMLRequest) | Nie |
| Śledzenie obiektów | Tak (VNTrackObjectRequest) | Nie |
| Wydajność | Zoptymalizowany dla ANE | GPU (Metal) |
Używaj Vision, gdy chcesz zrozumieć, co znajduje się na obrazie: twarze, tekst, kody QR, obiekty. Używaj Core Image, gdy chcesz zmienić obraz: zastosować filtr, dostosować kolory, przyciąć. Często te dwa frameworki są łączone: najpierw Core Image poprawia jakość zdjęcia, a potem Vision rozpoznaje na nim tekst.
W praktyce Vision i Core Image są używane razem w aplikacjach do skanowania dokumentów. Core Image automatycznie zwiększa kontrast i usuwa cienie (CIFilter z CIPhotoEffectNoir), a Vision rozpoznaje tekst na ulepszonym obrazie. Według Apple (WWDC 2025), dokładność OCR wzrasta o 15–20% po wstępnym przetworzeniu obrazu przez Core Image w porównaniu z surową klatką z kamery.
Kolejny ważny scenariusz wspólnego użycia — analiza twarzy w czasie rzeczywistym dla aplikacji rzeczywistości rozszerzonej. Vision wykrywa twarz i określa 68 punktów orientacyjnych, a Core Image nakłada filtry na wykryte obszary. ARKit używa Vision do śledzenia twarzy i Core Image do renderowania efektów, co daje łączne opóźnienie poniżej 16 ms na urządzeniach z chipami A15+.
Podczas programowania w SwiftUI do integracji Vision używa się protokołu Representable, opakowującego AVCaptureSession i VNImageRequestHandler w UIViewRepresentable. Kamera jest wyświetlana przez PreviewView, każda klatka jest przekazywana do VisionRequestHandler przez AVCaptureVideoDataOutputSampleBufferDelegate. Takie podejście architektoniczne pozwala zachować reaktywność SwiftUI i uzyskiwać wyniki analizy Vision jako właściwości @Published do natychmiastowej aktualizacji interfejsu.
Vision jest stosowany w szerokim spektrum aplikacji iOS: od skanerów dokumentów po aplikacje rzeczywistości rozszerzonej. Rozważmy trzy charakterystyczne scenariusze.
VNDetectDocumentSegmentationRequest (dostępny od iOS 17+) automatycznie wykrywa granice dokumentu na obrazie, koryguje perspektywę i zwraca wyprostowany obraz. W połączeniu z VNRecognizeTextRequest powstaje pełnoprawny skaner OCR, zdolny do rozpoznawania rachunków, wizytówek i stron książek. Według Apple, segmentacja dokumentu zajmuje 30–80 ms na urządzeniu z chipem A15.
VNTrackObjectRequest śledzi przemieszczanie wybranego obiektu między klatkami strumienia wideo w czasie rzeczywistym. Programista określa bounding box obiektu na pierwszej klatce, a Vision automatycznie oblicza jego nowe położenie na kolejnych klatkach. Śledzenie jest stosowane w aplikacjach do analityki wideo, grach AR i systemach nadzoru. Dokładność śledzenia na chipach A16 wynosi 95% przy prędkości ruchu obiektu do 30 pikseli na klatkę.
VNDetectRectanglesRequest znajduje prostokątne obszary na obrazie: ekrany, kartki papieru, szyldy, dokumenty. API zwraca współrzędne narożników z korektą perspektywy. Łącząc prostokąty z VNDetectContoursRequest, można wyodrębnić dokładny kontur obiektu — przydatne w aplikacjach rzeczywistości rozszerzonej i edytorach graficznych. VNDetectContoursRequest zwraca tablicę punktów kontrolnych konturu, które można przekształcić w UIBezierPath do rysowania.
Często zadawane pytania
iOS 11+ dla podstawowych API, iOS 13+ dla rozpoznawania tekstu (VNRecognizeTextRequest), iOS 17+ dla segmentacji dokumentów. Vision jest również dostępny na macOS 10.13+ i iPadOS 13+.
Tak, Vision przetwarza strumień wideo przez VNSequenceRequestHandler i AVFoundation. Framework obsługuje do 60 FPS na urządzeniach z chipami A14+ przy użyciu szybkich żądań.
Vision — natywny framework Apple z automatyczną optymalizacją pod ANE i GPU. OpenCV — wieloplatformowa biblioteka z szerszymi możliwościami, ale wymagająca ręcznej optymalizacji i bez wsparcia Neural Engine.
Przez VNCoreMLRequest: utwórz model Core ML, zainicjuj VNCoreMLModel, przekaż go do VNCoreMLRequest i uruchom przez VNImageRequestHandler. Xcode automatycznie wygeneruje klasę Swift dla modelu.
Pośrednio — VNDetectFaceLandmarksRequest określa położenie kluczowych punktów twarzy, a VNDetectFaceExpressionsRequest (iOS 17+) ocenia uśmiech i mruganie przez zamknięte oczy.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również