Vision: framework wizji komputerowej w iOS

Autor: IT Sectr Opublikowano: 2026-07-19 Czas czytania: 9 min

Vision „ to framework wizji komputerowej od Apple, po raz pierwszy przedstawiony w iOS 11 w 2017 roku. Vision dostarcza gotowe algorytmy do detekcji twarzy, rozpoznawania tekstu (OCR), wykrywania kodów kreskowych, śledzenia obiektów, klasyfikacji obrazów i analizy konturów „ wszystko wykonywane na urządzeniu z użyciem Neural Engine. Według danych Apple WWDC 2023, Vision jest używany w standardowej aplikacji „Zdjęcia" do rozpoznawania twarzy oraz w „Aparacie" do detekcji tekstu w czasie rzeczywistym na iPhone i iPad.

Najważniejsze

  • Vision „ on-device framework wizji komputerowej Apple z pełnym cyklem analizy na urządzeniu.
  • Obsługuje detekcję twarzy, rozpoznawanie tekstu (OCR), kody kreskowe, klasyfikację i śledzenie obiektów.
  • Działa przez jednolity mechanizm VNRequest „ zapytania do obrazu lub strumienia wideo.
  • Integruje się z Core ML dla niestandardowych modeli przez VNCoreMLRequest.
  • Framework zoptymalizowany pod Neural Engine na układach A12+ dla czasu rzeczywistego.

Czym jest Vision w iOS?

Vision „ to wysokopoziomowy framework wizji komputerowej, który abstrahuje złożone algorytmy uczenia maszynowego za prostym API zapytań (VNRequest). Deweloper nie musi znać się na splotowych sieciach neuronowych „ wystarczy utworzyć zapytanie odpowiedniego typu, przekazać obraz i otrzymać wynik.

Architektura Vision opiera się na zasadzie Request → Handler → Result: VNImageRequestHandler przyjmuje obraz, wykonuje VNRequest i zwraca tablicę VNObservation z wynikami. Pozwala to łączyć wiele zapytań do jednego obrazu „ na przykład jednocześnie wykryć twarze i tekst na zdjęciu.

Vision obsługuje iOS 11+ i macOS 10.13+. Do przyspieszenia sprzętowego przez Neural Engine wymagany jest układ A12 Bionic lub nowszy. Na urządzeniach z A17 Pro i serią M Vision przetwarza do 60 klatek na sekundę dla strumieniowego wideo.

Kluczowa zaleta Vision „ pełna poufność: wszystkie obliczenia są wykonywane na urządzeniu, obrazy nie są wysyłane na serwer. Pozwala to używać frameworka w aplikacjach pracujących z wrażliwymi danymi, na przykład w medycznych lub bankowych.

Detekcja i rozpoznawanie twarzy

VNDetectFaceRectanglesRequest „ podstawowe zapytanie Vision do wykrywania twarzy na obrazie. Zwraca współrzędne prostokątów ograniczających każdą twarz, bez identyfikacji konkretnej osoby.

Do bardziej szczegółowej analizy użyj VNDetectFaceLandmarksRequest, który określa kluczowe punkty twarzy: oczy, brwi, nos, usta, kontur szczęki. Te dane są używane do nakładania masek, animowania emotek i filtrów w czasie rzeczywistym (jak w FaceTime i Snapchat).

swift
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 zawiera nie tylko boundingBox, ale także confidence (pewność od 0 do 1) oraz landmarks „ tablicę punktów twarzy, jeśli zapytanie było VNDetectFaceLandmarksRequest. Confidence poniżej 0.5 zwykle oznacza fałszywe trafienie „ takie wyniki zaleca się odrzucać.

Vision obsługuje również VNDetectFaceCaptureQualityRequest, który ocenia jakość obrazu twarzy: oświetlenie, ostrość, kąt obrotu. Jest to przydatne do wyboru najlepszej klatki przy rejestracji użytkownika lub tworzenia awatara.

Rozpoznawanie tekstu (OCR) z Vision

VNRecognizeTextRequest „ to wbudowany silnik OCR Apple, przedstawiony w iOS 13. Rozpoznaje drukowany tekst na obrazach z obsługą 13 języków: angielskiego, rosyjskiego, chińskiego, japońskiego, koreańskiego, włoskiego, niemieckiego, hiszpańskiego, portugalskiego, francuskiego, arabskiego, wietnamskiego i tajskiego.

VNRecognizeTextRequest obsługuje dwa poziomy dokładności: .fast (szybki, dla prostego tekstu na kontrastowym tle) i .accurate (dokładny, dla złożonych scen z różnymi czcionkami i kątami). .fast działa 3–5 razy szybciej, ale gorzej radzi sobie z ręcznym pismem i niestandardowymi czcionkami.

swift
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

Właściwość usesLanguageCorrection włącza korekcję rozpoznanego tekstu z użyciem modelu językowego. Zwiększa to dokładność dla angielskiego o 10–15%, ale wydłuża czas przetwarzania. Dla języka rosyjskiego korekcja jest również dostępna, jeśli określono odpowiednią rekognicję.

Według danych Apple ML Research 2022, dokładność VNRecognizeTextRequest na poziomie .accurate wynosi 96% dla wyraźnych zdjęć dokumentów w języku angielskim i około 88% dla rosyjskiego. Dla tekstu na opakowaniach, szyldach i ekranach dokładność spada do 75–85%.

Recognition LevelPrędkośćDokładność (angielski)Wsparcie rosyjskiego
.fast0.1–0.3 sek~85%Tak
.accurate0.3–1.0 sek~96%Tak

Wykrywanie kodów kreskowych i QR

VNDetectBarcodesRequest „ zapytanie Vision do wykrywania i dekodowania kodów kreskowych i QR na obrazie. Obsługiwane są wszystkie podstawowe formaty: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec i QR.

W przeciwieństwie do AVFoundation (AVCaptureMetadataOutput), Vision działa nie tylko ze strumieniem wideo, ale także ze statycznymi obrazami „ pozwala to skanować kody z już zrobionych zdjęć lub zrzutów ekranu. Vision określa również boundingBox kodu z dokładnością do piksela, co jest wygodne do animacji ramki wokół znalezionego kodu.

swift
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 zawiera payloadStringValue (zdekodowaną treść), symbology (typ kodu) i confidence. Dla kodów QR payload może być URL, tekstem lub JSON. Dla EAN/UPC zwracany jest numeryczny kod produktu, który można wykorzystać do wyszukania towaru w bazie danych.

Vision może przetwarzać wiele kodów kreskowych na jednym obrazie „ tablica observations zawiera po jednym obiekcie na każdy znaleziony kod. Jest to przydatne do skanowania paczek towarów lub dokumentów z wieloma kodami kreskowymi.

Śledzenie obiektów w strumieniu wideo

VNDetectObjectAtPointRequest i VNSequenceRequestHandler „ narzędzia Vision do śledzenia obiektów w strumieniu wideo. Pierwszy określa obiekt na podstawie punktu dotknięcia użytkownika, drugi śledzi obiekt między klatkami wideo.

VNSequenceRequestHandler przyjmuje sekwencję obrazów (klatki wideo) i dla każdej klatki zwraca zaktualizowaną pozycję śledzonego obiektu. Jest to używane w aplikacjach rzeczywistości rozszerzonej, edytorach wideo i systemach monitoringu.

swift
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
    // Aktualizuj pozycję obiektu na ekranie
}

VNTrackObjectRequest używa algorytmu śledzenia opartego na przepływie optycznym „ nie trenuje ponownie detektora na każdej klatce, a oblicza przesunięcie obiektu względem poprzedniego położenia. Pozwala to działać w czasie rzeczywistym nawet na urządzeniach bez Neural Engine.

Ograniczenie: śledzenie może zgubić obiekt przy szybkim ruchu, zasłonięciu lub gwałtownej zmianie oświetlenia. Apple zaleca ponowne uruchamianie detekcji (VNDetectObjectAtPointRequest) co 10–15 klatek w celu korekcji śledzenia.

Klasyfikacja obrazów i analiza konturów

VNClassifyImageRequest „ to wbudowany model Vision do klasyfikacji obrazów w 1000 kategoriach (model ResNet-50, wytrenowany na ImageNet). Zapytanie zwraca tablicę VNClassificationObservation z nazwą kategorii i pewnością.

VNDetectContoursRequest wykonuje analizę konturów obrazu „ wyodrębnia granice obiektów, co jest przydatne do segmentacji, obrysowywania i wstępnego przetwarzania przed rozpoznawaniem. Zapytanie zwraca tablicę punktów opisujących każdy kontur na obrazie.

swift
import Vision

// Klasyfikacja obrazu
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 dobrze działa dla ogólnych kategorii (kot, pies, samochód, jedzenie), ale nie nadaje się do specyficznych obiektów „ dla nich trzeba wytrenować niestandardowy model Core ML i użyć VNCoreMLRequest. Model od Apple jest zoptymalizowany dla urządzeń mobilnych i zajmuje tylko 5 MB.

VNDetectContoursRequest zwraca kontury w postaci tablicy punktów z określeniem typu konturu (zewnętrzny, wewnętrzny, otwór). To zapytanie jest używane do wstępnego przetwarzania obrazów przed OCR (poprawa kontrastu tekstu), do rysowania efektów (obrys obiektów) i do analizy kształtów.

Zapytanie VisionPrzeznaczenieWersja iOS
VNDetectFaceRectanglesRequestWyszukiwanie twarzy na obrazieiOS 11
VNRecognizeTextRequestRozpoznawanie tekstu (OCR)iOS 13
VNDetectBarcodesRequestDetekcja kodów kreskowych i QRiOS 11
VNClassifyImageRequestKlasyfikacja obrazówiOS 13
VNDetectContoursRequestAnaliza konturówiOS 14
VNTrackObjectRequestŚledzenie obiektówiOS 11

Często zadawane pytania

Jaka jest różnica między Vision a Core ML dla wizji komputerowej?

Vision dostarcza gotowe algorytmy (detekcja twarzy, OCR, kody kreskowe) bez uczenia modelu. Core ML „ to silnik do wykonywania niestandardowych modeli. Vision + VNCoreMLRequest pozwalają uruchamiać modele Core ML w potoku Vision, łącząc najlepsze cechy obu: gotowe detektory Vision + niestandardowa klasyfikacja Core ML.

Czy Vision działa w czasie rzeczywistym na wideo?

Tak, Vision obsługuje przetwarzanie strumienia wideo w czasie rzeczywistym przez VNSequenceRequestHandler do śledzenia i przez AVCaptureVideoDataOutput do przetwarzania klatka po klatce. Na urządzeniach z A12+ i Neural Engine Vision przetwarza do 60 klatek na sekundę dla detekcji twarzy. Dla ciężkich zadań (OCR, klasyfikacja) zaleca się przetwarzanie co 5–10 klatkę.

Jakie języki obsługuje VNRecognizeTextRequest?

VNRecognizeTextRequest obsługuje 13 języków: angielski, rosyjski, chiński (uproszczony i tradycyjny), japoński, koreański, włoski, niemiecki, hiszpański, portugalski, francuski, arabski, wietnamski i tajski. Do rozpoznawania wielu języków na jednym obrazie podaj tablicę we właściwości recognitionLanguages.

Czy można używać Vision z modelem Core ML?

Tak, przez VNCoreMLRequest. Tworzysz model Core ML, opakowany w VNCoreMLModel, i przekazujesz go do VNCoreMLRequest. Vision automatycznie obsługuje wstępne przetwarzanie obrazu (skalowanie, przycinanie) i przekazuje go do modelu Core ML. Wynik jest zwracany jako VNCoreMLFeatureValueObservation z danymi wyjściowymi modelu.

Czy Vision wysyła obrazy na serwer Apple?

Nie, Vision wykonuje całą analizę całkowicie na urządzeniu. Obrazy nie opuszczają urządzenia użytkownika. To fundamentalna architektura Apple: wszystkie frameworki ML (Vision, NaturalLanguage, Core ML, Speech) działają on-device dla zapewnienia prywatności. Żadne dane nie są wysyłane na serwery Apple.

Podsumowanie

  • Vision „ on-device framework wizji komputerowej Apple z API opartym na VNRequest, dostępny od iOS 11 na wszystkich urządzeniach Apple.
  • VNDetectFaceRectanglesRequest i VNDetectFaceLandmarksRequest wykrywają twarze i kluczowe punkty dla filtrów, masek i animacji.
  • VNRecognizeTextRequest „ wbudowany OCR dla 13 języków z poziomami .fast i .accurate oraz dokładnością do 96% dla dokumentów.
  • VNDetectBarcodesRequest dekoduje wszystkie popularne formaty kodów kreskowych i QR zarówno na zdjęciach, jak i w strumieniu wideo.
  • VNTrackObjectRequest śledzi obiekty między klatkami wideo przez przepływ optyczny bez ponownego uczenia detektora.
  • Integracja z Core ML przez VNCoreMLRequest pozwala uruchamiać niestandardowe modele klasyfikacji i detekcji w potoku Vision.
  • Wszystkie obliczenia są wykonywane na urządzeniu z użyciem Neural Engine „ żadne obrazy nie są wysyłane na serwer, zapewniając pełną poufność danych.

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.

Omów projekt

Przeczytaj również