iOS-OCR mit Apple Vision und Swift
Beginnen Sie bei einer neuen iOS-OCR-Funktion mit Apples Vision-Framework statt mit einem
Tesseract-Wrapper. Die Swift-native API
RecognizeTextRequest
erkennt Text in Standbildern, während
DataScannerViewController
von VisionKit einen fertigen Live-Kamera-Scanner für Text und maschinenlesbare Codes bietet.
Diese Empfehlung weicht von der ursprünglichen Fassung dieses Leitfadens ab. Das Repository von SwiftyTesseract selbst ist archiviert und wird nicht mehr gepflegt, und sein Maintainer empfiehlt Apple Vision für unterstützte Sprachen.
Welche iOS-OCR-API sollten Sie verwenden?
| Anforderung | Empfohlener Weg | Warum |
|---|---|---|
| Text in einem aufgenommenen oder ausgewählten Bild erkennen | RecognizeTextRequest | Sie steuern Bildaufnahme, Request-Einstellungen und Ergebnisverarbeitung. |
| Text fortlaufend über die Kamera scannen | DataScannerViewController | VisionKit liefert Kamera-UI, Hinweise, Hervorhebungen und Live-Aktualisierungen. |
| Uploads verarbeiten, nachdem sie das Gerät verlassen haben | Transloadit 🤖/image/ocr | Der OCR-Step kann im selben Backend-Workflow laufen wie Storage und andere Medienverarbeitung. |
| Sprache oder eigenes Modell nutzen, die in Vision nicht verfügbar sind | Eine gepflegte OCR-Engine oder eine eigene Tesseract-Integration | Prüfen Sie Sprachabdeckung, Pflege der Binärdateien und App-Store-Paketierung, bevor Sie sich festlegen. |
Nutzen Sie Vision auf dem Gerät, wenn die Erkennung Teil einer unmittelbaren iOS-Interaktion ist. Nutzen Sie einen OCR-Workflow im Backend, wenn Jobs unabhängig von der App weiterlaufen, viele Uploads verarbeiten oder das Ergebnis in Storage und weitere Verarbeitungsschritte einspeisen müssen.
Text in einem Standbild erkennen
Der folgende Service erwartet CGImage in aufrechter Ausrichtung, führt Apple
Vision aus und gibt den besten Textkandidaten jeder Beobachtung zurück.
.accurate priorisiert die Erkennungsgenauigkeit; verwenden Sie
.fast, wenn Latenz wichtiger ist. Diese Swift-native API erfordert iOS 18+
und Xcode 16+.
import CoreGraphics
import Vision
final class TextRecognizer {
func recognizeText(in image: CGImage) async throws -> [String] {
var request = RecognizeTextRequest()
request.recognitionLevel = .accurate
request.usesLanguageCorrection = true
let observations = try await request.perform(on: image)
return observations.compactMap { observation in
observation.topCandidates(1).first?.string
}
}
}
Wenn Ihr Deployment-Target ältere OS-Versionen einschließt, verwenden Sie die ursprüngliche API
VNRecognizeTextRequest
hinter derselben Schnittstelle auf Anwendungsebene. Wenn der OCR-Aufruf hinter einem kleinen Service
liegt, bleibt diese Kompatibilitätsentscheidung unabhängig vom Rest der UI.
Vision bietet weitere Einstellungen für Sprachauswahl, eigenes Vokabular und minimale Texthöhe. Fragen Sie den aktiven Request nach seinen unterstützten Erkennungssprachen, statt eine Sprachliste fest zu codieren, die sich je nach OS-Version und Request-Revision unterscheiden kann.
Wenn das Bild aus UIImage stammt, grenzen Sie die optionale
Core-Graphics-Repräsentation ein, bevor Sie den Service aufrufen. Dieses Beispiel setzt voraus, dass
die Bildpixel bereits auf aufrechte Ausrichtung normalisiert wurden;
cgImage allein bewahrt UIImage.imageOrientation nicht:
enum ImageInputError: Error {
case missingCoreGraphicsImage
}
guard let cgImage = selectedImage.cgImage else {
throw ImageInputError.missingCoreGraphicsImage
}
let lines = try await TextRecognizer().recognizeText(in: cgImage)
let recognizedText = lines.joined(separator: "\n")
Führen Sie die Erkennungsarbeit außerhalb von latenzempfindlichem UI-Code aus und aktualisieren Sie den Zustand der Oberfläche anschließend auf dem Main Actor.
Text über die Live-Kamera scannen
Für einen interaktiven Scanner kann DataScannerViewController unter iOS 16+ Text direkt aus dem
Kamerabild erkennen. Prüfen Sie sowohl isSupported als auch
isAvailable: Hardware-Unterstützung allein garantiert nicht, dass das Scannen
aktuell verfügbar ist.
import UIKit
import VisionKit
@MainActor
final class ScannerViewController: UIViewController, DataScannerViewControllerDelegate {
private var scanner: DataScannerViewController?
func presentScanner() {
guard DataScannerViewController.isSupported,
DataScannerViewController.isAvailable
else {
return
}
let scanner = DataScannerViewController(
recognizedDataTypes: [.text()],
qualityLevel: .balanced,
recognizesMultipleItems: true,
isHighFrameRateTrackingEnabled: false,
isPinchToZoomEnabled: true,
isGuidanceEnabled: true,
isHighlightingEnabled: true
)
scanner.delegate = self
self.scanner = scanner
present(scanner, animated: true) {
do {
try scanner.startScanning()
} catch {
scanner.stopScanning()
self.scanner = nil
scanner.dismiss(animated: true) {
let alert = UIAlertController(
title: "Scanner unavailable",
message: "Please select a still image instead.",
preferredStyle: .alert
)
alert.addAction(UIAlertAction(title: "OK", style: .default))
self.present(alert, animated: true)
}
}
}
}
func dataScanner(
_ dataScanner: DataScannerViewController,
didTapOn item: RecognizedItem
) {
guard case let .text(text) = item else {
return
}
print(text.transcript)
}
}
Fügen Sie NSCameraUsageDescription in die Information Property List der App ein und erklären
Sie darin klar, warum Kamerazugriff erforderlich ist. Bieten Sie einen Fallback über Standbilder an,
wenn Live-Scannen nicht verfügbar ist.
Batch-OCR in einen Transloadit-Workflow verlagern
OCR auf dem Gerät eignet sich gut für sofortiges Feedback, koppelt die Verarbeitung aber an die App-Sitzung. Für Uploads, die eine dauerhafte, vom Backend gesteuerte Verarbeitung benötigen, fügen Sie 🤖/image/ocr zu einer Assembly hinzu. Der Robot unterstützt AWS- und GCP-Provider und kann JSON, reinen Text oder Metadaten für einen späteren Step zurückgeben.
Dieses Template extrahiert UTF-8-Text aus jedem hochgeladenen Bild und speichert sowohl das Originalbild als auch die OCR-Ausgabe:
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"recognized": {
"use": ":original",
"robot": "/image/ocr",
"provider": "gcp",
"format": "text"
},
"exported": {
"use": [":original", "recognized"],
"robot": "/s3/store",
"credentials": "YOUR_S3_CREDENTIALS_NAME"
}
}
}
Halten Sie Ihr Transloadit Auth Secret aus dem iOS-Bundle heraus. Erstellen Sie Signaturen in Ihrem Backend, wie in der Authentifizierungsdokumentation beschrieben, und lassen Sie die App anschließend mit den signierten Parametern hochladen. Unter TransloaditKit finden Sie die Oberfläche des iOS-SDK, und mit der Live-OCR-Demo (English) können Sie den Metadaten-Workflow prüfen, bevor Sie ihn integrieren.
Die Cloud-Provider hinter dem OCR Robot können ihre Modelle aktualisieren, prüfen Sie daher in langlebigen Tests nicht auf exakten OCR-Text. Evaluieren Sie repräsentative Dokumente, speichern Sie den verwendeten Provider samt Einstellungen dauerhaft und gestalten Sie nachgelagerten Code so, dass er Erkennungsfehler toleriert.
OCR-Genauigkeit verbessern
- Nehmen Sie die höchste sinnvolle Auflösung auf, ohne ein kleines Ausgangsbild zu strecken.
- Korrigieren Sie die Ausrichtung vor der Erkennung.
- Beschneiden Sie das Bild auf das Dokument oder den Textbereich, wenn die umgebende Szene irrelevant ist.
- Bevorzugen Sie gleichmäßige Beleuchtung und vermeiden Sie Reflexionen, Bewegungsunschärfe und starke perspektivische Verzerrung.
- Legen Sie die Erkennungssprachen bewusst fest, wenn die wahrscheinliche Sprache bekannt ist.
- Ergänzen Sie fachspezifische Begriffe mit
customWords, wenn Vision sie andernfalls falsch korrigiert. - Halten Sie Konfidenzschwellen und menschliche Prüfung im Verhältnis zur Konsequenz eines falschen Ergebnisses.
Häufige Fragen
Was ist die beste OCR-Bibliothek für iOS?
Für unterstützte Sprachen und normalen Bildtext ist Apple Vision die Standardwahl, weil es ein First-Party-Framework ist und keine OCR-Binärdatei von Dritten benötigt. VisionKit ist die übergeordnete Wahl für das Live-Scannen mit der Kamera. Verwenden Sie eine andere Engine erst, wenn eine konkrete Anforderung an Sprache, Modell oder Deployment diese Optionen ausschließt.
Sollte ich SwiftyTesseract in einer neuen iOS-App verwenden?
Nein. Das Repository ist archiviert und weist ausdrücklich darauf hin, dass es keine weiteren Updates erhalten wird. Eine bestehende Anwendung benötigt womöglich eine wohlüberlegte Migration, aber neue Projekte sollten es nicht als gepflegte Abhängigkeit einsetzen.
Benötigt iOS-OCR eine Netzwerkverbindung?
Die Erkennung mit Apple Vision läuft auf dem Gerät. Eine Transloadit-OCR-Assembly ist ein Netzwerkdienst und eignet sich, wenn die Verarbeitung in einem Backend-Workflow fortgesetzt werden soll.
Wie sollte ich OCR testen?
Verwenden Sie eine Sammlung von Fixtures, die Ihre tatsächlichen Sprachen, Schriftarten, Kamerabedingungen und Dokumentlayouts abbildet. Prüfen Sie Akzeptanzkriterien auf Anwendungsebene – etwa das Vorhandensein erforderlicher Felder – statt eines exakten Transkripts für jedes Bild.
