Apple Vision Framework: CV na urządzeniu, którą większość deweloperów pomija
Framework Vision od Apple, ten bez sufiksu „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 w zadaniach, które framework wykonuje w milisekundach na Neural Engine urządzenia. Ten domyślny wybór odzwierciedla raczej uprzedzenie niż rzetelną ocenę: chmurowe API wydają się „nowoczesnym AI”, a Vision wydaje się „instalacją hydrauliczną platformy”, więc platforma zostaje pominięta. To uprzedzenie błędnie odczytuje to, co platforma obecnie zawiera.
Vision to framework CV typu local-first. Działa na Neural Engine, gdy jest on dostępny, na GPU w przeciwnym razie, a w ostateczności na CPU. Inferencja zachodzi w ciągu kilku milisekund dla większości operacji. Framework nie generuje kosztów per wywołanie. Dane nigdy nie opuszczają urządzenia. Klucz API nie istnieje, ponieważ żadne API nie istnieje. Dla większości zadań computer vision, jakie wykonuje aplikacja 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, odczytywanie kodów kreskowych, segmentację dokumentów, osadzenia obrazów (embeddings), saliency, wykrywanie zwierząt, kontury, trajektorie, optical flow oraz uruchamianie dowolnego modelu Core ML.
- Każda operacja wykonuje się w milisekundach na Neural Engine, nie generuje kosztów per wywołanie, nie wymaga sieci i nie produkuje telemetrii do podmiotów trzecich.
- Chmurowe API wygrywają w jednym konkretnym przypadku: złożone rozumowanie semantyczne na temat obrazu (multimodalny LLM rozumiejący wykres, mem lub intencję dokumentu). Dla operacji na poziomie pikseli (znajdź twarze, odczytaj tekst, wykryj dłoń) Vision wygrywa pod względem kosztu, opóźnień i prywatności.
- Powiązanie z agent-workflow: wyniki Vision zasilają App Intents oraz wywołania Foundation Models LLM na urządzeniu bez konieczności wykonywania żądań sieciowych. Cały pipeline działa lokalnie.
Co faktycznie zawiera Vision
Vision grupuje swoje operacje jako typy VNRequest. Żądanie zostaje utworzone, skonfigurowane parametrami, podane mu zostaje obraz (lub CVPixelBuffer, CIImage, CGImage bądź URL) i uruchomione. Wyniki wracają jako obserwacje dołączone do żądania. Poniższe kategorie pokrywają 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), podpowiedzi językowe, niestandardowe listy słów oraz pewność (confidence) dla bounding boxów. Ścieżka .accurate w iOS 18+ dobrze radzi sobie z drukowanym tekstem na paragonach, oznaczeniach i dokumentach; rozpoznawanie pisma odręcznego jest obsługiwane w podzbiorze języków (zob. listę języków rozpoznawania Apple3).
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 wykonana przez OpenAI Vision API kosztuje około ułamka centa za wywołanie w trybie low-detail i znacznie więcej w trybie high-detail, zajmuje 1–3 sekundy w podróży tam i z powrotem oraz wysyła obraz na serwery OpenAI. Vision zwraca wyniki w 100–300 ms lokalnie, bezpłatnie, bez wycieku danych.
Wykrywanie twarzy i punktów charakterystycznych
W Vision dostępne są trzy warstwy analizy twarzy:
VNDetectFaceRectanglesRequestzwraca bounding boxy dla każdej twarzy w kadrze.VNDetectFaceLandmarksRequestzwraca strukturalne regiony punktów charakterystycznych dla każdej twarzy (linia szczęki, usta, oczy, brwi, nos, źrenice), każdy z wieloma keypointami.VNDetectFaceCaptureQualityRequestzwraca dla każdej twarzy ocenę jakości (0–1) odzwierciedlającą oświetlenie, ostrość i wycentrowanie. Aplikacje mogą jej używać do bramkowania robienia selfie lub automatycznego wyboru najlepszej klatki z serii.
Dla większości aplikacji, które potrzebują znaleźć twarze, przyciąć do twarzy, rozmyć twarze lub policzyć twarze, żądanie z prostokątami jest właściwym narzędziem. Dla aplikacji, które animują coś względem twarzy użytkownika (filtry, maski, śledzenie), punkty charakterystyczne plus śledzenie źrenic są właściwym narzędziem. 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, barki, łokcie, nadgarstki, biodra, kolana, kostki, uszy, oczy, root) ze współrzędnymi 2D i pewnością dla każdego stawu. VNDetectHumanBodyPose3DRequest rozszerza topologię w przestrzeń 3D, zwracając wyniki VNHumanBodyPose3DObservation; żądanie korzysta z danych głębi (AVDepthData), gdy urządzenie je udostępnia, w celu poprawy dokładności, ale nie wymaga skanera LiDAR.4 VNDetectHumanHandPoseRequest zwraca 21 punktów charakterystycznych dłoni w rozdzielczości stawów palców.
Pose ciała to to, czego aplikacje fitness używają do liczenia powtórzeń bez wearable, czego aplikacje AR używają do dołączania wirtualnej zawartości do dłoni użytkownika i czego aplikacje do oceny postawy używają do oceny formy. Pose dłoni napędza rozpoznawanie gestów (użytkownik podnosi dwa palce, aplikacja widzi dwa palce). Oba mogą działać z prędkością klatek wideo na nowszych iPhone’ach, co wystarcza do AR na żywo i wprowadzania gestów. Chmurowe odpowiedniki to Google MediaPipe lub własnościowe API technologii fitness, które framework zastępuje.
Kody kreskowe i QR
VNDetectBarcodesRequest odczytuje symbologie potrzebne większości procesów handlu detalicznego i zarządzania zapasami (QR, PDF417, Aztec, Code 128, Code 39, EAN-13, ITF14, Data Matrix, GS1 DataBar i inne) i zwraca surowy ładunek wraz z prostokątem ograniczającym. Wykrywanie wykonuje się w milisekundach i działa w warunkach słabego oświetlenia, co aplikacja Aparat firmy Apple już zwalidowała.
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 skanerów dokumentów do przycinania i prostowania dokumentu do płaskiego obrazu. Własny framework VisionKit firmy Apple opakowuje to żądanie wraz z UI, ale operacja bazowa jest wywoływalna bezpośrednio, gdy aplikacja potrzebuje niestandardowego UI.
Saliency i estetyka
VNGenerateAttentionBasedSaliencyImageRequest zwraca mapę cieplną pokazującą, gdzie najprawdopodobniej skupi się uwaga widza w obrazie. VNGenerateObjectnessBasedSaliencyImageRequest zwraca mapę cieplną lokalizacji obiektów. VNCalculateImageAestheticsScoresRequest, dodane jako publiczne API w iOS 181, zwraca oceny jakości estetycznej, w tym klasyfikację użyteczności (notatki, zrzuty ekranu) oraz wartość estetyczną. Te oceny są tym, czego Photos używa do wydobywania kandydatów na „Wspomnienia” oraz tym, co zasila decyzje automatycznego kadrowania.
Klasyfikacja obrazów i osadzenia
VNClassifyImageRequest zwraca top-N etykiet kategorii dla obrazu, używając wbudowanego klasyfikatora obejmującego setki popularnych kategorii obiektów.5 VNGenerateImageFeaturePrintRequest zwraca wektor cech (osadzenie modelu) odpowiedni do wyszukiwania podobieństwa obrazów.
Osadzenia to mechanizm, dzięki któremu aplikacja Photos, funkcja „znajdź podobne dania” w aplikacji z przepisami albo deduplikacja przez podobieństwo w aplikacji moodboard faktycznie działają. Chmurowy odpowiednik to osadzenia OpenAI CLIP lub Vertex AI od Google; Vision zwraca je lokalnie i bezpłatnie.
Śledzenie obiektów i trajektorie
VNDetectTrajectoriesRequest śledzi poruszające się obiekty między klatkami i zwraca dopasowania trajektorii parabolicznej (rzucona piłka, wystrzelona strzała). VNTrackObjectRequest podąża za obiektem ograniczonym ręcznie przez sekwencję wideo.
Trajektorie to bazowy prymityw dla aplikacji sportowych (śledzenie piłki baseballowej, koszykówkowej, tenisowej). Wykrywanie działa na strumieniu AVFoundation na żywo i zwraca wyniki w czasie rzeczywistym.
Niestandardowe modele przez VNCoreMLRequest
VNCoreMLRequest uruchamia dowolny model Core ML poprzez pipeline Vision. Żądanie automatycznie obsługuje wstępne przetwarzanie (zmiana rozmiaru obrazu, konwersja przestrzeni barw, normalizacja) na podstawie opisu wejścia modelu. Aplikacja trenuje niestandardowy klasyfikator w Create ML (garść kategorii, sto przykładowych obrazów na kategorię, dziesięć minut treningu) lub pobiera opublikowany model, umieszcza .mlpackage w bundlu 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, płacenie za moc obliczeniową inferencji, zarządzanie API i akceptowanie opóźnień sieciowych. Vision zamienia to w .mlpackage w bundlu aplikacji oraz w request handler.
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 dania są wegetariańskie.” Żadne z tych pytań nie dotyczy poziomu pikseli. Wymagają one dużego modelu multimodalnego, który łączy percepcję wizualną z wiedzą o świecie i językiem. Foundation Models firmy Apple (LLM na urządzeniu, omówione w Foundation Models on-device LLM) zaczyna obsługiwać część tych zadań na urządzeniu, ale dla złożonego rozumowania nadal wygrywają GPT-4o, Claude Sonnet czy Gemini.
Jednorazowe niestandardowe zadania bez danych treningowych. Model klasyfikacji w Vision jest stały; niestandardowe modele Core ML wymagają danych treningowych. Multimodalny LLM może odpowiedzieć „czy to zdjęcie kota w muszce?” bez widzenia ani 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 w Vision zwraca tekst. API inteligencji dokumentów (AWS Textract, Google Document AI, Azure Form Recognizer) zwraca strukturalne pola: numer faktury, datę, pozycje, sumy. To właśnie strukturyzacja stanowi wartość dodaną, a nie samo OCR. Dla wartościowych workflow dokumentów chmurowe API są zwykle właściwe; dla „odczytaj ten paragon i wyrzuć 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 pipeline inferencji uruchomiony 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 w obie strony + koszt za obraz | 200–500 ms + koszt za obraz |
| Wykrywanie twarzy (1 klatka) | 5–15 ms | 1–2 s + koszt | 100–300 ms + koszt |
| Pose ciała (live 60 fps) | <16 ms | nie w czasie rzeczywistym | nie w czasie rzeczywistym |
| Osadzenie obrazu | 20–40 ms | 200–500 ms + koszt | brak bezpośrednio dostępnej oferty |
| Niestandardowy klasyfikator | zależy od rozmiaru modelu | wymaga hostowanego modelu | wymaga hostowanego modelu |
Powyższe liczby pochodzą z publicznych benchmarków Apple oraz pomiarów raportowanych przez deweloperów; przekaz dotyczy rzędu wielkości, a nie dokładnej wartości. Przewagi Vision leżą w koszcie (zero per wywołanie), w opóźnieniu ogonowym (brak jitteru sieci) i w prywatności (dane nigdy nie opuszczają urządzenia).
Koszt narasta, gdy aplikacja często wywołuje operacje wizyjne. Aplikacja do edycji zdjęć przetwarzająca 100 obrazów na sesję kosztuje rzędu dolarów za sesję przy chmurowych API i zero przy Vision.
Powiązanie z agent-workflow
Vision elegancko łączy się z dwoma już opublikowanymi koncepcjami klastra:
App Intents jako narzędzia dla Apple Intelligence. Gdy aplikacja udostępnia funkcję typu „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. Orchestrator Apple Intelligence może wywołać intent bez wysyłania zdjęcia użytkownika na serwer. Wpis o App Intents omawia kontrakt powierzchniowy.
Foundation Models LLM na urządzeniu. Pipeline, który potrzebuje zarówno percepcji, jak i rozumowania, najpierw uruchamia Vision (wyodrębnij tekst, znajdź twarze, zlokalizuj obiekty), a następnie Foundation Models (rozumuj 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ływać LLM; ten wpis dowodzi, że to Vision zasila go bez chmurowej podróży.
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 pipeline działa na urządzeniu. Brak klucza API. Brak wywołań sieciowych. Brak ekspozycji danych podmiotom trzecim.
Co dojrzało w ciągu ostatnich dwóch wydań
Trzy uzupełnienia warte wymienienia, z konserwatywnym datowaniem względem notek wydania Apple2:
Ocena estetyki jako publiczne API (iOS 18). VNCalculateImageAestheticsScoresRequest zwraca oceny obejmujące klasyfikację użyteczności i wartość estetyczną, zastępując to, co aplikacje do kuracji zdjęć wcześniej musiały aproksymować niestandardowymi modelami Core ML.
Ulepszone wielojęzyczne OCR. VNRecognizeTextRequest rozszerzyło wsparcie dla pism niełacińskich w ostatnich wydaniach, zawężając lukę względem chmurowych usług OCR, które historycznie miały silniejsze pokrycie wielojęzyczne. Dokumentacja Apple dotycząca rozpoznawania tekstu wymienia obecnie wspierane języki3.
Segmentacja dokumentów z integracją VisionKit. VNDetectDocumentSegmentationRequest znajduje prostokątne dokumenty i zwraca punkty narożne; VNDocumentCameraViewController z VisionKit opakowuje przechwytywanie dokumentów w zaprojektowane UI dla użytkowników, podczas gdy DataScannerViewController (iOS 16+) pokrywa skanowanie tekstu na żywo i kodów odczytywanych maszynowo.6
Najważniejsze możliwości frameworka (twarz, tekst, pose, kod kreskowy, osadzenia) są dojrzałe od kilku wydań iOS. Wzorzec: rozszerzaj, a nie wymyślaj na nowo.
Dlaczego większość deweloperów pomija Vision
Trzy powody, dla których framework jest pomijany, mimo że argumentacja jest jasna:
Nawyk cloud-first. Większość nowoczesnego rozwoju AI odbywa się najpierw na chmurowych API. Deweloperzy wiedzą, jak wywołać OpenAI; powierzchnia VNRecognizeTextRequest plus VNImageRequestHandler plus VNRecognizedTextObservation wydaje się być większym API do nauczenia, podczas gdy w przeliczeniu na linie kodu jest to mniej linii niż wywołanie OpenAI Vision (brak auth, brak HTTP, brak retry, brak parsowania JSON).
Błędna ocena możliwości. Deweloperzy, którzy nie sprawdzili frameworka od dłuższego czasu, zakładają, że obejmuje on jedynie OCR i kody kreskowe. Powyższa lista kategorii obejmuje ponad dwa tuziny możliwości, z których kilka nie ma chmurowo-natywnego odpowiednika, a kilka dorównuje komercyjnym API bez ich kosztu.
Rozbieżność prototyp vs produkcja. Chmurowe API wygrywają we wczesnym prototypowaniu (jedno polecenie curl, by uzyskać wynik), a prototyp zostaje przekształcony w pipeline produkcyjny bez ponownej oceny. Właściwy ruch to prototypowanie tym, co najszybsze, i ponowna ocena warstwy percepcji, gdy workflow staje się rzeczywisty.
Rozwiązaniem nie jest odmawianie korzystania z chmurowych API; rozwiązaniem jest wiedza o tym, co zawiera platforma, aby wybór był prawdziwy.
Co ten wzorzec oznacza dla aplikacji iOS 26+
Trzy wnioski.
-
Domyślnie używaj Vision do prymitywów percepcji. Znajdź twarze, odczytaj tekst, wykryj kody kreskowe, uruchom estymację pozy, uzyskaj osadzenia obrazu. Framework działa w milisekundach na Neural Engine, kosztuje zero, nie pozostawia śladu danych u podmiotów trzecich. Dla operacji CV na poziomie pikseli framework jest właściwym punktem wyjścia.
-
Używaj chmurowych API do rozumowania, nie do percepcji. Multimodalny LLM rozumiejący znaczenie obrazu, wertykalne API inteligencji dokumentów wyodrębniające strukturalne pola, jednorazowe niestandardowe zadanie bez danych treningowych. To terytorium chmury; oddanie go chmurze jest słuszne.
-
Łącz Vision z Foundation Models, by uzyskać pełne pipeline’y na urządzeniu. Percepcja (Vision) zasila rozumowanie (LLM na urządzeniu). Pipeline działa lokalnie od początku do końca, bez kluczy API, bez jitteru sieci i bez telemetrii opuszczającej urządzenie. Wpis o Foundation Models z klastra omawia połowę z LLM; Vision to połowa wejściowa.
Pełny klaster Apple Ecosystem: typowane App Intents; serwery MCP; pytanie o routing; Foundation Models; rozróżnienie LLM runtime vs tooling; trzy powierzchnie; wzorzec single source of truth; Dwa serwery MCP; hooki dla rozwoju Apple; Live Activities; runtime watchOS; wnętrze SwiftUI; model mentalny przestrzenny RealityKit; dyscyplina schematów SwiftData; wzorce Liquid Glass; wysyłka multi-platform; matryca platform; o czym odmawiam pisać. Hub znajduje się w serii Apple Ecosystem. Szerszy kontekst iOS z agentami AI omawia przewodnik iOS Agent Development.
FAQ
Jaka jest różnica między Apple Vision a visionOS?
Framework Vision to API computer vision na urządzeniu dla iOS, macOS i visionOS. visionOS to system operacyjny dla Apple Vision Pro. Pokrywanie się nazewnictwa jest niefortunne. Vision (framework) działa na każdym nowoczesnym urządzeniu Apple; visionOS (system operacyjny) działa konkretnie na sprzęcie Vision Pro.
Kiedy używać Vision zamiast OpenAI Vision API lub Google Cloud Vision?
Dla zadań percepcji na poziomie pikseli (znajdź twarze, odczytaj tekst, wykryj obiekty, policz elementy, oszacuj pose, wygeneruj osadzenia obrazu) Vision jest niemal zawsze właściwym wyborem. Działa w milisekundach, nie generuje kosztów per inferencja 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 dokumentów dostarcza strukturalnych pól wykraczających poza ekstrakcję tekstu.
Czy mogę uruchomić własny model Core ML przez Vision?
Tak. VNCoreMLRequest opakowuje dowolny model Core ML i automatycznie obsługuje wstępne przetwarzanie. Wystarczy umieścić plik .mlpackage w bundlu aplikacji, utworzyć instancję modelu, opakować go w VNCoreMLModel i uruchomić przez request handler. Ten sam handler może uruchamiać wiele żądań równolegle, w tym wbudowane żądania Vision oraz niestandardowy model Core ML.
Jak działa dispatch Vision na Apple Silicon?
Vision (oraz modele Core ML, które uruchamia) automatycznie rozsyła zadania do Neural Engine, gdy jest on dostępny, w razie jego braku przechodzi na GPU, a w ostateczności na CPU. Framework wybiera najszybszą ścieżkę dla urządzenia i operacji. Dla większości nowoczesnych iPhone’ów (A12 Bionic i nowsze) Neural Engine obsługuje większość inferencji; deweloper nie konfiguruje dispatchu ręcznie.
Co nowego w iOS 18 i iOS 26?
Konserwatywne podsumowanie, datowane względem notek wydania Apple: VNCalculateImageAestheticsScoresRequest zostało dodane jako publiczne API w iOS 18; VNRecognizeTextRequest rozszerzyło wsparcie wielojęzyczne w ostatnich wydaniach; DataScannerViewController z VisionKit (iOS 16+) pokrywa tekst na żywo i kody odczytywane maszynowo, podczas gdy VNDocumentCameraViewController pokrywa przechwytywanie dokumentów. Najważniejsze możliwości (tekst, twarz, pose, kody kreskowe, osadzenia) są dojrzałe od kilku wydań iOS.
Bibliografia
-
Apple Developer Documentation:
VNCalculateImageAestheticsScoresRequest, wprowadzone w iOS 18.0+. ↩ -
Apple Developer Documentation: Vision framework, referencja dostępnych żądań i dostępności platform. ↩
-
Apple Developer Documentation: Recognizing Text in Images oraz
VNRecognizeTextRequest, wspierane języki rozpoznawania. ↩↩ -
Apple Developer Documentation:
VNDetectHumanBodyPose3DRequestorazVNHumanBodyPoseObservation.JointName. Pose 3D ciała korzysta zAVDepthData, gdy urządzenie je udostępnia; LiDAR nie jest wymagany. ↩↩ -
Apple Developer Documentation:
VNClassifyImageRequestorazknownClassifications(forRevision:)dla zestawu etykiet runtime. ↩ -
Apple Developer Documentation:
DataScannerViewController(iOS 16+, skanuje tekst na żywo i kody odczytywane maszynowo) orazVNDocumentCameraViewController(przechwytywanie dokumentów). ↩