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 „ 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.
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).
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.
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.
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 Level | Prędkość | Dokładność (angielski) | Wsparcie rosyjskiego |
|---|---|---|---|
| .fast | 0.1–0.3 sek | ~85% | Tak |
| .accurate | 0.3–1.0 sek | ~96% | Tak |
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.
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.
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.
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.
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.
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 Vision | Przeznaczenie | Wersja iOS |
|---|---|---|
| VNDetectFaceRectanglesRequest | Wyszukiwanie twarzy na obrazie | iOS 11 |
| VNRecognizeTextRequest | Rozpoznawanie tekstu (OCR) | iOS 13 |
| VNDetectBarcodesRequest | Detekcja kodów kreskowych i QR | iOS 11 |
| VNClassifyImageRequest | Klasyfikacja obrazów | iOS 13 |
| VNDetectContoursRequest | Analiza konturów | iOS 14 |
| VNTrackObjectRequest | Śledzenie obiektów | iOS 11 |
Często zadawane pytania
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.
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ę.
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.
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.
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
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ż