Vision „ is een framework voor computervisie van Apple, voor het eerst geïntroduceerd in iOS 11 in 2017. Vision bied kant-en-klare algoritmen voor gezichtsdetectie, tekstherkenning (OCR), barcodedetectie, object tracking, beeldclassificatie en contouranalyse „ alles wordt uitgevoerd op het apparaat met behulp van Neural Engine. Volgens Apple WWDC 2023 wordt Vision gebruikt in de standaard “Foto”-app voor gezichtsherkenning en in “Camera” voor realtime tekstdetectie op iPhone en iPad.
Belangrijkste punten
Vision „ is een hoogwaardig framework voor computervisie dat complexe machine learning-algoritmen abstraheert achter een eenvoudige API voor verzoeken (VNRequest). De ontwikkelaar hoeft geen convolutionele neurale netwerken te begrijpen „ het volstaat om een verzoek van het juiste type te maken, de afbeelding door te geven en het resultaat te ontvangen.
De architectuur van Vision is gebaseerd op het principe Request → Handler → Result: VNImageRequestHandler ontvangt de afbeelding, voert VNRequest uit en retourneert een array van VNObservation met resultaten. Dit maakt het mogelijk om meerdere verzoeken aan één afbeelding te combineren „ bijvoorbeeld tegelijkertijd gezichten en tekst op een foto detecteren.
Vision ondersteunt iOS 11+ en macOS 10.13+. Voor hardwareversnelling via Neural Engine is een A12 Bionic-chip of nieuwer vereist. Op apparaten met A17 Pro en M-serie verwerkt Vision tot 60 frames per seconde voor streaming video.
Belangrijk voordeel van Vision „ volledige privacy: alle berekeningen worden op het apparaat uitgevoerd, afbeeldingen worden niet naar de server gestuurd. Dit maakt het mogelijk het framework te gebruiken in toepassingen die met gevoelige gegevens werken, bijvoorbeeld in medische of bank-apps.
VNDetectFaceRectanglesRequest „ het basisverzoek van Vision voor het detecteren van gezichten op een afbeelding. Het retourneert de coördinaten van rechthoeken die elk gezicht begrenzen, zonder identificatie van de specifieke persoon.
Voor een meer gedetailleerde analyse gebruikt u VNDetectFaceLandmarksRequest, dat de belangrijkste punten van het gezicht bepaalt: ogen, wenkbrauwen, neus, mond, kaakcontour. Deze gegevens worden gebruikt voor het toepassen van maskers, emoji-animatie en filters in realtime (zoals in FaceTime en 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 bevat niet alleen boundingBox, maar ook confidence (betrouwbaarheid van 0 tot 1) en landmarks „ een array van gezichtspunten als het verzoek VNDetectFaceLandmarksRequest was. Confidence onder 0.5 duidt meestal op een vals-positief resultaat „ dergelijke resultaten worden aanbevolen om te verwerpen.
Vision ondersteunt ook VNDetectFaceCaptureQualityRequest, dat de kwaliteit van de gezichtsafbeelding beoordeelt: belichting, scherpte, rotatiehoek. Dit is handig voor het selecteren van het beste frame bij gebruikersregistratie of het maken van een avatar.
VNRecognizeTextRequest „ is de ingebouwde OCR-engine van Apple, geïntroduceerd in iOS 13. Het herkent gedrukte tekst op afbeeldingen met ondersteuning voor 13 talen: Engels, Russisch, Chinees, Japans, Koreaans, Italiaans, Duits, Spaans, Portugees, Frans, Arabisch, Vietnamees en Thai.
VNRecognizeTextRequest ondersteunt twee nauwkeurigheidsniveaus: .fast (snel, voor eenvoudige tekst op contrasterende achtergrond) en .accurate (nauwkeurig, voor complexe scènes met verschillende lettertypen en hoeken). .fast werkt 3–5 keer sneller, maar presteert slechter met handschrift en niet-standaard lettertypen.
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
De eigenschap usesLanguageCorrection activeert correctie van herkende tekst met behulp van een taalmodel. Dit verhoogt de nauwkeurigheid voor Engels met 10–15%, maar verlengt de verwerkingstijd. Voor Russisch is correctie ook beschikbaar als de juiste herkenning is gespecificeerd.
Volgens Apple ML Research 2022 bedraagt de nauwkeurigheid van VNRecognizeTextRequest op .accurate-niveau 96% voor duidelijke foto's van documenten in het Engels en ongeveer 88% voor Russisch. Voor tekst op verpakkingen, borden en schermen daalt de nauwkeurigheid naar 75–85%.
| Recognition Level | Snelheid | Nauwkeurigheid (Engels) | Ondersteuning Russisch |
|---|---|---|---|
| .fast | 0.1–0.3 sec | ~85% | Ja |
| .accurate | 0.3–1.0 sec | ~96% | Ja |
VNDetectBarcodesRequest „ het Vision-verzoek voor detectie en decodering van barcodes en QR-codes op een afbeelding. Alle belangrijke formaten worden ondersteund: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec en QR.
In tegenstelling tot AVFoundation (AVCaptureMetadataOutput) werkt Vision niet alleen met een videostream, maar ook met statische afbeeldingen „ dit maakt het mogelijk codes te scannen van reeds gemaakte foto's of screenshots. Vision bepaalt ook de boundingBox van de code met pixelprecisie, wat handig is voor animatie van een kader rond de gevonden code.
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 bevat payloadStringValue (gedecodeerde inhoud), symbology (codetype) en confidence. Voor QR-codes kan de payload een URL, tekst of JSON zijn. Voor EAN/UPC wordt de numerieke productcode geretourneerd, die kan worden gebruikt om het artikel in de database te zoeken.
Vision kan meerdere barcodes op één afbeelding verwerken „ de array observations bevat één object voor elke gevonden code. Dit is handig voor het scannen van productpakketten of documenten met meerdere barcodes.
VNDetectObjectAtPointRequest en VNSequenceRequestHandler „ Vision-hulpmiddelen voor het volgen van objecten in een videostream. De eerste bepaalt het object op basis van het aanraakpunt van de gebruiker, de tweede volgt het object tussen videoframes.
VNSequenceRequestHandler ontvangt een reeks afbeeldingen (videoframes) en retourneert voor elk frame de bijgewerkte positie van het gevolgde object. Dit wordt gebruikt in augmented reality-toepassingen, videobewerkers en bewakingssystemen.
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
// Werk objectpositie op scherm bij
}
VNTrackObjectRequest gebruikt een tracking-algoritme op basis van optische stroom „ het traint de detector niet opnieuw op elk frame, maar berekent de verplaatsing van het object ten opzichte van de vorige positie. Dit maakt realtime werking mogelijk, zelfs op apparaten zonder Neural Engine.
Beperking: tracking kan het object verliezen bij snelle beweging, bedekking of plotselinge verandering van belichting. Apple raadt aan om elke 10–15 frames de detectie (VNDetectObjectAtPointRequest) opnieuw te starten voor correctie van de tracking.
VNClassifyImageRequest „ is het ingebouwde Vision-model voor beeldclassificatie in 1000 categorieën (ResNet-50-model, getraind op ImageNet). Het verzoek retourneert een array van VNClassificationObservation met categorienaam en betrouwbaarheid.
VNDetectContoursRequest voert contouranalyse van de afbeelding uit „ het extraheert objectgrenzen, wat nuttig is voor segmentatie, contouring en voorverwerking vóór herkenning. Het verzoek retourneert een array van punten die elke contour op de afbeelding beschrijven.
import Vision
// Beeldclassificatie
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 werkt goed voor algemene categorieën (kat, hond, auto, eten), maar is niet geschikt voor specifieke objecten „ daarvoor moet een aangepast Core ML-model worden getraind en VNCoreMLRequest worden gebruikt. Het model van Apple is geoptimaliseerd voor mobiele apparaten en neemt slechts 5 MB in beslag.
VNDetectContoursRequest retourneert contouren als een array van punten met aanduiding van het contortype (extern, intern, gat). Dit verzoek wordt gebruikt voor voorverwerking van afbeeldingen vóór OCR (verbetering van tekstcontrast), voor het tekenen van effecten (omtrek van objecten) en voor vormanalyse.
| Vision-verzoek | Doel | iOS-versie |
|---|---|---|
| VNDetectFaceRectanglesRequest | Zoeken van gezichten in afbeelding | iOS 11 |
| VNRecognizeTextRequest | Tekstherkenning (OCR) | iOS 13 |
| VNDetectBarcodesRequest | Barcode- en QR-detectie | iOS 11 |
| VNClassifyImageRequest | Beeldclassificatie | iOS 13 |
| VNDetectContoursRequest | Contouranalyse | iOS 14 |
| VNTrackObjectRequest | Object tracking | iOS 11 |
Veelgestelde vragen
Vision biedt kant-en-klare algoritmen (gezichtsdetectie, OCR, barcodes) zonder modeltraining. Core ML „ is de motor voor het uitvoeren van aangepaste modellen. Vision + VNCoreMLRequest maken het mogelijk Core ML-modellen in de Vision-pipeline uit te voeren, met het beste van beide werelden: kant-en-klare Vision-detectoren + aangepaste Core ML-classificatie.
Ja, Vision ondersteunt realtime verwerking van videostreams via VNSequenceRequestHandler voor tracking en via AVCaptureVideoDataOutput voor frame-voor-frame verwerking. Op apparaten met A12+ en Neural Engine verwerkt Vision tot 60 frames per seconde voor gezichtsdetectie. Voor zware taken (OCR, classificatie) wordt aanbevolen elke 5–10 frames te verwerken.
VNRecognizeTextRequest ondersteunt 13 talen: Engels, Russisch, Chinees (vereenvoudigd en traditioneel), Japans, Koreaans, Italiaans, Duits, Spaans, Portugees, Frans, Arabisch, Vietnamees en Thai. Voor herkenning van meerdere talen op één afbeelding geeft u een array op in de eigenschap recognitionLanguages.
Ja, via VNCoreMLRequest. U maakt een Core ML-model, verpakt in VNCoreMLModel, en geeft dit door aan VNCoreMLRequest. Vision beheert automatisch de voorverwerking van de afbeelding (schalen, bijsnijden) en geeft deze door aan het Core ML-model. Het resultaat wordt geretourneerd als VNCoreMLFeatureValueObservation met uitvoergegevens van het model.
Nee, Vision voert de volledige analyse volledig op het apparaat uit. Afbeeldingen verlaten het apparaat van de gebruiker niet. Dit is de fundamentele architectuur van Apple: alle ML-frameworks (Vision, NaturalLanguage, Core ML, Speech) werken on-device om privacy te waarborgen. Er worden geen gegevens naar Apple-servers gestuurd.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook