← Wszystkie wpisy

Apple Vision Framework: co znajduje się w nim wbudowane, a po co większość programistów sięga do chmurowych API

Apple Vision framework, ten bez przyrostka „OS”, oferuje ponad dwa tuziny operacji computer vision wykonywanych na urządzeniu. Większość deweloperów iOS domyślnie sięga po OpenAI Vision API, Google Cloud Vision lub AWS Rekognition do zadań, które framework realizuje w mikrosekundach na Neural Engine urządzenia. Taki wybór jest raczej odbiciem uprzedzenia niż rzetelnej oceny: chmurowe API sprawiają wrażenie „nowoczesnego AI”, a Vision wydaje się „platformową hydrauliką”, więc platforma zostaje pominięta. Tymczasem to uprzedzenie błędnie odczytuje, co platforma obecnie zawiera.

Vision to framework CV działający w pierwszej kolejności lokalnie. Uruchamia się na Neural Engine, gdy jest on dostępny, na GPU w przeciwnym razie, a w ostateczności na CPU. Wnioskowanie dla większości operacji odbywa się w kilka milisekund. Framework nie generuje żadnych kosztów za wywołanie. Dane nigdy nie opuszczają urządzenia. Klucz API nie istnieje, ponieważ żadne API nie istnieje. Dla większości zadań computer vision wykonywanych przez aplikację iOS jest to właściwe narzędzie.

TL;DR

  • Apple Vision udostępnia ponad dwa tuziny operacji CV na urządzeniu: rozpoznawanie tekstu, wykrywanie twarzy i punktów charakterystycznych, estymację pozy ciała i dłoni, odczyt kodów kreskowych, segmentację dokumentów, osadzenia obrazu, mapy istotności, wykrywanie zwierząt, kontury, trajektorie, przepływ optyczny oraz silnik uruchamiający dowolny model Core ML.
  • Każda operacja działa w milisekundach na Neural Engine, nie generuje kosztu za wywołanie, nie wymaga sieci i nie produkuje telemetrii do zewnętrznych firm.
  • Chmurowe API wygrywają w jednym konkretnym przypadku: złożonym rozumowaniu semantycznym nad obrazem (multimodalny LLM rozumiejący wykres, mem lub intencję dokumentu). W operacjach na poziomie pikseli (znajdź twarze, odczytaj tekst, wykryj dłoń) Vision wygrywa pod względem kosztu, opóźnienia i prywatności.
  • Powiązanie z agentowym przepływem pracy: wyniki Vision zasilają App Intents oraz wywołania Foundation Models do LLM na urządzeniu bez sieciowego roundtripa. Cały potok działa lokalnie.

Co właściwie zawiera Vision

Vision grupuje swoje operacje jako typy VNRequest. Żądanie zostaje utworzone, skonfigurowane parametrami, nakarmione obrazem (lub CVPixelBuffer, lub CIImage, lub CGImage, lub URL) i uruchomione. Wyniki wracają jako obserwacje dołączone do żądania. Poniższe kategorie obejmują obszar frameworka według stanu na iOS 26.

Rozpoznawanie tekstu

VNRecognizeTextRequest wykonuje OCR. Żądanie obsługuje recognitionLevel (.fast dla strumieni z kamery na żywo, .accurate dla skanowania dokumentów), wskazówki językowe, niestandardowe listy słów oraz pewność prostokąta granicznego. Ścieżka accurate w iOS 18+ dorównuje komercyjnym OCR API na paragonach, znakach i drukowanych dokumentach; rozpoznawanie pisma odręcznego jest obsługiwane w wielu językach.

let request = VNRecognizeTextRequest { request, error in
    guard let observations = request.results as? [VNRecognizedTextObservation] else { return }
    let lines = observations.compactMap { $0.topCandidates(1).first?.string }
    print(lines.joined(separator: "\n"))
}
request.recognitionLevel = .accurate
request.usesLanguageCorrection = true
request.recognitionLanguages = ["en-US"]

let handler = VNImageRequestHandler(cgImage: image, options: [:])
try handler.perform([request])

Ta sama operacja przez OpenAI Vision API kosztuje mniej więcej ułamek centa za wywołanie w trybie low-detail i znacząco więcej w trybie high-detail, zajmuje 1–3 sekundy round-trip i wysyła obraz na serwery OpenAI. Vision zwraca wyniki w 100–300 ms lokalnie, bezpłatnie, bez eksfiltracji danych.

Wykrywanie twarzy i punktów charakterystycznych

W Vision dostępne są trzy warstwy analizy twarzy:

  • VNDetectFaceRectanglesRequest zwraca prostokąty graniczne dla każdej twarzy w kadrze.
  • VNDetectFaceLandmarksRequest zwraca strukturalne regiony punktów charakterystycznych dla każdej twarzy (linia żuchwy, usta, oczy, brwi, nos, źrenice), każdy z wieloma punktami kluczowymi.
  • VNDetectFaceCaptureQualityRequest zwraca ocenę jakości używaną przez aplikację Aparat do timingu robienia selfie.

Dla większości aplikacji, które potrzebują znaleźć twarze, przyciąć do twarzy, rozmazać twarze lub policzyć twarze, właściwym narzędziem jest żądanie prostokątów. Dla aplikacji animujących coś względem twarzy użytkownika (filtry, maski, śledzenie) właściwym narzędziem są punkty charakterystyczne plus śledzenie źrenic. Nic z tego nie wymaga pliku modelu ani wywołania sieciowego.

Poza ciała i dłoni

VNDetectHumanBodyPoseRequest zwraca 19 nazwanych stawów z VNHumanBodyPoseObservation.JointName4 (nos, szyja, ramiona, łokcie, nadgarstki, biodra, kolana, kostki, uszy, oczy, root) ze współrzędnymi 2D i pewnością dla każdego stawu. VNDetectHumanBodyPose3DRequest rozszerza topologię do przestrzeni 3D na urządzeniach ze skanerem LiDAR. VNDetectHumanHandPoseRequest zwraca 21 punktów charakterystycznych dłoni w rozdzielczości stawów palców.

Body pose to to, czego aplikacje fitness używają do liczenia powtórzeń bez urządzenia ubieralnego, czego aplikacje AR używają do dołączania wirtualnej zawartości do dłoni użytkownika i czego aplikacje korekty postawy używają do oceny formy. Hand pose napędza rozpoznawanie gestów (użytkownik podnosi dwa palce, aplikacja widzi dwa palce). Oba działają z prędkością 60 fps na Neural Engine współczesnego iPhone’a. Chmurowe odpowiedniki to Google MediaPipe lub własnościowe API z branży fitness, które framework zastępuje.

Kody kreskowe i QR

VNDetectBarcodesRequest odczytuje symbologie potrzebne większości procesów detalicznych i magazynowych (QR, PDF417, Aztec, Code 128, Code 39, EAN-13, ITF14, Data Matrix, GS1 DataBar i inne) i zwraca surowy ładunek wraz z prostokątem granicznym. Detekcja działa w milisekundach i sprawdza się w warunkach słabego oświetlenia, które zostały już zwalidowane przez aplikację Aparat firmy Apple.

Segmentacja dokumentów

VNDetectDocumentSegmentationRequest znajduje prostokątne dokumenty w kadrze i zwraca ich punkty narożne, uwzględniając perspektywę. Z tego żądania korzystają aplikacje skanujące dokumenty, aby przyciąć i wyprostować dokument do płaskiego obrazu. Własny framework VisionKit firmy Apple opakowuje to żądanie wraz z UI, ale leżąca u podstaw operacja jest wywoływalna bezpośrednio, gdy aplikacja potrzebuje niestandardowego UI.

Saliency i estetyka

VNGenerateAttentionBasedSaliencyImageRequest zwraca mapę ciepła obszarów, na których z największym prawdopodobieństwem skupi się uwaga widza. VNGenerateObjectnessBasedSaliencyImageRequest zwraca mapę ciepła z lokalizacjami obiektów. VNCalculateImageAestheticsScoresRequest, dodane jako publiczne API w iOS 181, zwraca oceny jakości estetycznej, w tym klasyfikację użytkową (notatki, zrzuty ekranu) oraz wartość estetyczną. Te oceny są tym, czego Photos używa do podpowiadania kandydatów na „Wspomnienia” oraz tym, co zasila decyzje o automatycznym kadrowaniu.

Klasyfikacja obrazów i osadzenia

VNClassifyImageRequest zwraca top-N etykiet kategorii dla obrazu, używając wbudowanego klasyfikatora (ponad 1000 kategorii z modelu trenowanego na danych w skali sieci). VNGenerateImageFeaturePrintRequest zwraca wektor cech (osadzenie modelu) odpowiedni do wyszukiwania podobieństw obrazów.

Osadzenia są tym, na czym faktycznie opiera się aplikacja Photos, funkcja „znajdź podobne dania” w aplikacji z przepisami albo deduplikacja przez podobieństwo w aplikacji moodboardowej. Chmurowy odpowiednik to osadzenia OpenAI CLIP lub Google Vertex AI; Vision zwraca je lokalnie i bezpłatnie.

Śledzenie obiektów i trajektorie

VNDetectTrajectoriesRequest śledzi poruszające się obiekty pomiędzy klatkami i zwraca dopasowania trajektorii parabolicznych (rzucona piłka, wystrzelona strzała). VNTrackObjectRequest podąża za ręcznie ograniczonym obiektem przez sekwencję wideo.

Trajektorie to leżący u podstaw prymityw dla aplikacji sportowych (śledzenie piłki baseballowej, koszykówkowej, tenisowej). Detekcja działa na strumieniu AVFoundation na żywo i zwraca wyniki w czasie rzeczywistym.

Modele niestandardowe przez VNCoreMLRequest

VNCoreMLRequest uruchamia dowolny model Core ML w potoku Vision. Żądanie obsługuje preprocessing (zmiana rozmiaru obrazu, konwersja przestrzeni barw, normalizacja) automatycznie na podstawie opisu wejścia modelu. Aplikacja trenuje niestandardowy klasyfikator w Create ML (kilka kategorii, sto przykładowych obrazów na kategorię, dziesięć minut treningu) lub pobiera opublikowany model, umieszcza .mlpackage w pakiecie aplikacji i uruchamia go przez Vision trzema linijkami kodu.

let model = try VNCoreMLModel(for: MyClassifier(configuration: .init()).model)
let request = VNCoreMLRequest(model: model) { request, error in
    let results = request.results as? [VNClassificationObservation]
    print(results?.first?.identifier, results?.first?.confidence)
}
let handler = VNImageRequestHandler(cgImage: image, options: [:])
try handler.perform([request])

Chmurowy odpowiednik dla niestandardowego klasyfikatora to hostowanie modelu na serwerze, opłacanie mocy obliczeniowej do wnioskowania, zarządzanie API i akceptowanie opóźnienia sieciowego. Vision zamienia to w .mlpackage w pakiecie aplikacji oraz handler żądania.

Gdzie chmurowe API rzeczywiście wygrywają

Terytorium Vision to operacje na poziomie pikseli: znajdź tę rzecz, sklasyfikuj ten obraz, rozpoznaj ten tekst. Framework nie zapewnia złożonego rozumowania semantycznego nad znaczeniem obrazu. Trzy przypadki, w których chmurowe API są właściwym wyborem:

Rozumienie multimodalnego LLM. „Co ta osoba robi na tym obrazie?” „Czy ten wykres wprowadza w błąd?” „Przetłumacz to menu i powiedz, które pozycje są wegetariańskie.” Żadne z tych pytań nie jest na poziomie pikseli. Wymagają one dużego modelu multimodalnego, który połączy percepcję wzrokową z wiedzą o świecie i językiem. Apple Foundation Models (LLM na urządzeniu, omówiony w Foundation Models on-device LLM) zaczyna obsługiwać część z tego na urządzeniu, ale w przypadku złożonego rozumowania GPT-4o, Claude Sonnet lub Gemini wciąż wygrywają.

Jednorazowe niestandardowe zadania bez danych treningowych. Model klasyfikacyjny Vision jest stały; niestandardowe modele Core ML wymagają danych treningowych. Multimodalny LLM potrafi odpowiedzieć „czy to zdjęcie kota w muszce?” bez jednego oznaczonego przykładu treningowego. Do prototypowania lub jednorazowych zadań, gdzie zbieranie danych treningowych jest zbyt kosztowne, chmurowe LLM są właściwym narzędziem.

Inteligencja dokumentów wykraczająca poza OCR. OCR z Vision zwraca tekst. API inteligencji dokumentowej (AWS Textract, Google Document AI, Azure Form Recognizer) zwraca strukturalne pola: numer faktury, datę, pozycje, sumy. Wartość dodaną stanowi strukturyzacja, a nie sam OCR. W przypadku wartościowych przepływów pracy z dokumentami chmurowe API zazwyczaj są właściwym wyborem; do „odczytaj ten paragon i zrzuć tekst” — Vision.

Wzorzec: chmura wygrywa w rozumowaniu i w wysoce wyspecjalizowanych wertykalnych API; Vision wygrywa w prymitywach percepcji.

Uczciwe porównanie opóźnień i kosztów

Reprezentatywny potok wnioskowania działający na iPhone 16 Pro (chip A18 Pro):

Operacja Vision (na urządzeniu) OpenAI Vision API AWS Rekognition
OCR (paragon 1 strona) 150–300 ms 1–3 s round-trip + koszt za obraz 200–500 ms + koszt za obraz
Wykrywanie twarzy (1 klatka) 5–15 ms 1–2 s + koszt 100–300 ms + koszt
Body pose (60 fps na żywo) <16 ms nie w czasie rzeczywistym nie w czasie rzeczywistym
Osadzenie obrazu 20–40 ms 200–500 ms + koszt nie oferowane bezpośrednio
Klasyfikator niestandardowy zależy od rozmiaru modelu wymaga modelu hostowanego wymaga modelu hostowanego

Powyższe liczby pochodzą z publicznych benchmarków Apple oraz pomiarów raportowanych przez deweloperów; istotny jest rząd wielkości, a nie dokładna wartość. Przewagi Vision leżą w koszcie (zero za wywołanie), w opóźnieniu w ogonie rozkładu (brak jittera sieciowego) i w prywatności (dane nigdy nie opuszczają urządzenia).

Koszt narasta, gdy aplikacja wywołuje operacje Vision często. Aplikacja do edycji zdjęć przetwarzająca 100 obrazów na sesję kosztuje rzędu dolarów na sesję przez chmurowe API i zero przez Vision.

Powiązanie z agentowym przepływem pracy

Vision elegancko łączy się z dwoma pomysłami z klastra, które już zostały dostarczone:

Narzędzia App Intents dla Apple Intelligence. Gdy aplikacja udostępnia funkcję „Znajdź twarze na moich zdjęciach” lub „Odczytaj tekst ze zrzutu ekranu” przez AppIntent, metoda perform tego intentu uruchamia Vision lokalnie i zwraca strukturalny wynik. Orkiestrator Apple Intelligence może wywołać intent bez wysyłania zdjęcia użytkownika na serwer. Wpis o App Intents opisuje kontrakt powierzchniowy.

Foundation Models LLM na urządzeniu. Potok, który potrzebuje zarówno percepcji, jak i rozumowania, najpierw uruchamia Vision (wyodrębnij tekst, znajdź twarze, zlokalizuj obiekty), a następnie Foundation Models (wnioskuj o tym, co znaleziono, wygeneruj podsumowanie). Oba etapy działają na urządzeniu. Łączna liczba wywołań sieciowych: zero. Wpis o Foundation Models wyjaśnia, jak wywołać LLM; ten wpis dowodzi, że Vision jest tym, co go zasila bez chmurowego roundtripa.

let textRequest = VNRecognizeTextRequest()
textRequest.recognitionLevel = .accurate

let handler = VNImageRequestHandler(cgImage: receiptImage, options: [:])
try handler.perform([textRequest])

let extractedText = (textRequest.results ?? [])
    .compactMap { ($0 as? VNRecognizedTextObservation)?.topCandidates(1).first?.string }
    .joined(separator: "\n")

let llmResponse = await foundationModel.generate(
    "Summarize this receipt as JSON with merchant, total, and date fields:\n\(extractedText)"
)

Cały potok działa na urządzeniu. Brak klucza API. Brak wywołania sieciowego. Brak ekspozycji danych dla zewnętrznych firm.

Co dojrzało w ciągu ostatnich dwóch wydań

Trzy dodatki warte wymienienia, z konserwatywną datą względem notatek wydawniczych Apple2:

Ocena estetyki jako publiczne API (iOS 18). VNCalculateImageAestheticsScoresRequest zwraca oceny obejmujące klasyfikację użytkową i wartość estetyczną, zastępując to, co aplikacje kuratorskie do zdjęć musiały wcześniej aproksymować niestandardowymi modelami Core ML.

Ulepszony wielojęzyczny OCR. VNRecognizeTextRequest rozszerzył obsługę pism nielatyńskich w ostatnich wydaniach, zawężając lukę względem chmurowych usług OCR, które historycznie miały silniejsze pokrycie wielojęzyczne. Dokumentacja rozpoznawania tekstu Apple zawiera bieżącą listę obsługiwanych języków3.

Segmentacja dokumentów z integracją VisionKit. VNDetectDocumentSegmentationRequest znajduje prostokątne dokumenty i zwraca punkty narożne; DataScannerViewController z VisionKit opakowuje to żądanie zaprojektowanym UI do skanowania dokumentów na żywo.

Sztandarowe możliwości frameworka (twarze, tekst, poza, kody kreskowe, osadzenia) są dojrzałe od kilku wydań iOS. Wzorzec: rozszerzaj, nie wymyślaj na nowo.

Dlaczego większość deweloperów pomija Vision

Trzy powody, dla których framework jest pomijany pomimo jasnych argumentów za nim:

Nawyk cloud-first. Większość współczesnego rozwoju AI odbywa się najpierw względem chmurowych API. Deweloperzy wiedzą, jak wywołać OpenAI; powierzchnia VNRecognizeTextRequest plus VNImageRequestHandler plus VNRecognizedTextObservation sprawia wrażenie kolejnego API do nauczenia się — choć w praktyce sprowadza się to do mniejszej liczby linii kodu.

Błędna ocena możliwości. Deweloperzy, którzy ostatnio nie sprawdzali frameworka, zakładają, że obejmuje on tylko OCR i kody kreskowe. Lista kategorii powyżej zawiera ponad tuzin możliwości, z których kilka nie ma chmurowego odpowiednika, a kilka dorównuje komercyjnym API bez kosztu.

Rozjazd między prototypem a produkcją. Chmurowe API wygrywają we wczesnym prototypowaniu (jedno polecenie curl, by uzyskać wynik), a prototyp zostaje przekształcony w potok produkcyjny bez ponownej oceny. Właściwym posunięciem jest prototypować tym, co najszybsze, a po uformowaniu się rzeczywistego procesu — ponownie ocenić warstwę percepcji.

Rozwiązaniem nie jest odmawianie chmurowych API; rozwiązaniem jest wiedzieć, co zawiera platforma, aby wybór był rzeczywisty.

Co ten wzorzec oznacza dla aplikacji iOS 26+

Trzy wnioski.

  1. W przypadku prymitywów percepcji domyślnie używaj Vision. Znajdź twarze, odczytaj tekst, wykryj kody kreskowe, uruchom estymację pozy, pobierz osadzenia obrazu. Framework działa w mikrosekundach na Neural Engine, kosztuje zero, nie pozostawia śladu danych u zewnętrznych firm. Dla operacji CV na poziomie pikseli framework jest właściwym punktem startowym.

  2. Używaj chmurowych API do rozumowania, nie do percepcji. Multimodalny LLM rozumiejący znaczenie obrazu, wertykalne API inteligencji dokumentowej wyodrębniające pola strukturalne, jednorazowe niestandardowe zadanie bez danych treningowych. To są terytoria chmury; oddanie ich chmurze jest słuszne.

  3. Łącz Vision z Foundation Models, by uzyskać pełne potoki na urządzeniu. Percepcja (Vision) zasila rozumowanie (LLM na urządzeniu). Potok działa lokalnie od początku do końca, bez kluczy API, bez jittera sieciowego i bez telemetrii opuszczającej urządzenie. Wpis Foundation Models post z klastra omawia połowę dotyczącą LLM; Vision to połowa wejściowa.

Pełny klaster Apple Ecosystem: typowane App Intents; serwery MCP; pytanie o routing; Foundation Models; rozróżnienie między LLM runtime a tooling; trzy powierzchnie; wzorzec single source of truth; Two MCP Servers; hooki dla rozwoju Apple; Live Activities; kontrakt runtime watchOS; wnętrze SwiftUI; model mentalny przestrzeni RealityKit; dyscyplina schematu SwiftData; wzorce Liquid Glass; wieloplatformowe wydawanie; macierz platform; o czym odmawiam pisać. Hub znajduje się w Apple Ecosystem Series. Szerszy kontekst iOS-z-agentami-AI omawia iOS Agent Development guide.

FAQ

Jaka jest różnica między Apple Vision a visionOS?

Vision framework to działające na urządzeniu API computer vision dla iOS, macOS i visionOS. visionOS to system operacyjny dla Apple Vision Pro. Nakładanie się nazewnictwa jest niefortunne. Vision (framework) działa na każdym współczesnym urządzeniu Apple; visionOS (system) działa konkretnie na sprzęcie Vision Pro.

Kiedy używać Vision zamiast OpenAI Vision API lub Google Cloud Vision?

W zadaniach percepcji na poziomie pikseli (znajdź twarze, odczytaj tekst, wykryj obiekty, policz elementy, oszacuj pozę, wygeneruj osadzenia obrazu) Vision niemal zawsze jest właściwym wyborem. Działa w milisekundach, nie kosztuje nic za wnioskowanie i utrzymuje dane użytkownika na urządzeniu. Chmurowe API są właściwe, gdy zadanie wymaga złożonego rozumowania semantycznego nad znaczeniem obrazu lub gdy wertykalne API inteligencji dokumentowej dostarcza pól strukturalnych wykraczających poza ekstrakcję tekstu.

Czy mogę uruchomić własny model Core ML przez Vision?

Tak. VNCoreMLRequest opakowuje dowolny model Core ML i obsługuje preprocessing automatycznie. Wystarczy umieścić plik .mlpackage w pakiecie aplikacji, zinstancjonować model, opakować go w VNCoreMLModel i uruchomić przez handler żądania. Ten sam handler może uruchamiać wiele żądań równolegle, w tym wbudowane żądania Vision i niestandardowy model Core ML.

Jak działa dyspozytor Vision na Apple Silicon?

Vision (i modele Core ML, które uruchamia) automatycznie kieruje obliczenia na Neural Engine, gdy jest dostępny, wraca do GPU, gdy nie jest, a w ostateczności do CPU. Framework wybiera najszybszą ścieżkę dla danego urządzenia i operacji. Dla większości współczesnych iPhone’ów (A12 Bionic i nowszych) Neural Engine obsługuje większość wnioskowania; deweloper nie konfiguruje dyspozytorowania ręcznie.

Co zostało dodane ostatnio?

Konserwatywne podsumowanie, datowane względem notatek wydawniczych Apple: VNCalculateImageAestheticsScoresRequest został dodany jako publiczne API w iOS 18; VNRecognizeTextRequest rozszerzył obsługę wielojęzyczną w ostatnich wydaniach; DataScannerViewController z VisionKit opakowuje skanowanie dokumentów w zaprojektowane UI. Sztandarowe możliwości (tekst, twarze, poza, kody kreskowe, osadzenia) są dojrzałe od kilku wydań iOS.

Bibliografia


  1. Apple Developer Documentation: VNCalculateImageAestheticsScoresRequest, wprowadzone w iOS 18.0+. 

  2. Apple Developer Documentation: Vision framework, referencja dla dostępnych żądań i dostępności na platformach. 

  3. Apple Developer Documentation: Recognizing Text in Images, obsługiwane języki rozpoznawania według wywołania API. 

  4. Apple Developer Documentation: VNHumanBodyPoseObservation.JointName, wyliczone nazwy stawów zwracane przez żądania pozy ciała 2D. 

Powiązane artykuły

Core ML On-Device Inference: The Patterns That Actually Ship

Core ML runs models on Neural Engine, GPU, or CPU. The patterns that ship: model conversion, dispatch hinting, latency b…

13 min czytania

What SwiftUI Is Made Of

SwiftUI is a result-builder DSL on top of a value-typed View tree. Once the substrate is visible, AnyView, Group, and Vi…

17 min czytania

Building AI Systems: From RAG to Agents

I built a 3,500-line agent system with 86 hooks and consensus validation. Here's what I learned about RAG, fine-tuning, …

13 min czytania