Texterkennung (OCR — Optische Zeichenerkennung) ist eine Technologie zum Extrahieren von gedrucktem oder handgeschriebenem Text aus Bildern und Videoströmen. In der mobilen Entwicklung wird Texterkennung zum Digitalisieren von Dokumenten, Erkennen von Kennzeichenschildern, Lesen von Visitenkarten und zur Echtzeit-Textübersetzung verwendet. Die wichtigsten mobilen OCR-Lösungen sind: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (Open-Source). Laut Google ML Kit, 2025 verarbeitet Text Recognition V2 einen Frame in 10–30 ms mit einer Genauigkeit von 96% bei lateinischen und 91% bei kyrillischen Schriftzeichen.
Wichtige Punkte
Texterkennung (OCR) ist ein Computer-Vision-Prozess, der Textbilder in maschinenlesbare Zeichen umwandelt. OCR besteht aus Phasen: Bildvorverarbeitung (Binarisierung, Deskew, Neigungskorrektur), Segmentierung (Aufteilung in Zeilen, Wörter, Zeichen), Erkennung (Klassifizierung jedes Zeichens) und Nachbearbeitung (Wörterbuchprüfung, Fehlerkorrektur). Moderne OCR-Systeme (ML Kit, Vision) verwenden End-to-End-Neuronale Netze, die alle Phasen kombinieren.
Arten von OCR: gedruckter Text — Erkennung von maschinengeschriebenem Text von Dokumenten, Schildern, Bildschirmen — Genauigkeit 95–99%; Handschrift — Erkennung von handschriftlicher Eingabe — Genauigkeit 80–90% bei Lateinisch, 70–80% bei Kyrillisch; Szenentext — Text in natürlichen Szenen: Hausnummern, Verkehrsschilder, Geschäftsnamen — aufgrund von perspektivischen Verzerrungen und Blendungen am schwierigsten.
CRNN + CTC Loss — die in modernen OCR-Modellen verwendete Architektur. Das Convolutional Recurrent Neural Network (CNN + LSTM) extrahiert Bildmerkmale, während die Connectionist Temporal Classification die Zeichensequenz ohne vorherige Segmentierung dekodiert. CRNN arbeitet mit Texten beliebiger Länge und ist robust gegenüber Neigungen und Verzerrungen. Laut arXiv (2025) erreichen CRNN-Modelle eine Genauigkeit von 97.5% auf dem ICDAR 2019-Benchmark.
| OCR-Lösung | Genauigkeit | Geschwindigkeit | Sprachen | Plattform |
|---|---|---|---|---|
| ML Kit V2 | 96% | 10–30 ms | 45+ | Android, iOS |
| Apple Vision | 95% | 10–40 ms | 13+ | iOS, macOS |
| Tesseract 5 | 90% | 50–200 ms | 100+ | Plattformübergreifend |
| Google Cloud Vision | 98% | 500–1000 ms | 200+ | Server (API) |
CRNN für mobile Geräte — ML Kit verwendet ein MobileNetV2 + CRNN-Modell mit INT8-Quantisierung. Das Modell belegt 2–5 MB (latent) und läuft auf GPU/NPU über TFLite Delegate. Im Gegensatz zu Tesseract (klassische Pipeline) benötigt neuronales Netz-OCR keine separate Zeichensegmentierung und ist robuster gegenüber Rauschen. Nachteil: erfordert GPU oder NPU für Echtzeit — auf reiner CPU sinkt die Geschwindigkeit auf 5–10 FPS.
ML Kit Text Recognition ist das primäre OCR-Tool für mobile Anwendungen. Es ist in zwei Versionen verfügbar: V2 (lateinisch-basiert — optimiert für Lateinisch, Kyrillisch, Ziffern) und V1 (Lateinisch + CJK — Japanisch, Chinesisch, Koreanisch, aber langsamer). V2 verwendet ein End-to-End-CRNN-Modell, V1 ein älteres CNN + LSTM. Google empfiehlt V2 für alle Fälle außer wenn CJK-Erkennung benötigt wird.
ML Kit Ergebnisstruktur: Text → TextBlock → Line → Element (Word/Symbol). Jede Ebene hat einen Begrenzungsrahmen, eine Konfidenz (0..1) und erkannten Text. Text ist das Wurzelobjekt mit fullText (gesamter erkannter Text in einer Zeile). TextBlock ist ein logischer Textblock (Absatz, Spalte). Line ist eine Textzeile. Element ist ein Wort oder Symbol. Verwenden Sie confidence, um ungenaue Erkennungen zu filtern.
// ML Kit Text Recognition V2
val recognizer = TextRecognition.getClient(
TextRecognizerOptions.DEFAULT_OPTIONS
)
recognizer.process(inputImage)
.addOnSuccessListener { text ->
val fullText = text.text
text.textBlocks.forEach { block ->
val blockText = block.text
val blockRect = block.boundingBox
block.lines.forEach { line ->
line.elements.forEach { element ->
val word = element.text
val confidence = element.confidence
}
}
}
}
.addOnFailureListener { error -> /* error */ }
Texterkennung auf iOS über ML Kit: Die API ähnelt Android, verwendet aber UIImage/CVPixelBuffer anstelle von InputImage. ML Kit verwendet automatisch Apple Neural Engine auf A12+ über Core ML Delegate. Für iOS erreicht ML Kit Text Recognition V2 eine Geschwindigkeit von 15–30 ms auf dem iPhone 15 Pro. Für maximale Leistung konvertieren Sie UIImage vor der Übergabe in CVPixelBuffer — dies reduziert den Konvertierungsaufwand.
Apple Vision Framework bietet native OCR über VNRecognizeTextRequest (iOS 13+). Vision OCR verwendet Apple Neural Engine (ANE) und benötigt keine zusätzlichen SDKs. Unterstützt 13 Sprachen (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Vision erkennt automatisch die Sprache des Textes (Sprachkorrektur) und unterstützt mehrere Sprachen in einem Frame. Geschwindigkeit — 10–40 ms auf A16+.
Vision OCR Funktionen: recognitionLevel (schnell vs. genau), automaticLanguageDetection, customWords (Hinzufügen spezifischer Begriffe), supportsTop candidates (mehrere Erkennungsvarianten für unscharfen Text). Der schnelle Modus liefert 90% Genauigkeit bei 10–20 ms, der genaue Modus 95% bei 30–50 ms. Für die Produktion verwenden Sie den genauen Modus mit Filterung nach confidence >= 0.5.
import Vision
let request = VNRecognizeTextRequest { request, error in
guard let observations = request.results as? [VNRecognizedTextObservation] else { return }
for observation in observations {
let topCandidate = observation.topCandidates(1).first
let text = topCandidate?.string ?? ""
let confidence = topCandidate?.confidence ?? 0
let boundingBox = observation.boundingBox
}
}
request.recognitionLevel = .accurate
request.usesLanguageCorrection = true
let handler = VNImageRequestHandler(cgImage: cgImage, orientation: .up)
try handler.perform([request])
Vision vs. ML Kit auf iOS: Vision ist auf älteren Geräten (iPhone X–13) dank des integrierten ANE schneller. ML Kit ist bei komplexen Szenen (Verzerrungen, Neigungen, Blendungen) dank Googles Modell, das mit Millionen von Szenentextbildern trainiert wurde, genauer. Vision unterstützt keine Konfidenz für einzelne Zeichen (nur für Wörter), was die Filterung einschränkt. Für Dokumente — Vision (schneller), für Szenentext — ML Kit (genauer).
Tesseract OCR ist eine Open-Source-Texterkennungsengine, die von HP (1985–1998) entwickelt und von Google (2006+) gewartet wird. Tesseract 5 (LSTM-basiert) verwendet die CRNN-Neuronalnetzarchitektur, was eine deutliche Genauigkeitssteigerung gegenüber Tesseract 4 (klassisch + LSTM) bietet. Tesseract unterstützt 100+ Sprachen, einschließlich Kyrillisch, Arabisch, Hebräisch und CJK. Für Android — tess-two (Fork), für iOS — swift-tesseract.
Tesseract Nachteile: Geschwindigkeit 50–200 ms pro Frame (nur CPU, keine GPU-Beschleunigung), erfordert Bildvorverarbeitung (Binarisierung, Deskew, Orientierungserkennung) vor der Übergabe an die Engine, keine integrierte Texterkennung — der Bildbereich muss übergeben werden (oft zusammen mit OpenCV Text Detection oder EAST). Tesseract erreicht 90% Genauigkeit bei sauberen Dokumenten und ~70% bei Szenentext.
Wann Tesseract wählen: wenn die App auf Geräten ohne Google Play (Huawei) läuft, Unterstützung für seltene Sprachen (Sanskrit, Hebräisch) benötigt wird oder eine vollständige OCR-Pipeline-Anpassung (Training mit eigenen Schriftarten) erforderlich ist. In allen anderen Fällen sind ML Kit oder Vision schneller, genauer und erfordern weniger Code. Tesseract ist nur gerechtfertigt, wenn Einschränkungen bei Drittanbieter-SDKs bestehen.
// Tesseract OCR via tess-two
val tess = TessBaseAPI()
tess.init(dataPath, "rus+eng")
tess.pageSegMode = TessBaseAPI.PageSegMode.PSM_AUTO
val bitmap = BitmapFactory.decodeResource(resources, R.drawable.text)
val gray = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)
OpenCV.process(bitmap, gray) // Binarisierung + Deskew
tess.setImage(gray)
val result = tess.utF8Text
tess.recycle()
Vorverarbeitung für Tesseract ist obligatorisch: Konvertierung in Graustufen, Binarisierung (Otsu oder Adaptive), Deskew, Rauschentfernung (median blur). Ohne Vorverarbeitung sinkt die Genauigkeit von Tesseract auf 50–60%. Verwenden Sie OpenCV für die Vorverarbeitung: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Für Dokumente mit einheitlichem Hintergrund reicht die Binarisierung aus, für Szenentext ist eine vollständige Pipeline erforderlich.
Die Bildqualität ist der Hauptfaktor für die OCR-Genauigkeit. ML Kit und Vision haben eine integrierte Vorverarbeitung, aber für schwierige Fälle (dunkle Fotos, Unschärfe, Überbelichtung) verbessert eine zusätzliche Verarbeitung die Genauigkeit um 10–15%. Wichtige Techniken: Kontrastverstärkung (CLAHE), Schärfung (Unsharp Mask), perspektivische Korrektur (Perspective Transform), Entfernung von Schatten und Blendungen.
CLAHE (Contrast Limited Adaptive Histogram Equalization) — adaptive Histogramm-Equalisierung, die den Kontrast in lokalen Bereichen verbessert. CLAHE ist effektiv für Fotos von Dokumenten mit ungleichmäßiger Beleuchtung (teilweise im Schatten, teilweise beleuchtet). OpenCV Core.createCLAHE mit clipLimit=2.0 und tileGridSize=(8,8) liefert optimale Ergebnisse für OCR. Nach CLAHE verbessert sich die ML Kit-Genauigkeit bei dunklen Dokumenten von 70% auf 88%.
Perspektivische Korrektur — obligatorisch für Fotos von Dokumenten, die in einem Winkel aufgenommen wurden. Verwenden Sie OpenCV findHomography + warpPerspective, um das Dokument auszurichten. Für die automatische Dokumentgrenzenerkennung verwenden Sie Canny edge detection + findContours + approxPolyDP. Nach der perspektivischen Korrektur verbessert sich die OCR-Genauigkeit um 20–30% für Aufnahmen mit Winkeln >30°.
// CLAHE + OpenCV-Vorverarbeitung
val mat = Mat()
Utils.bitmapToMat(bitmap, mat)
Imgproc.cvtColor(mat, mat, Imgproc.COLOR_RGB2GRAY)
val clahe = Imgproc.createCLAHE(2.0, Size(8.0, 8.0))
clahe.apply(mat, mat)
Imgproc.GaussianBlur(mat, mat, Size(3.0, 3.0), 0.0)
Imgproc.threshold(mat, mat, 0.0, 255.0, Imgproc.THRESH_BINARY or Imgproc.THRESH_OTSU)
val processedBitmap = Bitmap.createBitmap(mat.cols(), mat.rows(), Bitmap.Config.ARGB_8888)
Utils.matToBitmap(mat, processedBitmap)
Texterkennung vor OCR — für Szenentext verwenden Sie EAST (Efficient Accurate Scene Text Detector) oder CRAFT (Character Region Awareness for Text Detection) vor der Übergabe an OCR. EAST erkennt Textbegrenzungsrahmen in einer Szene in 5–15 ms. CRAFT ist genauer (97%), aber langsamer (50–100 ms). Die Texterkennung ermöglicht das Herausfiltern von Bereichen ohne Text und die Übergabe nur relevanter Bereiche an OCR, was die Gesamtverarbeitung beschleunigt.
Dokumentenscanning — die am weitesten verbreitete OCR-Anwendung. Scan-Apps (CamScanner, Adobe Scan, Google Drive) verwenden ML Kit oder Vision, um Text aus Dokumentenfotos zu erkennen. Typische Pipeline: Dokumentgrenzenerkennung → perspektivische Korrektur → CLAHE-Verarbeitung → OCR → Formatierung (PDF, DOCX). ML Kit Text Recognition V2 bewältigt dies in 100–200 ms pro A4-Seite.
Echtzeit-Textübersetzung — eine Kombination aus OCR und maschineller Übersetzung. Google Translate, Microsoft Translator, Yandex Translate verwenden ML Kit oder Vision, um Text von der Kamera zu erkennen, und überlagern die Übersetzung über den Originaltext (AR-Übersetzung). Anforderung: Latenz < 200 ms für eine komfortable UX. ML Kit V2 + NNAPI liefert 30–80 ms pro Frame und lässt Spielraum für Übersetzung und Rendering.
Automatische Dateneingabe — OCR zum Extrahieren von Daten aus Visitenkarten, Bankkarten, Ausweisen. ML Kit erkennt den Text, dann parst die Nachbearbeitung die Struktur: Name, Telefon, E-Mail (Visitenkarten) oder Kartennummer, Ablaufdatum, CVV (Zahlungskarten). Für Visitenkarten verwenden Sie reguläre Ausdrücke nach OCR. Für Bankkarten — spezialisierte ML-Modelle (kostenpflichtig, ~99% Genauigkeit).
// OCR + AR-Übersetzung (vereinfacht)
let request = VNRecognizeTextRequest { req, _ in
guard let results = req.results as? [VNRecognizedTextObservation] else { return }
for observation in results {
let text = observation.topCandidates(1).first?.string ?? ""
let rect = observation.boundingBox
// Übersetzung und AR-Rendering über Rechteck
DispatchQueue.main.async {
overlayView.showTranslation(text, at: rect)
}
}
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false
OCR für sehbehinderte Benutzer — Assistive Technologie: Apps lesen Text von Verpackungen, Menüs, Schildern vor. Sie verwenden ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer). Wichtige Anforderung — Echtzeit mit niedriger Latenz (< 100 ms). Seeing AI (Microsoft) und Envision AI verwenden diesen Ansatz. Für Barrierefreiheits-Apps verwenden Sie den schnellen Erkennungsmodus und filtern Sie nicht nach Konfidenz — jeder Text ist für den Benutzer wertvoll.
Häufig gestellte Fragen
Texterkennung (OCR) ist eine Technologie, die es einer App ermöglicht, Text aus Fotos und Videos zu lesen. Die Smartphone-Kamera erfasst ein Bild, das neuronale Netz auf dem Gerät erkennt die Zeichen und gibt maschinenlesbaren Text zurück. In mobilen Apps wird OCR zum Scannen von Dokumenten, zur Kameraübersetzung, zur Dateneingabe von Visitenkarten und zur Erstellung barrierefreier Schnittstellen für sehbehinderte Benutzer verwendet.
ML Kit Text Recognition ist die beste Wahl für Android: 96% Genauigkeit, 10–30 ms Geschwindigkeit, 45 Sprachen, GPU-Beschleunigung über NNAPI, findet Text in jeder Ausrichtung. Tesseract ist eine Open-Source-Alternative (90% Genauigkeit, 100+ Sprachen, CPU), geeignet für Geräte ohne Google Play oder seltene Sprachen. Für 95% der Projekte wählen Sie ML Kit — es ist schneller, genauer und benötigt keine Bildvorverarbeitung.
Nein, ML Kit Text Recognition, Apple Vision und Tesseract arbeiten vollständig auf dem Gerät. ML Kit kann das Modell beim ersten Start herunterladen (heruntergeladener Modus), danach arbeitet es offline. Apple Vision ist in iOS integriert und benötigt kein Internet. Tesseract ist vollständig offline. Cloud-OCR (Google Cloud Vision, AWS Textract) funktioniert über das Internet, wird aber nicht in mobilen Echtzeitanwendungen verwendet.
ML Kit Text Recognition V2 unterstützt 45+ Sprachen aus lateinischen und kyrillischen Gruppen: Englisch, Russisch, Deutsch, Französisch, Spanisch, Italienisch, Portugiesisch, Polnisch, Ukrainisch, Rumänisch, Türkisch und andere. V1 (CJK) unterstützt zusätzlich Chinesisch, Japanisch, Koreanisch. Vollständige Liste — in der TextRecognizerOptions-Dokumentation. Für die Erkennung von Arabisch oder Hebräisch verwenden Sie Tesseract (>100 Sprachen).
Wichtige Methoden: Dokumentenausrichtung (perspektivische Korrektur über OpenCV), Kontrastverstärkung (CLAHE), Schärfung (Unsharp Mask), gute Beleuchtung (kontinuierliche Auto-Belichtung), Kamerastabilisierung (OIS/EIS). ML Kit behandelt grundlegende Verzerrungen selbst, aber bei Dokumenten mit perspektivischen Verzerrungen (>30°) verbessert die Vorverarbeitung die Genauigkeit um 20–30%. Verwenden Sie den schnellen Erkennungsmodus für Videos.
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