Vision — är ett ramverk för datorseende från Apple, först introducerat i iOS 11 2017. Vision tillhandahåller färdiga algoritmer för ansiktsdetektering, textigenkänning (OCR), streckkodsdetektering, objektspårning, bildklassificering och konturanalys — allt utförs på enheten med Neural Engine. Enligt Apple WWDC 2023 används Vision i standardappen “Foton” för ansiktsigenkänning och i “Kamera” för realtidstextdetektering på iPhone och iPad.
Huvudpunkter
Vision — är ett högnivåramverk för datorseende som abstraherar komplexa maskininlärningsalgoritmer bakom ett enkelt API för förfrågningar (VNRequest). Utvecklaren behöver inte förstå konvolutionella neurala nätverk — det räcker att skapa en förfrågan av rätt typ, skicka bilden och få resultatet.
Vision-arkitekturen är byggd på principen Request → Handler → Result: VNImageRequestHandler tar emot bilden, utför VNRequest och returnerar en array av VNObservation med resultat. Detta gör det möjligt att kombinera flera förfrågningar till en bild — till exempel samtidigt detektera ansikten och text på ett foto.
Vision stöder iOS 11+ och macOS 10.13+. För hårdvaruacceleration via Neural Engine krävs ett A12 Bionic-chip eller nyare. På enheter med A17 Pro och M-serien bearbetar Vision upp till 60 bildrutor per sekund för strömmande video.
Nyckelfördel med Vision — fullständig integritet: alla beräkningar utförs på enheten, bilder skickas inte till servern. Detta gör det möjligt att använda ramverket i applikationer som arbetar med känslig data, till exempel inom medicin eller bank.
VNDetectFaceRectanglesRequest — den grundläggande Vision-förfrågan för att detektera ansikten i en bild. Returnerar koordinaterna för rektanglarna som begränsar varje ansikte, utan identifiering av specifik person.
För mer detaljerad analys använd VNDetectFaceLandmarksRequest, som bestämmer ansiktets nyckelpunkter: ögon, ögonbryn, näsa, mun, käkkontur. Dessa data används för att applicera masker, animera emojis och filter i realtid (som i FaceTime och 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 innehåller inte bara boundingBox, utan även confidence (tillförlitlighet från 0 till 1) och landmarks — en array av ansiktspunkter om förfrågan var VNDetectFaceLandmarksRequest. Confidence under 0.5 betyder vanligtvis en falsk detektering — sådana resultat rekommenderas att kasseras.
Vision stöder också VNDetectFaceCaptureQualityRequest, som utvärderar bildkvaliteten på ansiktet: belysning, skärpa, rotationsvinkel. Detta är användbart för att välja den bästa bildrutan vid användarregistrering eller skapande av avatar.
VNRecognizeTextRequest — är Apples inbyggda OCR-motor, introducerad i iOS 13. Den känner igen tryckt text på bilder med stöd för 13 språk: engelska, ryska, kinesiska, japanska, koreanska, italienska, tyska, spanska, portugisiska, franska, arabiska, vietnamesiska och thailändska.
VNRecognizeTextRequest stöder två noggrannhetsnivåer: .fast (snabb, för enkel text på kontrastrik bakgrund) och .accurate (exakt, för komplexa scener med olika typsnitt och vinklar). .fast arbetar 3–5 gånger snabbare, men hanterar handskriven text och icke-standardiserade typsnitt sämre.
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
Egenskapen usesLanguageCorrection aktiverar korrigering av igenkänd text med hjälp av en språkmodell. Detta ökar noggrannheten för engelska med 10–15%, men förlänger bearbetningstiden. För ryska är korrigering också tillgänglig om motsvarande igenkänning har angetts.
Enligt Apple ML Research 2022 är noggrannheten för VNRecognizeTextRequest på .accurate-nivå 96% för tydliga dokumentfoton på engelska och cirka 88% för ryska. För text på förpackningar, skyltar och skärmar sjunker noggrannheten till 75–85%.
| Recognition Level | Hastighet | Noggrannhet (engelska) | Stöd för ryska |
|---|---|---|---|
| .fast | 0.1–0.3 sek | ~85% | Ja |
| .accurate | 0.3–1.0 sek | ~96% | Ja |
VNDetectBarcodesRequest — Vision-förfrågan för detektering och avkodning av streckkoder och QR-koder på en bild. Alla huvudformat stöds: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec och QR.
Till skillnad från AVFoundation (AVCaptureMetadataOutput) fungerar Vision inte bara med videoström, utan även med statiska bilder — detta gör det möjligt att skanna koder från redan tagna foton eller skärmdumpar. Vision bestämmer också kodens boundingBox med pixelprecision, vilket är bekvämt för animering av en ram runt den hittade koden.
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 innehåller payloadStringValue (avkodat innehåll), symbology (kodtyp) och confidence. För QR-koder kan payload vara URL, text eller JSON. För EAN/UPC returneras produktens numeriska kod, som kan användas för att söka efter varan i databasen.
Vision kan bearbeta flera streckkoder på en bild — observationsarrayen innehåller ett objekt för varje hittad kod. Detta är användbart för att skanna produktpaket eller dokument med flera streckkoder.
VNDetectObjectAtPointRequest och VNSequenceRequestHandler — Vision-verktyg för att spåra objekt i en videoström. Den första bestämmer objektet baserat på användarens beröringspunkt, den andra spårar objektet mellan videobildrutor.
VNSequenceRequestHandler tar emot en sekvens av bilder (videobildrutor) och returnerar för varje bildruta den uppdaterade positionen för det spårade objektet. Detta används i applikationer för förstärkt verklighet, videoredigerare och videoövervakningssystem.
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
// Uppdatera objektposition på skärmen
}
VNTrackObjectRequest använder en spårningsalgoritm baserad på optiskt flöde — den tränar inte om detektorn på varje bildruta, utan beräknar objektets förskjutning i förhållande till den tidigare positionen. Detta möjliggör realtidsarbete även på enheter utan Neural Engine.
Begränsning: spårning kan förlora objektet vid snabb rörelse, övertäckning eller plötslig förändring av belysning. Apple rekommenderar att starta om detekteringen (VNDetectObjectAtPointRequest) var 10–15:e bildruta för korrigering av spårningen.
VNClassifyImageRequest — är Vision inbyggda modell för bildklassificering i 1000 kategorier (ResNet-50-modell, tränad på ImageNet). Förfrågan returnerar en array av VNClassificationObservation med kategori namn och tillförlitlighet.
VNDetectContoursRequest utför konturanalys av bilden — extraherar objektgränser, vilket är användbart för segmentering, konturering och förbearbetning före igenkänning. Förfrågan returnerar en array av punkter som beskriver varje kontur på bilden.
import Vision
// Bildklassificering
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 fungerar bra för allmänna kategorier (katt, hund, bil, mat), men är inte lämplig för specifika objekt — för dessa måste en anpassad Core ML-modell tränas och VNCoreMLRequest användas. Modellen från Apple är optimerad för mobila enheter och tar endast 5 MB plats.
VNDetectContoursRequest returnerar konturer som en array av punkter med angivelse av konturtyp (extern, intern, hål). Denna förfrågan används för förbearbetning av bilder före OCR (förbättring av textkontrast), för att rita effekter (konturering av objekt) och för formanalys.
| Vision-förfrågan | Syfte | iOS-version |
|---|---|---|
| VNDetectFaceRectanglesRequest | Sökning av ansikten i bild | iOS 11 |
| VNRecognizeTextRequest | Textigenkänning (OCR) | iOS 13 |
| VNDetectBarcodesRequest | Streckkods- och QR-detektering | iOS 11 |
| VNClassifyImageRequest | Bildklassificering | iOS 13 |
| VNDetectContoursRequest | Konturanalys | iOS 14 |
| VNTrackObjectRequest | Objektspårning | iOS 11 |
Vanliga frågor
Vision tillhandahåller färdiga algoritmer (ansiktsdetektering, OCR, streckkoder) utan modellträning. Core ML — är motorn för att köra anpassade modeller. Vision + VNCoreMLRequest gör det möjligt att köra Core ML-modeller i Vision-pipelinen, och kombinerar det bästa från båda världar: färdiga Vision-detektorer + anpassad Core ML-klassificering.
Ja, Vision stöder realtidsbearbetning av videoström via VNSequenceRequestHandler för spårning och via AVCaptureVideoDataOutput för bildruta-för-bildruta-bearbetning. På enheter med A12+ och Neural Engine bearbetar Vision upp till 60 bildrutor per sekund för ansiktsdetektering. För tunga uppgifter (OCR, klassificering) rekommenderas att bearbeta var 5–10:e bildruta.
VNRecognizeTextRequest stöder 13 språk: engelska, ryska, kinesiska (förenklad och traditionell), japanska, koreanska, italienska, tyska, spanska, portugisiska, franska, arabiska, vietnamesiska och thailändska. För igenkänning av flera språk på en bild, ange en array i egenskapen recognitionLanguages.
Ja, via VNCoreMLRequest. Du skapar en Core ML-modell, inslagen i VNCoreMLModel, och skickar den till VNCoreMLRequest. Vision hanterar automatiskt förbearbetningen av bilden (skalning, beskärning) och skickar den till Core ML-modellen. Resultatet returneras som VNCoreMLFeatureValueObservation med modellens utdata.
Nej, Vision utför hela analysen helt på enheten. Bilder lämnar inte användarens enhet. Detta är Apples grundläggande arkitektur: alla ML-ramverk (Vision, NaturalLanguage, Core ML, Speech) arbetar on-device för att säkerställa integritet. Inga data skickas till Apples servrar.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också