Reconnaissance de texte (OCR — Reconnaissance Optique de Caractères) est une technologie permettant d'extraire du texte imprimé ou manuscrit à partir d'images et de flux vidéo. Dans le développement mobile, la reconnaissance de texte est utilisée pour numériser des documents, reconnaître des plaques d'immatriculation, lire des cartes de visite et traduire du texte en temps réel. Les principales solutions OCR mobiles sont : ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (open-source). Selon Google ML Kit, 2025, Text Recognition V2 traite une image en 10–30 ms avec une précision de 96% sur le latin et 91% sur le cyrillique.
Points clés
Reconnaissance de texte (OCR) est un processus de vision par ordinateur qui convertit des images de texte en caractères lisibles par machine. L'OCR comprend des étapes : prétraitement d'image (binarisation, deskew, correction d'inclinaison), segmentation (division en lignes, mots, caractères), reconnaissance (classification de chaque caractère) et post-traitement (vérification dictionnaire, correction d'erreurs). Les systèmes OCR modernes (ML Kit, Vision) utilisent des réseaux neuronaux de bout en bout qui combinent toutes les étapes.
Types d'OCR : texte imprimé — reconnaissance de texte dactylographié à partir de documents, panneaux, écrans — précision 95–99% ; texte manuscrit — reconnaissance d'écriture manuscrite — précision 80–90% sur le latin, 70–80% sur le cyrillique ; texte de scène — texte dans des scènes naturelles : numéros de maison, panneaux de signalisation, noms de magasins — le plus difficile en raison des distorsions de perspective et des reflets.
CRNN + CTC Loss — l'architecture utilisée dans les modèles OCR modernes. Le réseau neuronal convolutif récurrent (CNN + LSTM) extrait les caractéristiques de l'image, tandis que la classification temporelle connexionniste décode la séquence de caractères sans nécessiter de segmentation préalable. CRNN fonctionne avec des textes de toute longueur et résiste aux inclinaisons et distorsions. Selon arXiv (2025), les modèles CRNN atteignent 97.5% de précision sur le benchmark ICDAR 2019.
| Solution OCR | Précision | Vitesse | Langues | Plateforme |
|---|---|---|---|---|
| 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+ | Multiplateforme |
| Google Cloud Vision | 98% | 500–1000 ms | 200+ | Serveur (API) |
CRNN pour appareils mobiles — ML Kit utilise un modèle MobileNetV2 + CRNN avec quantification INT8. Le modèle occupe 2–5 Mo (latent) et s'exécute sur GPU/NPU via TFLite Delegate. Contrairement à Tesseract (pipeline classique), l'OCR par réseau neuronal ne nécessite pas de segmentation de caractères séparée et est plus robuste au bruit. Inconvénient : nécessite GPU ou NPU pour le temps réel — sur CPU pur, la vitesse chute à 5–10 FPS.
ML Kit Text Recognition est l'outil OCR principal pour les applications mobiles. Il est disponible en deux versions : V2 (basée sur le latin — optimisée pour le latin, le cyrillique, les chiffres) et V1 (latin + CJK — japonais, chinois, coréen, mais plus lent). V2 utilise un modèle CRNN de bout en bout, V1 utilise un CNN + LSTM plus ancien. Google recommande V2 pour tous les cas sauf lorsque la reconnaissance CJK est nécessaire.
Structure du résultat ML Kit : Text → TextBlock → Line → Element (Word/Symbol). Chaque niveau a une boîte englobante, une confiance (0..1) et un texte reconnu. Text est l'objet racine avec fullText (tout le texte reconnu sur une seule ligne). TextBlock est un bloc logique de texte (paragraphe, colonne). Line est une ligne de texte. Element est un mot ou un symbole. Utilisez confidence pour filtrer les reconnaissances imprécises.
// 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 */ }
Reconnaissance de texte sur iOS via ML Kit : l'API est similaire à Android mais utilise UIImage/CVPixelBuffer au lieu d'InputImage. ML Kit utilise automatiquement Apple Neural Engine sur A12+ via Core ML Delegate. Pour iOS, ML Kit Text Recognition V2 atteint 15–30 ms sur iPhone 15 Pro. Pour des performances maximales, convertissez UIImage en CVPixelBuffer avant de le passer — cela réduit la surcharge de conversion.
Apple Vision Framework fournit un OCR natif via VNRecognizeTextRequest (iOS 13+). Vision OCR utilise Apple Neural Engine (ANE) et ne nécessite pas de SDK supplémentaires. Prend en charge 13 langues (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Vision détecte automatiquement la langue du texte (correction de langue) et prend en charge plusieurs langues dans une seule image. Vitesse — 10–40 ms sur A16+.
Fonctionnalités de Vision OCR : recognitionLevel (rapide vs précis), automaticLanguageDetection, customWords (ajout de termes spécifiques), supportsTop candidates (plusieurs variantes de reconnaissance pour le texte flou). Le mode rapide offre 90% de précision en 10–20 ms, le mode précis 95% en 30–50 ms. Pour la production, utilisez le mode précis avec filtrage par 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 sur iOS : Vision est plus rapide sur les anciens appareils (iPhone X–13) grâce à l'ANE intégré. ML Kit est plus précis sur les scènes complexes (distorsions, inclinaisons, reflets) grâce au modèle de Google entraîné sur des millions d'images de scene text. Vision ne prend pas en charge la confiance pour les caractères individuels (uniquement pour les mots), ce qui limite le filtrage. Pour les documents — Vision (plus rapide), pour le scene text — ML Kit (plus précis).
Tesseract OCR est un moteur de reconnaissance de texte open-source développé par HP (1985–1998) et maintenu par Google (2006+). Tesseract 5 (basé sur LSTM) utilise l'architecture de réseau neuronal CRNN, offrant une augmentation significative de précision par rapport à Tesseract 4 (classique + LSTM). Tesseract prend en charge 100+ langues, dont le cyrillique, l'arabe, l'hébreu et le CJK. Pour Android — tess-two (fork), pour iOS — swift-tesseract.
Inconvénients de Tesseract : vitesse 50–200 ms par image (CPU uniquement, sans accélération GPU), nécessite un prétraitement d'image (binarisation, deskew, détection d'orientation) avant de passer au moteur, pas de détection de texte intégrée — il faut passer la région de l'image (souvent avec OpenCV Text Detection ou EAST). Tesseract atteint 90% de précision sur les documents propres et ~70% sur le scene text.
Quand choisir Tesseract : si l'application fonctionne sur des appareils sans Google Play (Huawei), a besoin de support pour des langues rares (sanskrit, hébreu), ou nécessite une personnalisation complète du pipeline OCR (apprentissage sur des polices personnalisées). Pour tous les autres cas, ML Kit ou Vision sont plus rapides, plus précis et nécessitent moins de code. Tesseract n'est justifié que lorsqu'il y a des restrictions sur les SDK tiers.
// 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) // Binarisation + deskew
tess.setImage(gray)
val result = tess.utF8Text
tess.recycle()
Prétraitement pour Tesseract est obligatoire : conversion en niveaux de gris, binarisation (Otsu ou Adaptive), deskew, suppression du bruit (median blur). Sans prétraitement, la précision de Tesseract tombe à 50–60%. Utilisez OpenCV pour le prétraitement : Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Pour les documents avec fond uniforme, la binarisation suffit ; pour le scene text, un pipeline complet est nécessaire.
La qualité de l'image est le principal facteur de précision de l'OCR. ML Kit et Vision ont un prétraitement intégré, mais pour les cas difficiles (photos sombres, flou, surexposition), un traitement supplémentaire améliore la précision de 10–15%. Techniques clés : amélioration du contraste (CLAHE), netteté (unsharp mask), correction de perspective (perspective transform), suppression des ombres et des reflets.
CLAHE (Égalisation d'histogramme adaptative à contraste limité) — égalisation d'histogramme adaptative qui améliore le contraste dans les régions locales. CLAHE est efficace pour les photos de documents avec un éclairage inégal (partie à l'ombre, partie éclairée). OpenCV Core.createCLAHE avec clipLimit=2.0 et tileGridSize=(8,8) donne des résultats optimaux pour l'OCR. Après CLAHE, la précision de ML Kit sur les documents sombres passe de 70% à 88%.
Correction de perspective — obligatoire pour les photos de documents prises en angle. Utilisez OpenCV findHomography + warpPerspective pour aligner le document. Pour la détection automatique des bords du document, utilisez Canny edge detection + findContours + approxPolyDP. Après la correction de perspective, la précision de l'OCR s'améliore de 20–30% pour les prises de vue à angles >30°.
// CLAHE + prétraitement OpenCV
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)
Détection de texte avant l'OCR — pour le scene text, utilisez EAST (Détecteur de texte de scène efficace et précis) ou CRAFT (Conscience de région de caractères pour la détection de texte) avant de passer à l'OCR. EAST détecte les boîtes englobantes de texte dans une scène en 5–15 ms. CRAFT est plus précis (97%) mais plus lent (50–100 ms). La détection de texte permet de filtrer les zones sans texte et de passer uniquement les régions pertinentes à l'OCR, accélérant le traitement global.
Numérisation de documents — l'application la plus répandue de l'OCR. Les apps de numérisation (CamScanner, Adobe Scan, Google Drive) utilisent ML Kit ou Vision pour reconnaître le texte à partir de photos de documents. Pipeline typique : détection des bords du document → correction de perspective → traitement CLAHE → OCR → formatage (PDF, DOCX). ML Kit Text Recognition V2 le gère en 100–200 ms par page A4.
Traduction de texte en temps réel — combinaison d'OCR et de traduction automatique. Google Traduction, Microsoft Translator, Yandex Translate utilisent ML Kit ou Vision pour reconnaître le texte de la caméra et superposent la traduction sur le texte original (traduction AR). Exigence : latence < 200 ms pour une UX confortable. ML Kit V2 + NNAPI offre 30–80 ms par image, laissant de la marge pour la traduction et le rendu.
Saisie automatique de données — OCR pour extraire des données de cartes de visite, cartes bancaires, pièces d'identité. ML Kit reconnaît le texte, puis le post-traitement analyse la structure : nom, téléphone, email (cartes de visite) ou numéro de carte, date d'expiration, CVV (cartes de paiement). Pour les cartes de visite, utilisez des expressions régulières après l'OCR. Pour les cartes bancaires — modèles ML spécialisés (payants, ~99% de précision).
// OCR + traduction AR (simplifié)
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
// Traduction et rendu AR sur le rectangle
DispatchQueue.main.async {
overlayView.showTranslation(text, at: rect)
}
}
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false
OCR pour les personnes malvoyantes — Technologie d'assistance : les apps lisent à haute voix le texte des emballages, menus, panneaux. Elles utilisent ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer). Exigence clé — temps réel avec faible latence (< 100 ms). Seeing AI (Microsoft) et Envision AI utilisent cette approche. Pour les apps d'accessibilité, utilisez le mode de reconnaissance rapide et ne filtrez pas par confiance — tout texte a de la valeur pour l'utilisateur.
Questions fréquentes
Reconnaissance de texte (OCR) est une technologie qui permet à une application de "lire" du texte à partir de photos et de vidéos. La caméra du smartphone capture une image, le réseau neuronal sur l'appareil reconnaît les caractères et renvoie du texte lisible par machine. Dans les applications mobiles, l'OCR est utilisé pour numériser des documents, traduire avec la caméra, saisir des données de cartes de visite et créer des interfaces accessibles pour les personnes malvoyantes.
ML Kit Text Recognition est le meilleur choix pour Android : 96% de précision, vitesse de 10–30 ms, 45 langues, accélération GPU via NNAPI, trouve le texte dans n'importe quelle orientation. Tesseract est une alternative open-source (90% de précision, 100+ langues, CPU), adaptée aux appareils sans Google Play ou aux langues rares. Pour 95% des projets, choisissez ML Kit — il est plus rapide, plus précis et ne nécessite pas de prétraitement d'image.
Non, ML Kit Text Recognition, Apple Vision et Tesseract fonctionnent entièrement sur l'appareil. ML Kit peut télécharger le modèle au premier lancement (mode téléchargé), après quoi il fonctionne hors ligne. Apple Vision est intégré à iOS et ne nécessite pas Internet. Tesseract est complètement hors ligne. L'OCR dans le cloud (Google Cloud Vision, AWS Textract) fonctionne via Internet mais n'est pas utilisé dans les applications mobiles en temps réel.
ML Kit Text Recognition V2 prend en charge 45+ langues des groupes latins et cyrilliques : anglais, russe, allemand, français, espagnol, italien, portugais, polonais, ukrainien, roumain, turc et autres. V1 (CJK) prend en charge supplémentaire le chinois, le japonais, le coréen. Liste complète — dans la documentation TextRecognizerOptions. Pour reconnaître l'arabe ou l'hébreu, utilisez Tesseract (>100 langues).
Méthodes principales : alignement du document (correction de perspective via OpenCV), amélioration du contraste (CLAHE), netteté (unsharp mask), bon éclairage (auto-exposition continue), stabilisation de la caméra (OIS/EIS). ML Kit gère les distorsions de base lui-même, mais pour les documents avec distorsions de perspective (>30°), le prétraitement améliore la précision de 20–30%. Utilisez le mode de reconnaissance rapide pour la vidéo.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi