Vision ist ein Computer-Vision-Framework von Apple, das erstmals 2017 mit iOS 11 vorgestellt wurde. Vision bietet fertige Algorithmen zur Gesichtserkennung, Texterkennung (OCR), Barcode-Erkennung, Objektverfolgung, Bildklassifizierung und Konturanalyse — alles wird auf dem Gerät mit dem Neural Engine ausgeführt. Laut Apple WWDC 2023 wird Vision in der Standard-Fotos-App zur Gesichtserkennung und in der Kamera-App zur Echtzeit-Texterkennung auf iPhone und iPad eingesetzt.
Wichtige Punkte
Vision ist ein hochmodernes Computer-Vision-Framework, das komplexe Machine-Learning-Algorithmen hinter einer einfachen Request-API (VNRequest) verbirgt. Der Entwickler muss keine Convolutional Neural Networks verstehen — einfach den passenden Anfragetyp erstellen, ein Bild übergeben und das Ergebnis erhalten.
Die Architektur von Vision folgt dem Prinzip Request → Handler → Result: VNImageRequestHandler nimmt ein Bild entgegen, führt VNRequest aus und gibt ein Array von VNObservation mit Ergebnissen zurück. Dies ermöglicht die Kombination mehrerer Anfragen an ein einzelnes Bild — zum Beispiel die gleichzeitige Erkennung von Gesichtern und Text in einem Foto.
Vision unterstützt iOS 11+ und macOS 10.13+. Für die Hardwarebeschleunigung über Neural Engine wird ein A12 Bionic-Chip oder neuer benötigt. Auf Geräten mit A17 Pro und der M-Serie verarbeitet Vision bis zu 60 Bilder pro Sekunde für Streaming-Video.
Hauptvorteil von Vision ist die vollständige Privatsphäre: Alle Berechnungen werden auf dem Gerät durchgeführt, Bilder werden nie an einen Server gesendet. Dies ermöglicht den Einsatz des Frameworks in Anwendungen, die mit sensiblen Daten arbeiten, wie medizinischen oder Banken-Apps.
VNDetectFaceRectanglesRequest ist die grundlegende Vision-Anfrage zur Erkennung von Gesichtern in einem Bild. Sie gibt die Koordinaten der Rechtecke zurück, die jedes Gesicht umschließen, ohne eine bestimmte Person zu identifizieren.
Für eine detailliertere Analyse verwenden Sie VNDetectFaceLandmarksRequest, das die wichtigsten Gesichtspunkte identifiziert: Augen, Augenbrauen, Nase, Mund, Kieferkontur. Diese Daten werden zum Auflegen von Masken, Animieren von Emojis und für Echtzeit-Filter (wie in FaceTime und Snapchat) verwendet.
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 enthält nicht nur boundingBox, sondern auch confidence (Vertrauen von 0 bis 1) und landmarks — ein Array von Gesichtspunkten, wenn die Anfrage VNDetectFaceLandmarksRequest war. Ein Confidence-Wert unter 0,5 deutet in der Regel auf einen False Positive hin — solche Ergebnisse sollten verworfen werden.
Vision unterstützt auch VNDetectFaceCaptureQualityRequest, das die Qualität des Gesichtsbildes bewertet: Beleuchtung, Schärfe, Drehwinkel. Dies ist nützlich für die Auswahl des besten Bildes bei der Benutzerregistrierung oder zum Erstellen eines Avatars.
VNRecognizeTextRequest ist Apples integrierte OCR-Engine, die mit iOS 13 eingeführt wurde. Sie erkennt gedruckten Text in Bildern mit Unterstützung für 13 Sprachen: Englisch, Russisch, Chinesisch, Japanisch, Koreanisch, Italienisch, Deutsch, Spanisch, Portugiesisch, Französisch, Arabisch, Vietnamesisch und Thai.
VNRecognizeTextRequest unterstützt zwei Genauigkeitsstufen: .fast (schnell, für einfachen Text auf kontrastreichem Hintergrund) und .accurate (präzise, für komplexe Szenen mit verschiedenen Schriftarten und Winkeln). .fast ist 3–5 Mal schneller, verarbeitet handschriftlichen Text und nicht standardmäßige Schriftarten jedoch weniger effektiv.
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
Die Eigenschaft usesLanguageCorrection aktiviert die Korrektur des erkannten Textes mithilfe eines Sprachmodells. Dies verbessert die englische Genauigkeit um 10–15%, erhöht jedoch die Verarbeitungszeit. Die russische Sprachkorrektur ist ebenfalls verfügbar, wenn die entsprechende Erkennung angegeben wird.
Laut Apple ML Research 2022 erreicht VNRecognizeTextRequest auf .accurate-Niveau eine Genauigkeit von 96% für klare Dokumentenfotos auf Englisch und etwa 88% für Russisch. Bei Text auf Verpackungen, Schildern und Bildschirmen sinkt die Genauigkeit auf 75–85%.
| Erkennungsstufe | Geschwindigkeit | Genauigkeit (Englisch) | Russisch-Unterstützung |
|---|---|---|---|
| .fast | 0,1–0,3 s | ~85% | Ja |
| .accurate | 0,3–1,0 s | ~96% | Ja |
VNDetectBarcodesRequest — eine Vision-Anfrage zum Erkennen und Dekodieren von Barcodes und QR-Codes in Bildern. Alle wichtigen Formate werden unterstützt: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec und QR.
Im Gegensatz zu AVFoundation (AVCaptureMetadataOutput) arbeitet Vision nicht nur mit Videostreams, sondern auch mit Standbildern — dies ermöglicht das Scannen von Codes aus vorhandenen Fotos oder Screenshots. Vision bestimmt auch den boundingBox des Codes mit Pixelgenauigkeit, was sich zum Animieren eines Rahmens um den erkannten Code eignet.
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 enthält payloadStringValue (dekodierter Inhalt), symbology (Code-Typ) und confidence. Bei QR-Codes kann der Inhalt eine URL, Text oder JSON sein. Bei EAN/UPC wird ein numerischer Produktcode zurückgegeben, der zum Nachschlagen des Artikels in einer Datenbank verwendet werden kann.
Vision kann mehrere Barcodes in einem einzigen Bild verarbeiten — das observations-Array enthält ein Objekt für jeden erkannten Code. Dies ist nützlich zum Scannen von Produktchargen oder Dokumenten mit mehreren Barcodes.
VNDetectObjectAtPointRequest und VNSequenceRequestHandler — Vision-Werkzeuge zur Verfolgung von Objekten in einem Videostream. Ersteres identifiziert ein Objekt anhand des Berührungspunkts des Benutzers, Letzteres verfolgt ein Objekt zwischen Videoframes.
VNSequenceRequestHandler nimmt eine Bildsequenz (Videoframes) entgegen und gibt die aktualisierte Position des verfolgten Objekts für jeden Frame zurück. Dies wird in Augmented-Reality-Apps, Videobearbeitungsprogrammen und Überwachungssystemen verwendet.
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
// Objektposition auf dem Bildschirm aktualisieren
}
VNTrackObjectRequest verwendet einen auf optischem Fluss basierenden Tracking-Algorithmus — er trainiert den Detektor nicht bei jedem Frame neu, sondern berechnet die Verschiebung des Objekts relativ zu seiner vorherigen Position. Dies ermöglicht Echtzeitleistung auch auf Geräten ohne Neural Engine.
Einschränkung: Das Tracking kann das Objekt bei schnellen Bewegungen, Verdeckungen oder plötzlichen Lichtwechseln verlieren. Apple empfiehlt, die Erkennung (VNDetectObjectAtPointRequest) alle 10–15 Frames zur Tracking-Korrektur neu zu starten.
VNClassifyImageRequest ist das integrierte Vision-Modell zur Bildklassifizierung in 1.000 Kategorien (ResNet-50-Modell, trainiert auf ImageNet). Die Anfrage gibt ein Array von VNClassificationObservation mit dem Kategorienamen und der Konfidenz zurück.
VNDetectContoursRequest führt eine Bildkonturanalyse durch — extrahiert Objektgrenzen, nützlich für Segmentierung, Konturierung und Vorverarbeitung vor der Erkennung. Die Anfrage gibt ein Array von Punkten zurück, die jede Kontur im Bild beschreiben.
import Vision
// Bildklassifizierung
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 funktioniert gut für allgemeine Kategorien (Katze, Hund, Auto, Essen), ist aber nicht für spezifische Objekte geeignet — dafür müssen Sie ein benutzerdefiniertes Core ML-Modell trainieren und VNCoreMLRequest verwenden. Apples Modell ist für mobile Geräte optimiert und benötigt nur 5 MB.
VNDetectContoursRequest gibt Konturen als Array von Punkten mit dem Konturtyp (außen, innen, Loch) zurück. Diese Anfrage wird zur Bildvorverarbeitung vor OCR (Verbesserung des Textkontrasts), zum Zeichnen von Effekten (Objektkonturierung) und zur Formanalyse verwendet.
| Vision-Anfrage | Zweck | iOS-Version |
|---|---|---|
| VNDetectFaceRectanglesRequest | Gesichtserkennung in Bildern | iOS 11 |
| VNRecognizeTextRequest | Texterkennung (OCR) | iOS 13 |
| VNDetectBarcodesRequest | Barcode- und QR-Erkennung | iOS 11 |
| VNClassifyImageRequest | Bildklassifizierung | iOS 13 |
| VNDetectContoursRequest | Konturanalyse | iOS 14 |
| VNTrackObjectRequest | Objektverfolgung | iOS 11 |
Häufig gestellte Fragen
Vision bietet fertige Algorithmen (Gesichtserkennung, OCR, Barcodes) ohne Modelltraining. Core ML ist die Engine zur Ausführung benutzerdefinierter Modelle. Vision + VNCoreMLRequest ermöglichen die Ausführung von Core ML-Modellen in der Vision-Pipeline und bieten das Beste aus beiden Welten: fertige Vision-Detektoren + benutzerdefinierte Core ML-Klassifizierung.
Ja, Vision unterstützt die Echtzeit-Videostream-Verarbeitung über VNSequenceRequestHandler zum Tracking und über AVCaptureVideoDataOutput zur frame-weisen Verarbeitung. Auf Geräten mit A12+ und Neural Engine verarbeitet Vision bis zu 60 fps für die Gesichtserkennung. Für aufwändige Aufgaben (OCR, Klassifizierung) wird empfohlen, jeden 5–10. Frame zu verarbeiten.
VNRecognizeTextRequest unterstützt 13 Sprachen: Englisch, Russisch, Chinesisch (vereinfacht und traditionell), Japanisch, Koreanisch, Italienisch, Deutsch, Spanisch, Portugiesisch, Französisch, Arabisch, Vietnamesisch und Thai. Zur Erkennung mehrerer Sprachen in einem einzelnen Bild geben Sie ein Array in der Eigenschaft recognitionLanguages an.
Ja, über VNCoreMLRequest. Sie erstellen ein Core ML-Modell, das in VNCoreMLModel eingewickelt ist, und übergeben es an VNCoreMLRequest. Vision übernimmt automatisch die Bildvorverarbeitung (Skalierung, Zuschneiden) und speist sie in das Core ML-Modell ein. Das Ergebnis wird als VNCoreMLFeatureValueObservation mit den Ausgabedaten des Modells zurückgegeben.
Nein, Vision führt alle Analysen vollständig auf dem Gerät durch. Bilder verlassen niemals das Gerät des Benutzers. Dies ist Apples grundlegende Architektur: Alle ML-Frameworks (Vision, NaturalLanguage, Core ML, Speech) arbeiten auf dem Gerät, um die Privatsphäre zu gewährleisten. Es werden keine Daten an Apples Server gesendet.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch