Dans ce billet de blog, nous allons essayer d'expliquer la technologie derrière le moteur Tesseract le plus utilisé, qui a été mis à niveau avec les dernières connaissances en matière de reconnaissance optique de caractères. Cet article servira également de guide / tutoriel sur la façon d'implémenter l'OCR en python à l'aide du moteur Tesseract. Nous allons parcourir les modules suivants:
- Fonctionnalités Tesseract OCR
- Prétraitement pour l'OCR à l'aide d'OpenCV
- Exécution de Tesseract avec CLI et Python
- Limitations du moteur Tesseract
Table des matières
- Introduction
- Outils OCR open source
- Tesseract OCR
- OCR avec Pytesseract et OpenCV
- Formation Tesseract sur les données personnalisées
- Limitations de Tesseract
- OCR avec Nanonets
- Conclusion
Introduction
ROC = Reconnaissance optique de caractères. En d'autres termes, les systèmes OCR transforment une image bidimensionnelle de texte, qui pourrait contenir du texte imprimé par machine ou manuscrit à partir de sa représentation d'image en texte lisible par machine. L'OCR en tant que processus se compose généralement de plusieurs sous-processus à exécuter aussi précisément que possible. Les sous-processus sont :
- Prétraitement de l'image
- Localisation de texte
- Segmentation des caractères
- Reconnaissance des personnages
- Poster traitement
Les sous-processus de la liste ci-dessus peuvent bien sûr différer, mais ce sont approximativement des étapes nécessaires pour aborder la reconnaissance automatique des caractères. Dans le logiciel OCR, son objectif principal est d'identifier et de capturer tous les mots uniques en utilisant différentes langues à partir de caractères de texte écrit.
Pendant près de deux décennies, les systèmes de reconnaissance optique de caractères ont été largement utilisés pour fournir une saisie de texte automatisée dans des systèmes informatisés. Pourtant, pendant tout ce temps, les systèmes OCR conventionnels (comme ROC zonale) n'ont jamais surmonté leur incapacité à lire plus qu'une poignée de polices de caractères et de formats de page. Les caractères à espacement proportionnel (qui comprennent pratiquement toutes les copies composées), les polices d'imprimante laser et même de nombreuses polices de machine à écrire non proportionnelles sont restées hors de portée de ces systèmes. Et par conséquent, l'OCR conventionnel n'a jamais eu plus qu'un impact marginal sur le nombre total de documents devant être convertis au format numérique.
Les moteurs OCR de nouvelle génération traitent très bien ces problèmes mentionnés ci-dessus en utilisant les dernières recherches dans le domaine de l'apprentissage en profondeur. En tirant parti de la combinaison de modèles profonds et d'énormes ensembles de données accessibles au public, les modèles atteignent des précisions de pointe sur des tâches données. De nos jours, il est également possible de générer des données synthétiques avec différentes polices utilisant des réseaux contradictoires génératifs et quelques autres approches génératives.
La reconnaissance optique des caractères reste un problème difficile lorsque le texte apparaît dans des environnements sans contrainte, comme scènes naturelles, en raison de distorsions géométriques, d'arrière-plans complexes et de polices diverses. La technologie détient toujours un immense potentiel en raison des différents cas d'utilisation de l'OCR basé sur l'apprentissage profond comme
- lecteurs de plaques d'immatriculation
- dématérialisation des factures
- numérisation des menus
- numérisation des cartes d'identité
Vous avez un problème d'OCR en tête ? Vous souhaitez réduire les coûts de saisie de données de votre organisation ? Dirigez-vous vers nanonets et créer des modèles OCR pour extraire le texte des images or extraire des données de PDF basé sur l'IA OCR PDF!
Outils OCR open source
Il ya beaucoup de reconnaissance optique de caractères logiciel disponible. Je n'ai trouvé aucune comparaison de qualité entre eux, mais j'écrirai sur certains d'entre eux qui semblent être les plus conviviaux pour les développeurs.
Tesseract - un moteur OCR open source qui a gagné en popularité parmi les développeurs OCR. Même si cela peut parfois être pénible à mettre en œuvre et à modifier, il n'y avait pas trop d'alternatives OCR gratuites et puissantes sur le marché depuis très longtemps. Tesseract a commencé comme doctorant. projet de recherche dans HP Labs, Bristol. Il a gagné en popularité et a été développé par HP entre 1984 et 1994. En 2005, HP a publié Tesseract en tant que logiciel open source. Depuis 2006, il est développé par Google.
OCRopus - OCRopus est un système OCR open source permettant une évaluation et une réutilisation aisées des composants OCR par les chercheurs et les entreprises. Une collection de programmes d'analyse de documents, pas un système OCR clé en main. Pour l'appliquer à vos documents, vous devrez peut-être effectuer un prétraitement d'image et éventuellement former de nouveaux modèles. En plus des scripts de reconnaissance eux-mêmes, il existe plusieurs scripts pour l'édition et la correction de la vérité du terrain, la mesure des taux d'erreur, la détermination de matrices de confusion faciles à utiliser et à éditer.
Oculaire - Ocular fonctionne mieux sur les documents imprimés à l'aide d'une presse manuelle, y compris ceux écrits dans plusieurs langues. Il fonctionne en utilisant la ligne de commande. Il s'agit d'un système OCR historique de pointe. Ses principales caractéristiques sont:
- Apprentissage non supervisé de polices inconnues: ne nécessite que des images de document et un corpus de texte.
- Capacité à gérer les documents bruyants: encrage irrégulier, espacement, alignement vertical
- Prise en charge des documents multilingues, y compris ceux dont la commutation de code au niveau des mots est considérable.
- Apprentissage non supervisé des modèles de variation orthographique, y compris l'orthographe archaïque et la sténographie de l'imprimante.
- Transcription simultanée et conjointe sous des formes diplomatiques (littérales) et normalisées.
SwiftOCR - Je mentionnerai également le moteur OCR écrit en Swift car il y a un énorme développement en cours pour faire progresser l'utilisation de Swift comme langage de programmation de développement utilisé pour l'apprentissage en profondeur. Check-out blogue pour en savoir plus pourquoi. SwiftOCR est une bibliothèque OCR simple et rapide qui utilise des réseaux de neurones pour la reconnaissance d'images. SwiftOCR affirme que leur moteur surpasse la bibliothèque Tessaract bien connue.
Dans cet article de blog, nous mettrons focus sur Tesseract OCR et découvrez comment il fonctionne et comment il est utilisé.
Tesseract OCR
Tesseract est un moteur de reconnaissance de texte (OCR) open source, disponible sous la licence Apache 2.0. Il peut être utilisé directement ou (pour les programmeurs) en utilisant une API pour extraire le texte imprimé des images. Il prend en charge une grande variété de langues. Tesseract n'a pas d'interface graphique intégrée, mais il en existe plusieurs disponibles sur le Page 3rdParty. Tesseract est compatible avec de nombreux langages de programmation et frameworks grâce à des wrappers qui peuvent être trouvés ici. Il peut être utilisé avec l'analyse de mise en page existante pour reconnaître le texte dans un document volumineux, ou il peut être utilisé en conjonction avec un détecteur de texte externe pour reconnaître le texte d'une image d'une seule ligne de texte.
Tesseract 4.00 comprend un nouveau sous-système de réseau neuronal configuré comme un identificateur de ligne de texte. Il a ses origines dans LSTM basé sur Python d'OCRopus mais a été repensé pour Tesseract en C ++. Le système de réseau neuronal de Tesseract est antérieur à TensorFlow mais est compatible avec celui-ci, car il existe un langage de description de réseau appelé VGSL (Variable Graph Specification Language), également disponible pour TensorFlow.
Pour reconnaître une image contenant un seul caractère, nous utilisons généralement un réseau neuronal convolutionnel (CNN). Le texte de longueur arbitraire est une séquence de caractères, et de tels problèmes sont résolus en utilisant des RNN et LSTM est une forme populaire de RNN. Lisez cet article pour en savoir plus sur LSTM.
Technologie - Comment ça marche
Les LSTM sont parfaits pour l'apprentissage des séquences mais ralentissent beaucoup lorsque le nombre d'états est trop important. Il y a des résultats empiriques qui suggèrent qu'il vaut mieux demander à un LSTM d'apprendre une longue séquence plutôt qu'une courte séquence de nombreuses classes. Tesseract s'est développé à partir du modèle OCRopus en Python qui était un fork d'un LSMT en C ++, appelé CLSTM. CLSTM est une implémentation du modèle de réseau de neurones récurrent LSTM en C ++, utilisant la bibliothèque Eigen pour les calculs numériques.
Legacy Tesseract 3.x dépendait du processus en plusieurs étapes où nous pouvons différencier les étapes:
- Recherche de mots
- Recherche de ligne
- Classification des caractères
La recherche de mots a été effectuée en organisant les lignes de texte en taches, et les lignes et les régions sont analysées pour un texte à hauteur fixe ou proportionnelle. Les lignes de texte sont divisées en mots différemment selon le type d'espacement des caractères. La reconnaissance se déroule ensuite en deux étapes. Lors de la première passe, une tentative est faite pour reconnaître tour à tour chaque mot. Chaque mot satisfaisant est transmis à un classificateur adaptatif en tant que données d'apprentissage. Le classificateur adaptatif obtient alors une chance de reconnaître plus précisément le texte plus bas dans la page.
La modernisation de l'outil Tesseract a été un effort sur le nettoyage du code et l'ajout d'un nouveau modèle LSTM. L'image d'entrée est traitée dans des boîtes (rectangle) ligne par ligne alimentant le modèle LSTM et donnant la sortie. Dans l'image ci-dessous, nous pouvons visualiser comment cela fonctionne.
Après avoir ajouté un nouvel outil de formation et formé le modèle avec beaucoup de données et de polices, Tesseract obtient de meilleures performances. Pourtant, pas assez bon pour travailler sur du texte manuscrit et des polices étranges. Il est possible d'affiner ou de recycler les couches supérieures pour l'expérimentation.
Installation de Tesseract
L'installation de tesseract sur Windows est facile avec les binaires précompilés trouvés ici. N'oubliez pas de modifier la variable d'environnement «path» et d'ajouter le chemin tesseract. Pour une installation Linux ou Mac, il est installé avec quelques commandes.
Après l'installation, vérifiez que tout fonctionne en tapant la commande dans le terminal ou cmd:
$ tesseract --version
Et vous verrez la sortie similaire à:
tesseract 4.0.0
leptonica-1.76.0
libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.8
Found AVX2
Found AVX
Found SSE
Vous pouvez installer le wrapper python pour tesseract après cela en utilisant pip.
$ pip install pytesseract
La bibliothèque Tesseract est livrée avec un outil en ligne de commande pratique appelé tesseract. Nous pouvons utiliser cet outil pour effectuer l'OCR sur les images et la sortie est stockée dans un fichier texte. Si nous voulons intégrer Tesseract dans notre code C ++ ou Python, nous utiliserons l'API de Tesseract.
Exécution de Tesseract avec CLI
Appelez le moteur Tesseract sur l'image avec chemin_image et convertir l'image en texte, écrit ligne par ligne dans l'invite de commande en tapant ce qui suit:
$ tesseract image_path stdout
Pour écrire le texte de sortie dans un fichier:
$ tesseract image_path text_result.txt
Pour spécifier le nom du modèle de langue, écrivez le raccourci de langue après -l drapeau, par défaut, il prend la langue anglaise:
$ tesseract image_path text_result.txt -l eng
Par défaut, Tesseract attend une page de texte lorsqu'il segmente une image. Si vous cherchez simplement à ROC une petite région, essayez un mode de segmentation différent, en utilisant le –Psm argument. Il y a 14 modes disponibles qui peuvent être trouvés ici. Par défaut, Tesseract automatise entièrement la segmentation des pages mais n'effectue pas d'orientation et de détection de script. Pour spécifier le paramètre, tapez ce qui suit:
$ tesseract image_path text_result.txt -l eng --psm 6
Il y a aussi un argument plus important, le mode moteur OCR (oem). Tesseract 4 dispose de deux moteurs OCR: le moteur Tesseract hérité et le moteur LSTM. Il existe quatre modes de fonctionnement choisis à l'aide de l'option –oem.
0 Moteur hérité uniquement.
1 Moteur LSTM des réseaux neuronaux uniquement.
2 moteurs Legacy + LSTM.
3 Par défaut, en fonction de ce qui est disponible.
OCR avec Pytesseract et OpenCV
Pytesseract est un wrapper pour Tesseract-OCR Engine. Il est également utile en tant que script d'invocation autonome pour tesseract, car il peut lire tous les types d'images pris en charge par les bibliothèques d'imagerie Pillow et Leptonica, y compris jpeg, png, gif, bmp, tiff et autres. Plus d'informations sur l'approche Python lire ici. Le code de ce didacticiel se trouve dans ce dépôt.
import cv2 import pytesseract img = cv2.imread('image.jpg') # Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)
Prétraitement pour Tesseract
Pour éviter toutes les manières dont votre précision de sortie tesseract peut chuter, vous devez vous assurer que l'image est appropriée prétraité.
Cela comprend le rééchelonnement, la binarisation, l'élimination du bruit, le redressement, etc.
Pour prétraiter l'image pour OCR, utilisez l'une des fonctions python suivantes ou suivez les Documentation OpenCV.
import cv2
import numpy as np img = cv2.imread('image.jpg') # get grayscale image
def get_grayscale(image): return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # noise removal
def remove_noise(image): return cv2.medianBlur(image,5) #thresholding
def thresholding(image): return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1] #dilation
def dilate(image): kernel = np.ones((5,5),np.uint8) return cv2.dilate(image, kernel, iterations = 1) #erosion
def erode(image): kernel = np.ones((5,5),np.uint8) return cv2.erode(image, kernel, iterations = 1) #opening - erosion followed by dilation
def opening(image): kernel = np.ones((5,5),np.uint8) return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel) #canny edge detection
def canny(image): return cv2.Canny(image, 100, 200) #skew correction
def deskew(image): coords = np.column_stack(np.where(image > 0)) angle = cv2.minAreaRect(coords)[-1] if angle < -45: angle = -(90 + angle) else: angle = -angle (h, w) = image.shape[:2] center = (w // 2, h // 2) M = cv2.getRotationMatrix2D(center, angle, 1.0) rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE) return rotated #template matching
def match_template(image, template): return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)
Travaillons avec un exemple pour mieux voir les choses. Voici à quoi ressemble notre image originale -
Après le prétraitement avec le code suivant
image = cv2.imread('aurebesh.jpg') gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)
et en traçant les images résultantes, nous obtenons les résultats suivants.
La sortie de l'image originale ressemble à ceci -
GALACTIC BASIC
(AUREBESH) RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED
Voici à quoi ressemble la sortie pour différentes images prétraitées -
Image de bord Canny (pas si bon) -
CAE Cn Cae AS
(AUREBESE) EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e ecm emclomt Cia cuoomct mi im
Image avec seuil -
GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH
Image d'ouverture -
GALACTIC BASIC
(AUREZEBELSH)
KEE VTMEUOU EB iw oN es
A BC D EF F @ H | J K LT Ww
AOGdrcrT7WTt HYOAVa4
WO P Q R BS T U VW WK y Z
i J
Oo 1 2 3 46 8 7 SC Ps,
VY ir- -rp,ptUuY?
a a a
AGoOAnNnoOID
CH AE BO KH ®@ OO SH TH
Comment contourner le texte
En utilisant Pytesseract, vous pouvez obtenir les informations du cadre de sélection pour vos résultats d'OCR en utilisant les éléments suivants code.
Le script ci-dessous vous donnera des informations sur la boîte englobante pour chaque personnage détecté par tesseract pendant l'OCR.
import cv2
import pytesseract img = cv2.imread('image.jpg') h, w, c = img.shape
boxes = pytesseract.image_to_boxes(img) for b in boxes.splitlines(): b = b.split(' ') img = cv2.rectangle(img, (int(b[1]), h - int(b[2])), (int(b[3]), h - int(b[4])), (0, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)
Si vous voulez des cases autour des mots au lieu des caractères, la fonction image_to_data
vous sera utile. Vous pouvez utiliser le image_to_data
fonction avec le type de sortie spécifié avec pytesseract Output
.
Vous avez un problème d'OCR en tête? Vous souhaitez numériser des factures, des PDF ou des plaques d'immatriculation? Rendez-vous sur nanonets et construisez des modèles OCR gratuitement!
Nous utiliserons l'exemple de facture ci-dessus pour tester nos sorties tesseract.
import cv2
import pytesseract
from pytesseract import Output img = cv2.imread('invoice-sample.jpg') d = pytesseract.image_to_data(img, output_type=Output.DICT)
print(d.keys())
Cela devrait vous donner la sortie suivante -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])
En utilisant ce dictionnaire, nous pouvons obtenir chaque mot détecté, leurs informations de cadre englobant, le texte qu'ils contiennent et les scores de confiance pour chacun.
Vous pouvez tracer les cases en utilisant le code ci-dessous -
n_boxes = len(d['text'])
for i in range(n_boxes): if int(d['conf'][i]) > 60: (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i]) img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)
Voici à quoi cela ressemblerait pour l'image d'un exemple de facture.
Correspondance de modèle de texte
Prenons l'exemple de la recherche d'une date dans une image. Ici, notre modèle sera un modèle d'expression régulière que nous associerons à nos résultats d'OCR pour trouver les zones de délimitation appropriées. Nous utiliserons le regex
module et le image_to_data
fonction pour cela.
import re
import cv2
import pytesseract
from pytesseract import Output img = cv2.imread('invoice-sample.jpg')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
keys = list(d.keys()) date_pattern = '^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)dd$' n_boxes = len(d['text'])
for i in range(n_boxes): if int(d['conf'][i]) > 60: if re.match(date_pattern, d['text'][i]): (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i]) img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)
Comme prévu, nous obtenons une case autour de la date de facturation dans l'image.
Modes de segmentation de page
Il existe plusieurs façons d'analyser une page de texte. L'API Tesseract propose plusieurs modes de segmentation de page si vous souhaitez exécuter l'OCR uniquement sur une petite région ou dans des orientations différentes, etc.
Voici une liste des modes de segmentation de page pris en charge par tesseract –
0 Orientation et détection de script (OSD) uniquement.
1 Segmentation automatique des pages avec OSD.
2 Segmentation automatique des pages, mais pas d'OSD, ni d'OCR.
3 Segmentation de page entièrement automatique, mais pas d'OSD. (Défaut)
4 Supposons une seule colonne de texte de tailles variables.
5 Supposons un seul bloc uniforme de texte aligné verticalement.
Supposons un seul bloc de texte uniforme.
7 Traitez l'image comme une seule ligne de texte.
8 Traitez l'image comme un seul mot.
9 Traitez l'image comme un seul mot dans un cercle.
10 Traitez l'image comme un seul caractère.
11 Texte fragmenté. Trouvez autant de texte que possible sans ordre particulier.
12 Texte fragmenté avec OSD.
13 Ligne brute. Traitez l'image comme une seule ligne de texte, en contournant les hacks spécifiques à Tesseract.
Pour changer votre mode de segmentation de page, changez le --psm
dans votre chaîne de configuration personnalisée à l'un des codes de mode mentionnés ci-dessus.
Détecter l'orientation et le script
Vous pouvez détecter l'orientation du texte dans votre image ainsi que le script dans lequel il est écrit. L'image suivante -
après avoir parcouru le code suivant -
osd = pytesseract.image_to_osd(img)
angle = re.search('(?<=Rotate: )d+', osd).group(0)
script = re.search('(?<=Script: )d+', osd).group(0)
print("angle: ", angle)
print("script: ", script)
imprimera la sortie suivante.
angle: 90
script: Latin
Détecter uniquement les chiffres
Prenons cette image par exemple -
Le texte extrait de cette image ressemble à ceci.
‘Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no 43876324
Dated 17%h Nov2018
Pono 76496234
Vous ne pouvez reconnaître que les chiffres en modifiant la configuration comme suit
custom_config = r'--oem 3 --psm 6 outputbase digits'
print(pytesseract.image_to_string(img, config=custom_config))
La sortie ressemblera à ceci.
-- . 43876324
172018
0 76496234
Liste blanche des personnages
Supposons que vous souhaitiez uniquement détecter certains caractères de l'image donnée et ignorer le reste. Vous pouvez spécifier votre liste blanche de caractères (ici, nous avons utilisé tous les caractères minuscules de a à z uniquement) en utilisant la configuration suivante.
custom_config = r'-c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz --psm 6'
print(pytesseract.image_to_string(img, config=custom_config))
Production -
customername
roject
tnvoleeno
ated alliumenergyservices
e
thovo
Liste noire des personnages
Si vous êtes sûr que certains caractères ou expressions n'apparaîtront certainement pas dans votre texte (l'OCR retournera un texte incorrect à la place des caractères sur liste noire sinon), vous pouvez mettre ces caractères sur liste noire en utilisant la configuration suivante.
custom_config = r'-c tessedit_char_blacklist=0123456789 --psm 6'
pytesseract.image_to_string(img, config=custom_config)
Production -
Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no
Dated %h Nov%
Pono
Détecter dans plusieurs langues
Vous pouvez vérifier les langues disponibles en tapant ceci dans le terminal
$ tesseract --list-langs
Pour télécharger tesseract pour une langue spécifique
$ sudo apt-get install tesseract-ocr-LANG
où LANG est le code à trois lettres de la langue dont vous avez besoin. Vous pouvez trouver les valeurs LANG ici.
Vous pouvez télécharger le .traindata
fichier pour la langue dont vous avez besoin ici et placez-le dans $TESSDATA_PREFIX
répertoire (cela devrait être le même que celui où le tessdata
est installé) et il doit être prêt à l'emploi.
Notes - Seules les langues qui ont un .traineddata
le format de fichier est pris en charge par tesseract.
Pour spécifier la langue dans laquelle vous avez besoin de votre sortie OCR, utilisez le -l LANG
dans la configuration où LANG est le code à 3 lettres de la langue que vous souhaitez utiliser.
custom_config = r'-l eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)
Prenons cette image par exemple -
Vous pouvez travailler avec plusieurs langues en modifiant le paramètre LANG en tant que tel -
custom_config = r'-l grc+tha+eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)
et vous obtiendrez la sortie suivante -
Here’s some Greek: Οδιο διστα ιμπεδιτ φιμ ει, αδ φελ αβχορρεανθ ελωκυενθιαμ, εξ εσε εξερσι γυ-
βεργρεν ηας. Ατ μει σολετ σριπτορεμ. ἴυς αλια λαβωρε θε. Σιθ κυωτ νυσκυαμ
τρασυνδια αν, ὠμνιυμ ελιγενδι τιν πρι. Παρτεμ φερθερεμ συσιπιαντὺυρ εξ ιυς,ναμ
%0790 แ ร เง ๑ ๕ 80 ๕ 6 ๑ อ 06 ส 0 เง น อ ๓ , πρω πρωπριαε σαεφολα ιδ. Ατ πρι δολορ νυ-
σκυαμ. 6 Thai Here’s some Thai: ν᾿ ค อ ร ั ป ซั น จ ุ ้ ย โป ร ด ิ ว เซ อ ร ์ ส ถา ป ั ต ย ์ จ ๊ า บ แจ ็ ก พ ็ อ ต ม ้ า ห ิ น อ ่ อ น ซา ก ุ ร ะ ค ั น ถ ธ ุ ร ะ ฟิ ด ส ต า ร ์ ท ง ี ้ บ อ ย
ค อ ต อ ื ่ ม แป ร ั ส ั ง โฆ ค ํ า ส า ป แฟ น ซี ศิ ล ป ว ั ฒ น ธร ร ม ไฟ ล ท ์ จ ิ ๊ ก โก ๋ ก ั บ ด ั ก เจ ล พ ล ็ อ ต ม า ม ่ า ซา ก ุ ร ะ ด ี ล เล อ
ร ์ ซี น ด ั ม พ ์ แฮ ป ป ี ้ เอ ๊ ้ า ะ อ ุ ร ั ง ค ธา ต ุ ซิ ม ฟิ น ิ ก ซ์ เท ร ล เล ่ อ ร ์ อ ว อ ร ์ ด แค น ย อ น ส ม า พ ั น ธ์ ค ร ั ว ซอ ง ฮั ม อ า
ข่ า เอ ็ ก ซ์ เพ ร ส
Notes - La langue spécifiée en premier -l
paramètre est la langue principale.
Malheureusement, tesseract n'a pas de fonction pour détecter automatiquement la langue du texte dans une image. Une autre solution est fournie par un autre module python appelé langdetect
qui peut être installé via pip.
$ pip install langdetect
Encore une fois, ce module ne détecte pas la langue du texte à l'aide d'une image mais a besoin d'une entrée de chaîne pour détecter la langue. La meilleure façon de procéder consiste à utiliser d'abord tesseract pour obtenir du texte OCR dans toutes les langues que vous pourriez ressentir, en utilisant langdetect
pour rechercher les langues incluses dans le texte OCR, puis réexécutez l'OCR avec les langues trouvées.
Disons que nous avons un texte que nous pensions être en anglais et en portugais.
custom_config = r'-l eng+por --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config) from langdetect import detect_langs
detect_langs(txt)
Cela devrait produire une liste de langues dans le texte et leurs probabilités.
[en:0.714282468983554, es:0.2857145605644145]
Les codes de langue utilisés par langdetect
suivre les codes ISO 639-1. Pour comparer, veuillez cocher this ainsi que this. Nous constatons que la langue utilisée dans le texte est à la place l'anglais et l'espagnol.
Nous récupérons le texte en changeant la configuration en
custom_config = r'-l eng+spa --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config)
Notes – Tesseract fonctionne mal lorsque, dans une image avec plusieurs langues, les langues spécifiées dans la configuration sont erronées ou ne sont pas mentionnées du tout. Cela peut également induire en erreur le module langdetect.
Utilisation de tessdata_fast
Si la vitesse est une préoccupation majeure pour vous, vous pouvez remplacer vos modèles de langage tessdata par des modèles tessdata_fast qui sont des versions entières 8 bits des modèles tessdata.
Selon le tessdata_fast github -
Ce référentiel contient des versions entières rapides de modèles formés pour le Moteur OCR Open Source Tesseract.
Ces modèles ne fonctionnent qu'avec le moteur OCR LSTM de Tesseract 4.
- Il s'agit d'un compromis vitesse/précision quant à ce qui offrait le meilleur "rapport qualité-prix" en termes de vitesse par rapport à la précision.
- Pour certaines langues, c'est encore mieux, mais pour la plupart non.
- La configuration réseau "meilleur rapport qualité-prix" a ensuite été entierisée pour plus de rapidité.
- La plupart des utilisateurs voudront utiliser ces fichiers traineddata pour effectuer l'OCR et ceux-ci seront livrés dans le cadre des distributions Linux, par exemple. Ubuntu 18.04.
- Un réglage fin / une formation incrémentielle ne pas être possible à partir de ces
fast
modèles, car ils sont des nombres entiers de 8 bits. - Lorsque vous utilisez les modèles dans ce référentiel, seul le nouveau moteur OCR basé sur LSTM est pris en charge. L'héritage
tesseract
Le moteur n'est pas pris en charge avec ces fichiers, donc les modes OEM '0' et '2' de Tesseract ne fonctionneront pas avec eux.
Utiliser tessdata_fast
modèles au lieu de tessdata
, il vous suffit de télécharger votre tessdata_fast
fichier de données de langue de ici et placez-le à l'intérieur de votre $TESSDATA_PREFIX
répertoire.
Besoin de numériser des documents, des reçus ou des factures mais trop paresseux pour coder? Rendez-vous sur nanonets et construisez des modèles OCR gratuitement!
Formation Tesseract sur les données personnalisées
Tesseract 4.00 comprend un nouveau moteur de reconnaissance basé sur un réseau de neurones qui offre une précision considérablement plus élevée sur les images de documents. Les réseaux de neurones nécessitent beaucoup plus de données d'entraînement et s'entraînent beaucoup plus lentement que le Tesseract de base. Pour les langues à base latine, les données de modèle existantes fournies ont été formées sur environ 400000 4500 lignes de texte couvrant environ XNUMX XNUMX polices.
Pour exécuter avec succès le didacticiel de formation LSTM Tesseract 4.0, vous devez disposer d'une installation fonctionnelle des outils de formation Tesseract 4 et Tesseract 4 et également disposer des scripts de formation et des fichiers de données formés requis dans certains répertoires. Visite dépôt github pour les fichiers et les outils.
Tesseract 4.00 prend de quelques jours à quelques semaines pour s'entraîner à partir de zéro. Même avec toutes ces nouvelles données d'entraînement, voici donc quelques options d'entraînement:
- Affiner - En commençant par une langue déjà formée, entraînez-vous sur vos données supplémentaires spécifiques. Par exemple, une formation sur un ensemble de données manuscrites et des polices supplémentaires.
- Coupez la couche supérieure – du réseau et recycler une nouvelle couche supérieure en utilisant les nouvelles données. Si le réglage fin ne fonctionne pas, il s'agit probablement de la meilleure option suivante. L'analogie pourquoi est-ce utile, prenez pour une instance des modèles formés sur l'ensemble de données ImageNet. L'objectif est de construire un classificateur de chat ou de chien, les couches inférieures du modèle sont bonnes pour l'abstraction de bas niveau comme les coins, les lignes horizontales et verticales, mais les couches supérieures du modèle combinent ces caractéristiques et détectent les oreilles, les yeux, le nez du chat ou du chien etc. En réentraînant uniquement les couches supérieures, vous utilisez les connaissances des couches inférieures et les combinez avec votre nouvel ensemble de données différent.
- Se recycler à partir de zéro - Il s'agit d'une approche très lente, sauf si vous disposez d'un ensemble de formation très représentatif et suffisamment large pour votre problème. La meilleure ressource pour la formation à partir de zéro est de suivre ceci dépôt github.
Un guide sur la façon de vous entraîner sur vos données personnalisées et de créer .traineddata
les fichiers peuvent être trouvés ici, ici ainsi que ici.
Nous ne couvrirons pas le code de formation à l'utilisation de Tesseract dans cet article de blog.
Limitations de Tesseract
Tesseract fonctionne mieux lorsqu'il existe une segmentation nette du texte de premier plan par rapport à l'arrière-plan. En pratique, il peut être extrêmement difficile de garantir ces types de configuration. Il y a plusieurs raisons pour lesquelles vous ne pouvez pas obtenir une sortie de bonne qualité de Tesseract comme si l'image a du bruit en arrière-plan. Meilleure est la qualité de l'image (taille, contraste, foudre) meilleur est le résultat de la reconnaissance. Cela nécessite un peu de prétraitement pour améliorer les résultats de l'OCR, les images doivent être mises à l'échelle de manière appropriée, avoir autant de contraste d'image que possible et le texte doit être aligné horizontalement. Tesseract OCR est assez puissant mais présente les limitations suivantes.
Limitations de Tesseract résumées dans la liste.
- L'OCR n'est pas aussi précis que certaines solutions commerciales à notre disposition.
- Ne convient pas aux images affectées par des artefacts, notamment une occlusion partielle, une perspective déformée et un arrière-plan complexe.
- Il n'est pas capable de reconnaître l'écriture manuscrite.
- Il peut trouver du charabia et le signaler comme sortie OCR.
- Si un document contient des langues autres que celles indiquées dans les arguments -l LANG, les résultats peuvent être médiocres.
- Il n'est pas toujours bon d'analyser l'ordre de lecture naturel des documents. Par exemple, il peut ne pas reconnaître qu'un document contient deux colonnes et peut essayer de joindre du texte sur plusieurs colonnes.
- Des numérisations de mauvaise qualité peuvent produire une OCR de mauvaise qualité.
- Il n'expose pas d'informations sur l'appartenance du texte de la famille de polices.
Il existe bien sûr un meilleur moyen, beaucoup plus simple et plus intuitif, d'effectuer des tâches d'OCR.
OCR avec Nanonets
Les API OCR Nanonets vous permet de créer facilement des modèles OCR. Vous n'avez pas à vous soucier du prétraitement de vos images ni à vous soucier de la correspondance des modèles ou de créer des moteurs basés sur des règles pour augmenter la précision de votre modèle OCR.
Vous pouvez télécharger vos données, les annoter, configurer le modèle pour qu'il s'entraîne et attendre d'obtenir des prédictions via une interface utilisateur basée sur un navigateur sans écrire une seule ligne de code, sans vous soucier des GPU ou trouver les bonnes architectures pour vos modèles d'apprentissage en profondeur. Vous pouvez également acquérir les réponses JSON de chaque prédiction pour l'intégrer à vos propres systèmes et créer des applications basées sur l'apprentissage automatique basées sur des algorithmes de pointe et une infrastructure solide.
Utilisation de l'interface graphique: https://app.nanonets.com/
Vous pouvez également utiliser l'API Nanonets-OCR en suivant les étapes ci-dessous:
Étape 1: cloner le référentiel, installer les dépendances
git clone https://github.com/NanoNets/nanonets-ocr-sample-python.git
cd nanonets-ocr-sample-python
sudo pip install requests tqdm
Étape 2: Obtenez votre clé API gratuite
Obtenez votre clé API gratuite sur http://app.nanonets.com/#/keys
Étape 3: définir la clé API comme variable d'environnement
export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE
Étape 4: créer un nouveau modèle
python ./code/create-model.py
Remarque: Cela génère un MODEL_ID dont vous avez besoin pour l'étape suivante
Étape 5: ajouter l'ID de modèle en tant que variable d'environnement
export NANONETS_MODEL_ID=YOUR_MODEL_ID
Remarque: vous obtiendrez YOUR_MODEL_ID de l'étape précédente
Étape 6: télécharger les données de formation
Les données de formation se trouvent dans images
(fichiers image) et annotations
(annotations pour les fichiers image)
python ./code/upload-training.py
Étape 7: modèle de train
Une fois les images téléchargées, commencez à former le modèle
python ./code/train-model.py
Étape 8: obtenir l'état du modèle
Le modèle prend environ 2 heures pour s'entraîner. Vous recevrez un e-mail une fois le modèle formé. En attendant, vous vérifiez l'état du modèle
python ./code/model-state.py
Étape 9: Faire une prédiction
Une fois le modèle formé. Vous pouvez faire des prédictions en utilisant le modèle
python ./code/prediction.py ./images/151.jpg
Nanonets et humains dans la boucle
L'écran "Modéré" facilite les processus de correction et de saisie et réduit la charge de travail du réviseur manuel de près de 90 % et réduit les coûts de 50 % pour l'organisation.
Les caractéristiques comprennent
- Suivre les prédictions qui sont correctes
- Identifiez les erreurs
- Corrigez les inexactes
- Supprimez ceux qui sont faux
- Remplissez les prédictions manquantes
- Filtrer les images avec des plages de dates
- Obtenez le nombre d'images modérées par rapport à celles non modérées
Tous les champs sont structurés en une interface graphique facile à utiliser qui permet à l'utilisateur de tirer parti de la technologie OCR et de l'aider à l'améliorer au fur et à mesure, sans avoir à taper de code ou à comprendre le fonctionnement de la technologie.
Vous avez un problème d'OCR en tête ? Vous souhaitez réduire les coûts de saisie de données de votre organisation ? Dirigez-vous vers nanonets et créer des modèles OCR pour extraire le texte des images or extraire des données de PDF!
Conclusion
Tout comme l'apprentissage en profondeur a eu un impact sur presque toutes les facettes de la vision par ordinateur, il en va de même pour la reconnaissance des caractères et la reconnaissance de l'écriture manuscrite. Les modèles basés sur l'apprentissage en profondeur ont réussi à obtenir une précision de reconnaissance de texte sans précédent, bien au-delà des méthodes traditionnelles. extraction d'informations ainsi que traitement d'images par apprentissage automatique approches.
Tesseract fonctionne bien lorsque les images de document suivent les directives suivantes:
- Nettoyer la segmentation du texte de premier plan de l'arrière-plan
- Aligné horizontalement et mis à l'échelle de manière appropriée
- Image de haute qualité sans flou ni bruit
La dernière version de Tesseract 4.0 prend en charge l'OCR basé sur l'apprentissage en profondeur qui est nettement plus précis. Le moteur OCR lui-même est construit sur un réseau de mémoire à court terme à long terme (LSTM), une sorte de réseau neuronal récurrent (RNN).
Tesseract est parfait pour numériser des documents propres et est livré avec une précision et une variabilité de police assez élevées car sa formation était complète. Je dirais que Tesseract est un outil incontournable si votre tâche consiste à numériser des livres, des documents et du texte imprimé sur un fond blanc propre.
Lectures complémentaires
- Modèle le mieux formé pour LSTM Tesseract 4.0
- Approche Dropbox de l'OCR 4.2017
- Présentation de Tesseract OCR Engine Legacy
- Forum pour les développeurs Tesseract
- Forum pour les utilisateurs de Tesseract
- Comparaison de la précision de l'OCR sur les premiers livres imprimés à l'aide du
Moteurs open source Calamari et OCRopus - OCR efficace et sans lexique utilisant le Deep Learning
- Adéquation des moteurs OCR dans les systèmes d'extraction d'informations - Une évaluation comparative
- Référence DeepText
- Liste des projets OCR
- Tesseract Github Dernière version
- CVPR 2019 - Détection de la région des caractères pour la détection de texte (CRAFT)
- OCR de carte de crédit avec OpenCV et Python
- Prétraitement des images
- Prétraitement d'image dans OpenCV
- OCR avec Tesseract sur Raspberry Pi
- Tesseract OCR pour les langues non anglaises
- Comment effectuer une OCR à partir de la ligne de commande Linux à l'aide de Tesseract
- Présentation du moteur OCR Tesseract
Mettre à jour:
Beaucoup de gens nous ont demandé comment ils pouvaient obtenir la date sous forme de texte ou utiliser quand il détectait la date ou toute autre donnée spécifique afin qu'ils puissent l'ajouter à la liste.
Voici la réponse:
Dans le code pour dessiner une zone de délimitation autour de la zone de date, vous remarquerez une ligne qui correspond au modèle de regex avecd['text']
. Il ne dessine une boîte que si le motif correspond. Vous pouvez simplement extraire les valeurs ded['text']
une fois que le motif correspond et ajoutez-les à une liste.
Mise à jour 2:
Pour répondre aux questions concernant l'OCR non anglaise, nous avons mis à jour d'autres listes de lectures.
- 100
- 2019
- 7
- 9
- Qui sommes-nous
- Selon
- Avec cette connaissance vient le pouvoir de prendre
- atteint
- acquérir
- à travers
- Supplémentaire
- propos
- Avantage
- AI
- SIDA
- algorithmes
- Tous
- Permettre
- parmi
- selon une analyse de l’Université de Princeton
- Une autre
- api
- une approche
- applications
- Réservé
- arguments
- autour
- L'art
- article
- Automatisation
- disponibles
- va
- LES MEILLEURS
- Bit
- blog
- Livres
- frontière
- Box
- navigateur
- construire
- intégré
- Peut obtenir
- CD
- Change
- Réseautage et Mentorat
- prétentions
- Nettoyage
- CNN
- code
- collection
- Colonne
- combinaison
- commercial
- Sociétés
- complexe
- confiance
- configuration
- confusion
- contient
- Conversion
- Corrections
- Costs
- pourriez
- Couples
- données
- affaire
- détecté
- Détection
- détermination
- développé
- mobiles
- Développement
- DID
- différer
- différent
- numérique
- numériser
- chiffres
- INSTITUTIONNELS
- down
- Goutte
- Dropbox
- "Early Bird"
- Edge
- Endpoint
- énergie
- Anglais
- Environment
- peut
- exemple
- attendu
- attend
- famille
- RAPIDE
- Fonctionnalité
- Fonctionnalités:
- Des champs
- Prénom
- flux
- suivre
- Abonnement
- fourche
- formulaire
- le format
- document
- trouvé
- Test d'anglais
- fonction
- obtention
- Git
- GitHub
- Don
- objectif
- Bien
- gris
- Niveaux de gris
- l'
- guide
- lignes directrices
- hacks
- ayant
- front
- ici
- Haute
- détient
- Comment
- How To
- HTTPS
- majeur
- Les êtres humains
- identifier
- image
- Impact
- Mettre en oeuvre
- important
- améliorer
- Dans d'autres
- inclus
- Y compris
- Améliore
- info
- d'information
- Infrastructure
- intégrer
- intuitif
- IT
- rejoindre
- ACTIVITES
- clés
- spécialisées
- connu
- Labs
- langue
- Langues
- gros
- Nouveautés
- APPRENTISSAGE
- apprentissage
- Bibliothèque
- Licence
- foudre
- Gamme
- linux
- Liste
- Liste
- Location
- mac
- click
- machine learning
- majeur
- Fabrication
- Manuel
- Marché
- Match
- Mémoire
- l'esprit
- modèle
- numériques jumeaux (digital twin models)
- (en fait, presque toutes)
- réseau et
- basé sur le réseau
- réseaux
- Bruit
- ouvert
- open source
- ouverture
- Option
- Options
- de commander
- l'organisation
- Autre
- autrement
- Patron de Couture
- Personnes
- performant
- objectifs
- pauvres
- Populaire
- possible
- solide
- prédiction
- Prédictions
- Press
- assez
- primaire
- Problème
- processus
- les process
- produire
- Programmeurs
- Programmation
- langages de programmation
- Programmes
- Projet
- fournir
- fournit
- qualité
- Tarifs
- raw
- RE
- en cours
- Les raisons
- réduire
- Standard
- resté
- rapport
- dépôt
- exigent
- conditions
- un article
- ressource
- REST
- Résultats
- Courir
- pour le running
- balayage
- pour écran
- segmentation
- Services
- set
- Shorts
- similaires
- étapes
- Taille
- petit
- So
- Logiciels
- Solutions
- Espagnol
- spécification
- vitesse
- Région
- États
- STRONG
- Avec succès
- Appareils
- Les soutiens
- SWIFT
- combustion propre
- Système
- tâches
- Technologie
- terminal
- tester
- Avec
- fiable
- les outils
- top
- traditionnel
- Formation
- Transformer
- traiter
- Trends
- Ubuntu
- ui
- comprendre
- unique
- us
- utilisé
- cas d'utilisation
- utilisateurs
- Plus-value
- vision
- W
- attendez
- marche
- Quoi
- Qu’est ce qu'
- whitelist
- Wikipédia
- fenêtres
- dans les
- sans
- des mots
- Activités principales
- de travail
- vos contrats
- écriture
- X