Vision: ramverk för datorseende i iOS

Författare: IT Sectr Publicerad: 2026-07-19 Lästid: 9 min

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 — on-device ramverk för datorseende från Apple med full analyscykel på enheten.
  • Stöder ansiktsdetektering, textigenkänning (OCR), streckkoder, klassificering och objektspårning.
  • Fungerar via en enhetlig VNRequest-mekanism — förfrågningar till en bild eller videoström.
  • Integreras med Core ML för anpassade modeller via VNCoreMLRequest.
  • Ramverket optimerat för Neural Engine på A12+-chip för realtid.

Vad är Vision i iOS?

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.

Ansiktsdetektering och -igenkänning

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).

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 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.

Textigenkänning (OCR) med Vision

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.

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

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 LevelHastighetNoggrannhet (engelska)Stöd för ryska
.fast0.1–0.3 sek~85%Ja
.accurate0.3–1.0 sek~96%Ja

Streckkods- och QR-detektering

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.

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 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.

Objektspårning i videoström

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.

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
    // 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.

Bildklassificering och konturanalys

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.

swift
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åganSyfteiOS-version
VNDetectFaceRectanglesRequestSökning av ansikten i bildiOS 11
VNRecognizeTextRequestTextigenkänning (OCR)iOS 13
VNDetectBarcodesRequestStreckkods- och QR-detekteringiOS 11
VNClassifyImageRequestBildklassificeringiOS 13
VNDetectContoursRequestKonturanalysiOS 14
VNTrackObjectRequestObjektspårningiOS 11

Vanliga frågor

Vad är skillnaden mellan Vision och Core ML för datorseende?

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.

Fungerar Vision i realtid på video?

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.

Vilka språk stöder VNRecognizeTextRequest?

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.

Kan Vision användas med en Core ML-modell?

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.

Skickar Vision bilder till Apples server?

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

  • Vision — on-device ramverk för datorseende från Apple med API baserat på VNRequest, tillgängligt från iOS 11 på alla Apple-enheter.
  • VNDetectFaceRectanglesRequest och VNDetectFaceLandmarksRequest detekterar ansikten och nyckelpunkter för filter, masker och animation.
  • VNRecognizeTextRequest — inbyggd OCR för 13 språk med nivåerna .fast och .accurate och noggrannhet upp till 96% för dokument.
  • VNDetectBarcodesRequest avkodar alla populära streckkods- och QR-format både på foton och i videoström.
  • VNTrackObjectRequest spårar objekt mellan videobildrutor via optiskt flöde utan att träna om detektorn.
  • Core ML-integration via VNCoreMLRequest gör det möjligt att köra anpassade klassificerings- och detekteringsmodeller i Vision-pipelinen.
  • Alla beräkningar utförs på enheten med Neural Engine — inga bilder skickas till servern, fullständig dataintegritet garanteras.

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.

Diskutera projektet

Läs också