La reconnaissance optique de caractères (OCR) est le processus de reconnaissance de caractères à partir d'images à l'aide de techniques de vision par ordinateur et d'apprentissage automatique. Cette application de référence montre comment utiliser TensorFlow Lite pour faire de l'OCR. Il utilise une combinaison d' un modèle de détection de texte et d'un modèle de reconnaissance de texte en tant que pipeline OCR pour reconnaître les caractères de texte.
Commencer
Si vous débutez avec TensorFlow Lite et que vous travaillez avec Android, nous vous recommandons d'explorer l'exemple d'application suivant qui peut vous aider à démarrer.
Si vous utilisez une plateforme autre qu'Android, ou si vous connaissez déjà les API TensorFlow Lite , vous pouvez télécharger les modèles depuis TF Hub .
Comment ça fonctionne
Les tâches d'OCR sont souvent décomposées en 2 étapes. Tout d'abord, nous utilisons un modèle de détection de texte pour détecter les boîtes englobantes autour des textes possibles. Deuxièmement, nous alimentons les boîtes englobantes traitées dans un modèle de reconnaissance de texte pour déterminer des caractères spécifiques à l'intérieur des boîtes englobantes (nous devons également effectuer une suppression non maximale, une transformation de perspective, etc. avant la reconnaissance de texte). Dans notre cas, les deux modèles proviennent de TensorFlow Hub et ce sont des modèles quantifiés FP16.
Références de performances
Les numéros de référence de performance sont générés avec l'outil décrit ici .
Nom du modèle | Taille du modèle | Dispositif | CPU | GPU |
---|---|---|---|---|
Détection de texte | 45,9 Mo | Pixel 4 (Android 10) | 181,93 ms* | 89,77 ms* |
Reconnaissance de texte | 16,8 Mo | Pixel 4 (Android 10) | 338,33 ms* | N / A** |
* 4 fils utilisés.
** ce modèle ne peut pas utiliser le délégué GPU car nous avons besoin d'opérations TensorFlow pour l'exécuter
Contributions
Le modèle de détection de texte accepte un Tensor 4-D float32
de (1, 320, 320, 3) en entrée.
Le modèle de reconnaissance de texte accepte un Tensor 4-D float32
de (1, 31, 200, 1) en entrée.
Les sorties
Le modèle de détection de texte renvoie un float32
4-D de forme (1, 80, 80, 5) comme boîte englobante et un float32
4-D de forme (1, 80, 80, 5) comme score de détection.
Le modèle de reconnaissance de texte renvoie un float32
de forme (1, 48) comme indices de mappage à la liste alphabétique '0123456789abcdefghijklmnopqrstuvwxyz'
Limites
Le modèle de reconnaissance de texte actuel est formé à l'aide de données synthétiques avec des lettres et des chiffres en anglais, de sorte que seul l'anglais est pris en charge.
Les modèles ne sont pas assez généraux pour l'OCR dans la nature (par exemple, des images aléatoires prises par un appareil photo de smartphone dans des conditions de faible éclairage).
Nous avons donc choisi 3 logos de produits Google uniquement pour montrer comment faire de l'OCR avec TensorFlow Lite. Si vous recherchez un produit OCR de qualité production prêt à l'emploi, vous devriez envisager Google ML Kit . Le kit ML, qui utilise TFLite en dessous, devrait être suffisant pour la plupart des cas d'utilisation d'OCR, mais dans certains cas, vous souhaiterez peut-être créer votre propre solution OCR avec TFLite. Quelques exemples sont:
- Vous avez vos propres modèles TFLite de détection/reconnaissance de texte que vous aimeriez utiliser
- Vous avez des exigences professionnelles particulières (c'est-à-dire, reconnaître des textes à l'envers) et devez personnaliser le pipeline OCR
- Vous souhaitez prendre en charge des langues non couvertes par ML Kit
- Les appareils de vos utilisateurs cibles ne disposent pas nécessairement des services Google Play installés
Références
- Exemple de détection/reconnaissance de texte OpenCV : https://github.com/opencv/opencv/blob/master/samples/dnn/text_detection.cpp
- Projet communautaire OCR TFLite par les contributeurs de la communauté : https://github.com/tulasiram58827/ocr_tflite
- Détection de texte OpenCV : https://www.pyimagesearch.com/2018/08/20/opencv-text-detection-east-text-detector/
- Détection de texte basée sur l'apprentissage en profondeur à l'aide d'OpenCV : https://learnopencv.com/deep-learning-based-text-detection-using-opencv-c-python/