Πώς να OCR με Tesseract, OpenCV και Python PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Πώς να κάνετε OCR με Tesseract, OpenCV και Python

Πώς να κάνετε OCR με Tesseract, OpenCV και Python

Σε αυτήν την ανάρτηση ιστολογίου, θα προσπαθήσουμε να εξηγήσουμε την τεχνολογία πίσω από την πιο χρησιμοποιούμενη μηχανή Tesseract, η οποία αναβαθμίστηκε με τις πιο πρόσφατες γνώσεις που ερευνήθηκαν στην οπτική αναγνώριση χαρακτήρων. Αυτό το άρθρο θα χρησιμεύσει επίσης ως οδηγός / σεμινάριο σχετικά με τον τρόπο εφαρμογής OCR σε python χρησιμοποιώντας τη μηχανή Tesseract. Θα περιηγηθούμε στις παρακάτω ενότητες:

  • Χαρακτηριστικά Tesseract OCR
  • Προεπεξεργασία για OCR χρησιμοποιώντας OpenCV
  • Εκτέλεση Tesseract με CLI και Python
  • Περιορισμοί του κινητήρα Tesseract

Πίνακας περιεχομένων

Εισαγωγή

OCR = Οπτική αναγνώριση χαρακτήρων. Με άλλα λόγια, τα συστήματα OCR μετατρέπουν μια δισδιάστατη εικόνα κειμένου, που θα μπορούσε να περιέχει εκτυπωμένο ή χειρόγραφο κείμενο από την αναπαράσταση εικόνας σε κείμενο αναγνώσιμο από μηχανή. Το OCR ως διαδικασία αποτελείται γενικά από πολλές υπο-διεργασίες για να εκτελεστεί όσο το δυνατόν ακριβέστερα. Οι υποδιεργασίες είναι:

  • Προεπεξεργασία της εικόνας
  • Εντοπισμός κειμένου
  • Τμηματοποίηση χαρακτήρων
  • Αναγνώριση χαρακτήρων
  • Επεξεργασία μετά

Οι υποδιεργασίες στην παραπάνω λίστα φυσικά μπορεί να διαφέρουν, αλλά αυτά είναι κατά προσέγγιση βήματα που απαιτούνται για την προσέγγιση της αυτόματης αναγνώρισης χαρακτήρων. Στο λογισμικό OCR, ο κύριος στόχος είναι ο εντοπισμός και η καταγραφή όλων των μοναδικών λέξεων χρησιμοποιώντας διαφορετικές γλώσσες από χαρακτήρες γραπτού κειμένου.

Για σχεδόν δύο δεκαετίες, τα συστήματα οπτικής αναγνώρισης χαρακτήρων χρησιμοποιούνται ευρέως για την παροχή αυτοματοποιημένης εισαγωγής κειμένου σε ηλεκτρονικά συστήματα. Ωστόσο, σε όλο αυτό το διάστημα, τα συμβατικά συστήματα OCR (όπως ζωνική OCR) δεν έχουν ξεπεράσει ποτέ την αδυναμία τους να διαβάσουν περισσότερες από μια χούφτα γραμματοσειρών τύπων και μορφών σελίδας. Ο τύπος με ανάλογη απόσταση (που περιλαμβάνει σχεδόν όλα τα στοιχειοθετημένα αντίγραφα), οι γραμματοσειρές εκτυπωτών λέιζερ, ακόμη και πολλές γραμματοσειρές γραφομηχανής που δεν είναι αναλογικές, έχουν παραμείνει πέρα ​​από την προσιτότητα αυτών των συστημάτων. Και ως αποτέλεσμα, το συμβατικό OCR δεν πέτυχε ποτέ περισσότερο από ένα οριακό αντίκτυπο στον συνολικό αριθμό των εγγράφων που χρειάζονται μετατροπή σε ψηφιακή μορφή.

Πώς να κάνετε OCR με Tesseract, OpenCV και Python
Διαδικασία οπτικής αναγνώρισης χαρακτήρων (ευγενική προσφορά)

Οι μηχανές OCR επόμενης γενιάς αντιμετωπίζουν πολύ καλά αυτά τα προβλήματα που αναφέρθηκαν παραπάνω χρησιμοποιώντας την πιο πρόσφατη έρευνα στον τομέα της βαθιάς μάθησης. Αξιοποιώντας τον συνδυασμό μοντέλων σε βάθος και τεράστιων συνόλων δεδομένων που είναι διαθέσιμα στο κοινό, τα μοντέλα επιτυγχάνουν ακρίβειες αιχμής σε συγκεκριμένες εργασίες. Στις μέρες μας είναι επίσης δυνατό να δημιουργούν συνθετικά δεδομένα με διαφορετικές γραμματοσειρές που χρησιμοποιούν παραγωγικά ανταγωνιστικά δίκτυα και λίγες άλλες παραγωγικές προσεγγίσεις.

Η οπτική αναγνώριση χαρακτήρων παραμένει α δύσκολο πρόβλημα όταν το κείμενο εμφανίζεται σε περιβάλλοντα χωρίς περιορισμούς, όπως φυσικές σκηνές, λόγω γεωμετρικών παραμορφώσεων, πολύπλοκων υποβάθρων και διαφορετικών γραμματοσειρών. Η τεχνολογία εξακολουθεί να έχει τεράστιες δυνατότητες λόγω των διαφόρων περιπτώσεων χρήσης του OCR που βασίζεται σε βαθιά μάθηση


Έχετε κατά νου κάποιο πρόβλημα OCR; Θέλετε να μειώσετε το κόστος εισαγωγής δεδομένων του οργανισμού σας; Κατευθυνθείτε προς Νανοδίκτυα και να δημιουργήσετε μοντέλα OCR για να εξαγωγή κειμένου από εικόνες or εξαγωγή δεδομένων από PDF με βάση το AI PDFOCR!


Εργαλεία OCR ανοιχτού κώδικα

Υπάρχουν πολλά οπτική αναγνώριση χαρακτήρων διαθέσιμο λογισμικό. Δεν βρήκα καμία ποιοτική σύγκριση μεταξύ τους, αλλά θα γράψω για μερικά από αυτά που φαίνονται να είναι τα πιο φιλικά προς τους προγραμματιστές.

τεσεράκτ – μια μηχανή OCR ανοιχτού κώδικα που έχει κερδίσει δημοτικότητα μεταξύ των προγραμματιστών OCR. Παρόλο που μπορεί να είναι επώδυνο η εφαρμογή και η τροποποίηση μερικές φορές, δεν υπήρχαν πάρα πολλές δωρεάν και ισχυρές εναλλακτικές λύσεις OCR στην αγορά για το μεγαλύτερο χρονικό διάστημα. Ο Tesseract ξεκίνησε ως Ph.D. ερευνητικό έργο στα εργαστήρια HP, Μπρίστολ. Κέρδισε δημοτικότητα και αναπτύχθηκε από την HP μεταξύ 1984 και 1994. Το 2005 η HP κυκλοφόρησε το Tesseract ως λογισμικό ανοιχτού κώδικα. Από το 2006 αναπτύσσεται από την Google.

Πώς να κάνετε OCR με Tesseract, OpenCV και Python
Σύγκριση τάσεων της google για διαφορετικά εργαλεία OCR ανοιχτού κώδικα

Ocropus – Το ORopus είναι ένα σύστημα OCR ανοιχτού κώδικα που επιτρέπει την εύκολη αξιολόγηση και επαναχρησιμοποίηση των στοιχείων OCR τόσο από ερευνητές όσο και από εταιρείες. Μια συλλογή προγραμμάτων ανάλυσης εγγράφων, όχι ένα σύστημα OCR με το κλειδί στο χέρι. Για να το εφαρμόσετε στα έγγραφά σας, μπορεί να χρειαστεί να κάνετε κάποια προεπεξεργασία εικόνας και, ενδεχομένως, να εκπαιδεύσετε νέα μοντέλα. Εκτός από τα ίδια τα σενάρια αναγνώρισης, υπάρχουν πολλά σενάρια για επεξεργασία και διόρθωση αληθείας εδάφους, μέτρηση ποσοστών σφαλμάτων, προσδιορισμό πινάκων σύγχυσης που είναι εύκολο να χρησιμοποιηθούν και να επεξεργαστούν.


οφθαλμικός – Το Ocular λειτουργεί καλύτερα σε έγγραφα που εκτυπώνονται με χειροκίνητη πρέσα, συμπεριλαμβανομένων εκείνων που είναι γραμμένα σε πολλές γλώσσες. Λειτουργεί χρησιμοποιώντας τη γραμμή εντολών. Είναι ένα υπερσύγχρονο ιστορικό σύστημα OCR. Τα κύρια χαρακτηριστικά του είναι:

  • Εκμάθηση άγνωστων γραμματοσειρών χωρίς επίβλεψη: απαιτεί μόνο εικόνες εγγράφων και ένα σώμα κειμένου.
  • Δυνατότητα χειρισμού εγγράφων με θόρυβο: ασυνεπής μελάνη, απόσταση, κάθετη στοίχιση
  • Υποστήριξη για πολύγλωσσα έγγραφα, συμπεριλαμβανομένων εκείνων που διαθέτουν σημαντική εναλλαγή κώδικα σε επίπεδο λέξης.
  • Χωρίς επίβλεψη εκμάθηση ορθογραφικών μοτίβων παραλλαγών, συμπεριλαμβανομένων των αρχαϊκών ορθογραφιών και της στενογραφίας του εκτυπωτή.
  • Ταυτόχρονη, κοινή μεταγραφή τόσο σε διπλωματική (κυριολεκτική) όσο και σε κανονικοποιημένη μορφή.


SwiftOCR – Θα αναφέρω επίσης τη μηχανή OCR που είναι γραμμένη στο Swift, καθώς γίνεται τεράστια εξέλιξη στην προώθηση της χρήσης της Swift ως γλώσσας προγραμματισμού ανάπτυξης που χρησιμοποιείται για βαθιά μάθηση. Ολοκλήρωση παραγγελίας blog για να μάθετε περισσότερα γιατί. Το SwiftOCR είναι μια γρήγορη και απλή βιβλιοθήκη OCR που χρησιμοποιεί νευρωνικά δίκτυα για την αναγνώριση εικόνας. Η SwiftOCR ισχυρίζεται ότι ο κινητήρας τους ξεπερνά τη γνωστή βιβλιοθήκη Tessaract.

Σε αυτό το blog post, θα βάλουμε εστίαση στο Tesseract OCR και μάθετε περισσότερα για το πώς λειτουργεί και πώς χρησιμοποιείται.


Tesseract OCR

Το Tesseract είναι μια μηχανή αναγνώρισης κειμένου ανοιχτού κώδικα (OCR), διαθέσιμη με την άδεια Apache 2.0. Μπορεί να χρησιμοποιηθεί απευθείας ή (για προγραμματιστές) χρησιμοποιώντας ένα API για εξαγωγή τυπωμένου κειμένου από εικόνες. Υποστηρίζει μια μεγάλη ποικιλία γλωσσών. Το Tesseract δεν διαθέτει ενσωματωμένο GUI, αλλά υπάρχουν αρκετά διαθέσιμα από το Σελίδα 3rdParty. Το Tesseract είναι συμβατό με πολλές γλώσσες προγραμματισμού και πλαίσια μέσω περιτυλίξεων που μπορούν να βρεθούν εδώ. Μπορεί να χρησιμοποιηθεί με την υπάρχουσα ανάλυση διάταξης για την αναγνώριση κειμένου μέσα σε ένα μεγάλο έγγραφο ή μπορεί να χρησιμοποιηθεί σε συνδυασμό με έναν εξωτερικό ανιχνευτή κειμένου για την αναγνώριση κειμένου από μια εικόνα μιας γραμμής κειμένου.

Πώς να κάνετε OCR με Tesseract, OpenCV και Python
OCR Process Flow για δημιουργία API με Tesseract από α ανάρτηση

Το Tesseract 4.00 περιλαμβάνει ένα νέο υποσύστημα νευρωνικών δικτύων που έχει διαμορφωθεί ως αναγνώριση γραμμής κειμένου. Έχει τις ρίζες του σε LSTM που βασίζεται σε Python του ORopus υλοποίηση αλλά έχει επανασχεδιαστεί για το Tesseract σε C++. Το σύστημα νευρωνικών δικτύων στο Tesseract χρονολογείται πριν από το TensorFlow, αλλά είναι συμβατό με αυτό, καθώς υπάρχει μια γλώσσα περιγραφής δικτύου που ονομάζεται Γλώσσα προδιαγραφής μεταβλητού γραφήματος (VGSL), η οποία είναι επίσης διαθέσιμη για το TensorFlow.

Για να αναγνωρίσουμε μια εικόνα που περιέχει έναν μόνο χαρακτήρα, χρησιμοποιούμε συνήθως ένα Συνελικτικό Νευρωνικό Δίκτυο (CNN). Το κείμενο αυθαίρετου μήκους είναι μια ακολουθία χαρακτήρων και τέτοια προβλήματα επιλύονται χρησιμοποιώντας RNN και το LSTM είναι μια δημοφιλής μορφή RNN. Διαβάστε αυτήν την ανάρτηση για να μάθετε περισσότερα LS ™.


Τεχνολογία – Πώς λειτουργεί

Τα LSTM είναι εξαιρετικά στην εκμάθηση ακολουθιών, αλλά επιβραδύνουν πολύ όταν ο αριθμός των καταστάσεων είναι πολύ μεγάλος. Υπάρχουν εμπειρικά αποτελέσματα που υποδηλώνουν ότι είναι καλύτερο να ζητήσετε από ένα LSTM να μάθετε μια μεγάλη ακολουθία παρά μια σύντομη ακολουθία πολλών τάξεων. Το Tesseract αναπτύχθηκε από το μοντέλο OCRopus στην Python το οποίο ήταν μια διχάλα ενός LSMT σε C++, που ονομάζεται CLSTM. Το CLSTM είναι μια υλοποίηση του μοντέλου επαναλαμβανόμενου νευρωνικού δικτύου LSTM στη C++, χρησιμοποιώντας τη βιβλιοθήκη Eigen για αριθμητικούς υπολογισμούς.

Πώς να κάνετε OCR με Tesseract, OpenCV και Python
Tesseract 3 OCR διαδικασία από χαρτί

Το Legacy Tesseract 3.x εξαρτιόταν από τη διαδικασία πολλαπλών σταδίων όπου μπορούμε να διαφοροποιήσουμε τα βήματα:

  • Εύρεση λέξεων
  • εύρεση γραμμής
  • Ταξινόμηση χαρακτήρων

Η εύρεση λέξεων έγινε με την οργάνωση γραμμών κειμένου σε κηλίδες και οι γραμμές και οι περιοχές αναλύονται για σταθερό ύψος ή αναλογικό κείμενο. Οι γραμμές κειμένου χωρίζονται σε λέξεις διαφορετικά ανάλογα με το είδος της απόστασης χαρακτήρων. Στη συνέχεια, η αναγνώριση προχωρά ως διαδικασία δύο περασμάτων. Στο πρώτο πέρασμα γίνεται προσπάθεια αναγνώρισης κάθε λέξης με τη σειρά. Κάθε λέξη που είναι ικανοποιητική μεταβιβάζεται σε έναν προσαρμοστικό ταξινομητή ως δεδομένα εκπαίδευσης. Ο προσαρμοστικός ταξινομητής έχει στη συνέχεια την ευκαιρία να αναγνωρίσει με μεγαλύτερη ακρίβεια το κείμενο χαμηλότερα στη σελίδα.

Ο εκσυγχρονισμός του εργαλείου Tesseract ήταν μια προσπάθεια καθαρισμού κώδικα και προσθήκης ενός νέου μοντέλου LSTM. Η εικόνα εισόδου επεξεργάζεται σε πλαίσια (ορθογώνια) γραμμή προς γραμμή που τροφοδοτείται στο μοντέλο LSTM και δίνει έξοδο. Στην παρακάτω εικόνα μπορούμε να απεικονίσουμε πώς λειτουργεί.

Πώς να κάνετε OCR με Tesseract, OpenCV και Python
Πώς το Tesseract χρησιμοποιεί το μοντέλο LSTM παρουσίαση

Μετά την προσθήκη ενός νέου εργαλείου εκπαίδευσης και την εκπαίδευση του μοντέλου με πολλά δεδομένα και γραμματοσειρές, το Tesseract επιτυγχάνει καλύτερη απόδοση. Ωστόσο, δεν είναι αρκετά καλό για να εργαστείτε σε χειρόγραφο κείμενο και περίεργες γραμματοσειρές. Είναι δυνατό να τελειοποιήσετε ή να επανεκπαιδεύσετε τα ανώτερα στρώματα για πειραματισμό.


Εγκατάσταση του Tesseract

Η εγκατάσταση του tesseract στα Windows είναι εύκολη με τα προμεταγλωττισμένα δυαδικά αρχεία που βρέθηκαν εδώ. Μην ξεχάσετε να επεξεργαστείτε τη μεταβλητή περιβάλλοντος «διαδρομή» και να προσθέσετε τη διαδρομή tesseract. Για εγκατάσταση Linux ή Mac εγκαθίσταται με λίγες εντολές.

Μετά την εγκατάσταση, βεβαιωθείτε ότι όλα λειτουργούν πληκτρολογώντας εντολή στο τερματικό ή cmd:

$ tesseract --version

Και θα δείτε την έξοδο παρόμοια με:

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

Μπορείτε να εγκαταστήσετε το python wrapper για tesseract μετά από αυτό χρησιμοποιώντας το pip.
$ pip install pytesseract

Η βιβλιοθήκη Tesseract αποστέλλεται με ένα εύχρηστο εργαλείο γραμμής εντολών που ονομάζεται tesseract. Μπορούμε να χρησιμοποιήσουμε αυτό το εργαλείο για να εκτελέσουμε OCR σε εικόνες και η έξοδος αποθηκεύεται σε ένα αρχείο κειμένου. Εάν θέλουμε να ενσωματώσουμε το Tesseract στον κώδικα C++ ή Python, θα χρησιμοποιήσουμε το API του Tesseract.


Εκτέλεση Tesseract με CLI

Καλέστε τη μηχανή Tesseract στην εικόνα με image_path και μετατρέψτε την εικόνα σε κείμενο, γραμμένο γραμμή προς γραμμή στη γραμμή εντολών πληκτρολογώντας τα εξής:

$ tesseract image_path stdout

Για να γράψετε το κείμενο εξόδου σε ένα αρχείο:

$ tesseract image_path text_result.txt

Για να καθορίσετε το όνομα του μοντέλου γλώσσας, γράψτε τη συντόμευση γλώσσας μετά -l flag, από προεπιλογή παίρνει την αγγλική γλώσσα:

$ tesseract image_path text_result.txt -l eng

Από προεπιλογή, το Tesseract αναμένει μια σελίδα κειμένου όταν τμηματοποιεί μια εικόνα. Εάν απλώς επιδιώκετε να κάνετε OCR σε μια μικρή περιοχή, δοκιμάστε μια διαφορετική λειτουργία τμηματοποίησης, χρησιμοποιώντας το –psm διαφωνία. Υπάρχουν 14 διαθέσιμες λειτουργίες που μπορείτε να βρείτε εδώ. Από προεπιλογή, το Tesseract αυτοματοποιεί πλήρως την τμηματοποίηση σελίδων, αλλά δεν εκτελεί εντοπισμό προσανατολισμού και σεναρίου. Για να καθορίσετε την παράμετρο, πληκτρολογήστε τα εξής:

$ tesseract image_path text_result.txt -l eng --psm 6

Υπάρχει επίσης ένα ακόμη σημαντικό επιχείρημα, η λειτουργία κινητήρα OCR (oem). Το Tesseract 4 έχει δύο κινητήρες OCR — κινητήρας Legacy Tesseract και κινητήρα LSTM. Υπάρχουν τέσσερις τρόποι λειτουργίας που επιλέγονται χρησιμοποιώντας την επιλογή –oem.
0 Μόνο κινητήρας παλαιού τύπου.
1 Μόνο κινητήρας LSTM νευρωνικών δικτύων.
2 κινητήρες Legacy + LSTM.
3 Προεπιλογή, με βάση τα διαθέσιμα.

Πώς να κάνετε OCR με Tesseract, OpenCV και Python
Αποτέλεσμα του κινητήρα Tesseract OCR

OCR με Pytesseract και OpenCV

Το Pytesseract είναι ένα περιτύλιγμα για το Tesseract-OCR Engine. Είναι επίσης χρήσιμο ως αυτόνομο σενάριο επίκλησης για tesseract, καθώς μπορεί να διαβάσει όλους τους τύπους εικόνων που υποστηρίζονται από τις βιβλιοθήκες απεικόνισης Pillow και Leptonica, συμπεριλαμβανομένων των jpeg, png, gif, bmp, tiff και άλλων. Περισσότερες πληροφορίες σχετικά με την προσέγγιση Python διαβάστε εδώ. Ο κώδικας για αυτό το σεμινάριο βρίσκεται σε αυτό Αποθήκη.

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)

Προεπεξεργασία για το Tesseract

Για να αποφύγετε όλους τους τρόπους με τους οποίους μπορεί να μειωθεί η ακρίβεια εξόδου του tesseract, πρέπει να βεβαιωθείτε ότι η εικόνα είναι κατάλληλα προεπεξεργασμένο.

Αυτό περιλαμβάνει επανακλιμάκωση, δυαδοποίηση, αφαίρεση θορύβου, αποσκλήρυνση κ.λπ.

Για προεπεξεργασία εικόνας για OCR, χρησιμοποιήστε οποιαδήποτε από τις παρακάτω συναρτήσεις python ή ακολουθήστε το Τεκμηρίωση 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) 

Ας δουλέψουμε με ένα παράδειγμα για να δούμε τα πράγματα καλύτερα. Αυτή είναι η αρχική μας εικόνα -

Πώς να κάνετε OCR με Tesseract, OpenCV και Python
Το σύστημα γραφής Aurebesh

Μετά από προεπεξεργασία με τον παρακάτω κώδικα

image = cv2.imread('aurebesh.jpg') gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)

και σχεδιάζοντας τις εικόνες που προκύπτουν, έχουμε τα ακόλουθα αποτελέσματα.

Πώς να κάνετε OCR με Tesseract, OpenCV και Python
Η εικόνα μετά από προεπεξεργασία

Η έξοδος για την αρχική εικόνα μοιάζει με αυτό -

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

Δείτε πώς φαίνεται η έξοδος για διαφορετικές προεπεξεργασμένες εικόνες –

Canny edge εικόνα (όχι και τόσο καλή)-

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

κατώφλι εικόνα -

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

Ανοιγόμενη εικόνα -

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


Λήψη πλαισίων γύρω από το κείμενο

Χρησιμοποιώντας το Pytesseract, μπορείτε να λάβετε τις πληροφορίες του πλαισίου οριοθέτησης για τα αποτελέσματα OCR χρησιμοποιώντας τα ακόλουθα κωδικός.

Το παρακάτω σενάριο θα σας δώσει πληροφορίες πλαισίου οριοθέτησης για κάθε χαρακτήρα που εντοπίζεται από το tesseract κατά τη διάρκεια της 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)

Εάν θέλετε πλαίσια γύρω από λέξεις αντί για χαρακτήρες, η συνάρτηση image_to_data θα σου φανεί χρήσιμο. Μπορείτε να χρησιμοποιήσετε το image_to_data συνάρτηση με τύπο εξόδου που καθορίζεται με το pytesseract Output.

Πώς να κάνετε OCR με Tesseract, OpenCV και Python

Έχετε κατά νου ένα πρόβλημα OCR; Θέλετε να ψηφιοποιήσετε τιμολόγια, PDF ή πινακίδες αριθμών; Προχωρήστε προς Νανοδίκτυα και δημιουργήστε δωρεάν μοντέλα OCR!


Θα χρησιμοποιήσουμε το δείγμα της εικόνας τιμολογίου παραπάνω για να δοκιμάσουμε τις εξόδους 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())

Αυτό θα σας δώσει την ακόλουθη έξοδο -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

Χρησιμοποιώντας αυτό το λεξικό, μπορούμε να πάρουμε την ανίχνευση κάθε λέξης, τις πληροφορίες του πλαισίου οριοθέτησής τους, το κείμενο σε αυτά και τους βαθμούς εμπιστοσύνης για καθεμία.

Μπορείτε να σχεδιάσετε τα πλαίσια χρησιμοποιώντας τον παρακάτω κώδικα –

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)

Δείτε πώς θα ήταν αυτό για την εικόνα ενός δείγματος τιμολογίου.

Πώς να κάνετε OCR με Tesseract, OpenCV και Python


Αντιστοίχιση προτύπου κειμένου

Πάρτε το παράδειγμα της προσπάθειας να βρείτε πού βρίσκεται μια ημερομηνία σε μια εικόνα. Εδώ το πρότυπό μας θα είναι ένα τυπικό μοτίβο έκφρασης που θα ταιριάξουμε με τα αποτελέσματα OCR για να βρούμε τα κατάλληλα πλαίσια οριοθέτησης. Θα χρησιμοποιήσουμε το regex ενότητα και το image_to_data λειτουργία για αυτό.

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)

Όπως αναμενόταν, έχουμε ένα κουτί γύρω από την ημερομηνία τιμολογίου στην εικόνα.

Πώς να κάνετε OCR με Tesseract, OpenCV και Python

Λειτουργίες τμηματοποίησης σελίδων

Υπάρχουν διάφοροι τρόποι ανάλυσης μιας σελίδας κειμένου. Το tesseract api παρέχει πολλές λειτουργίες τμηματοποίησης σελίδων εάν θέλετε να εκτελέσετε OCR μόνο σε μια μικρή περιοχή ή σε διαφορετικούς προσανατολισμούς κ.λπ.

Ακολουθεί μια λίστα με τις υποστηριζόμενες λειτουργίες τμηματοποίησης σελίδων ανά tesseract –

0 Μόνο προσανατολισμός και ανίχνευση σεναρίων (OSD).
1 Αυτόματη τμηματοποίηση σελίδων με OSD.
2 Αυτόματη τμηματοποίηση σελίδων, αλλά όχι OSD ή OCR.
3 Πλήρως αυτόματη τμηματοποίηση σελίδων, αλλά όχι OSD. (Προκαθορισμένο)
4 Υποθέστε μια στήλη κειμένου μεταβλητών μεγεθών.
5 Υποθέστε ένα ενιαίο ομοιόμορφο μπλοκ κατακόρυφα στοιχισμένου κειμένου.
6 Υποθέστε ένα ενιαίο ομοιόμορφο μπλοκ κειμένου.
7 Αντιμετωπίστε την εικόνα ως μια γραμμή κειμένου.
8 Αντιμετωπίστε την εικόνα ως μια λέξη.
9 Αντιμετωπίστε την εικόνα ως μια λέξη σε κύκλο.
10 Αντιμετωπίστε την εικόνα ως μεμονωμένο χαρακτήρα.
11 Αραιό ​​κείμενο. Βρείτε όσο το δυνατόν περισσότερο κείμενο χωρίς συγκεκριμένη σειρά.
12 Αραιό ​​κείμενο με OSD.
13 Ακατέργαστη γραμμή. Αντιμετωπίστε την εικόνα ως μια ενιαία γραμμή κειμένου, παρακάμπτοντας τα hacks που είναι ειδικά για το Tesseract.

Για να αλλάξετε τη λειτουργία τμηματοποίησης της σελίδας σας, αλλάξτε το --psm όρισμα στη συμβολοσειρά προσαρμοσμένων ρυθμίσεων σε οποιονδήποτε από τους παραπάνω κωδικούς λειτουργίας.


Ανίχνευση προσανατολισμού και σεναρίου

Μπορείτε να εντοπίσετε τον προσανατολισμό του κειμένου στην εικόνα σας και επίσης το σενάριο στο οποίο είναι γραμμένο. Η παρακάτω εικόνα -
Πώς να κάνετε OCR με Tesseract, OpenCV και Python
αφού εκτελέσετε τον ακόλουθο κώδικα -

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)

θα εκτυπώσει την ακόλουθη έξοδο.

angle: 90
script: Latin

Εντοπίστε μόνο ψηφία

Πάρτε αυτή την εικόνα για παράδειγμα -
Πώς να κάνετε OCR με Tesseract, OpenCV και Python
Το κείμενο που εξάγεται από αυτήν την εικόνα μοιάζει με αυτό.

‘Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no 43876324
Dated 17%h Nov2018
Pono 76496234

Μπορείτε να αναγνωρίσετε μόνο ψηφία αλλάζοντας τη διαμόρφωση στα ακόλουθα

custom_config = r'--oem 3 --psm 6 outputbase digits'
print(pytesseract.image_to_string(img, config=custom_config))

Η έξοδος θα μοιάζει με αυτό.

-- . 43876324
172018
0 76496234

Προσθήκη στη λίστα επιτρεπόμενων χαρακτήρων

Ας πούμε ότι θέλετε να εντοπίσετε μόνο ορισμένους χαρακτήρες από τη δεδομένη εικόνα και αγνοήστε τους υπόλοιπους. Μπορείτε να καθορίσετε τη λίστα επιτρεπόμενων χαρακτήρων σας (εδώ, έχουμε χρησιμοποιήσει όλους τους πεζούς χαρακτήρες μόνο από το a έως το z) χρησιμοποιώντας την ακόλουθη διαμόρφωση.

custom_config = r'-c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz --psm 6'
print(pytesseract.image_to_string(img, config=custom_config))

Έξοδος -

customername
roject
tnvoleeno
ated alliumenergyservices
e
thovo

Η μαύρη λίστα χαρακτήρων

Εάν είστε βέβαιοι ότι ορισμένοι χαρακτήρες ή εκφράσεις σίγουρα δεν θα εμφανιστούν στο κείμενό σας (το OCR θα επιστρέψει λάθος κείμενο στη θέση των χαρακτήρων της μαύρης λίστας διαφορετικά), μπορείτε να προσθέσετε στη μαύρη λίστα αυτούς τους χαρακτήρες χρησιμοποιώντας την ακόλουθη διαμόρφωση.

custom_config = r'-c tessedit_char_blacklist=0123456789 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Έξοδος -

Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no
Dated %h Nov%
Pono

Εντοπισμός σε πολλές γλώσσες

Μπορείτε να ελέγξετε τις διαθέσιμες γλώσσες πληκτρολογώντας αυτό στο τερματικό

$ tesseract --list-langs

Για λήψη του tesseract για μια συγκεκριμένη χρήση γλώσσας

$ sudo apt-get install tesseract-ocr-LANG

όπου LANG είναι ο κωδικός τριών γραμμάτων για τη γλώσσα που χρειάζεστε. Μπορείτε να μάθετε τις τιμές LANG εδώ.

Μπορείτε να κατεβάσετε το θέμα .traindata αρχείο για τη γλώσσα από την οποία χρειάζεστε εδώ και τοποθετήστε το μέσα $TESSDATA_PREFIX κατάλογος (αυτός θα πρέπει να είναι ίδιος με τον tessdata ο κατάλογος είναι εγκατεστημένος) και θα πρέπει να είναι έτοιμος για χρήση.

Note – Μόνο οι γλώσσες που έχουν α .traineddata Η μορφή αρχείου υποστηρίζεται από το tesseract.

Για να καθορίσετε τη γλώσσα στην οποία χρειάζεστε την έξοδο OCR, χρησιμοποιήστε το -l LANG όρισμα στη διαμόρφωση όπου το LANG είναι ο κωδικός 3 γραμμάτων για τη γλώσσα που θέλετε να χρησιμοποιήσετε.

custom_config = r'-l eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Πάρτε αυτή την εικόνα για παράδειγμα -
Πώς να κάνετε OCR με Tesseract, OpenCV και Python
Μπορείτε να εργαστείτε με πολλές γλώσσες αλλάζοντας την παράμετρο LANG ως τέτοια –

custom_config = r'-l grc+tha+eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

και θα λάβετε την ακόλουθη έξοδο -

Here’s some Greek: Οδιο διστα ιμπεδιτ φιμ ει, αδ φελ αβχορρεανθ ελωκυενθιαμ, εξ εσε εξερσι γυ-
βεργρεν ηας. Ατ μει σολετ σριπτορεμ. ἴυς αλια λαβωρε θε. Σιθ κυωτ νυσκυαμ
τρασυνδια αν, ὠμνιυμ ελιγενδι τιν πρι. Παρτεμ φερθερεμ συσιπιαντὺυρ εξ ιυς,ναμ
%0790 แ ร เง ๑ ๕ 80 ๕ 6 ๑ อ 06 ส 0 เง น อ ๓ , πρω πρωπριαε σαεφολα ιδ. Ατ πρι δολορ νυ-
σκυαμ. 6 Thai Here’s some Thai: ν᾿ ค อ ร ั ป ซั น จ ุ ้ ย โป ร ด ิ ว เซ อ ร ์ ส ถา ป ั ต ย ์ จ ๊ า บ แจ ็ ก พ ็ อ ต ม ้ า ห ิ น อ ่ อ น ซา ก ุ ร ะ ค ั น ถ ธ ุ ร ะ ฟิ ด ส ต า ร ์ ท ง ี ้ บ อ ย
ค อ ต อ ื ่ ม แป ร ั ส ั ง โฆ ค ํ า ส า ป แฟ น ซี ศิ ล ป ว ั ฒ น ธร ร ม ไฟ ล ท ์ จ ิ ๊ ก โก ๋ ก ั บ ด ั ก เจ ล พ ล ็ อ ต ม า ม ่ า ซา ก ุ ร ะ ด ี ล เล อ
ร ์ ซี น ด ั ม พ ์ แฮ ป ป ี ้ เอ ๊ ้ า ะ อ ุ ร ั ง ค ธา ต ุ ซิ ม ฟิ น ิ ก ซ์ เท ร ล เล ่ อ ร ์ อ ว อ ร ์ ด แค น ย อ น ส ม า พ ั น ธ์ ค ร ั ว ซอ ง ฮั ม อ า
ข่ า เอ ็ ก ซ์ เพ ร ส

Note – Η γλώσσα που καθορίζεται πρώτα στο -l η παράμετρος είναι η κύρια γλώσσα.

Δυστυχώς, το tesseract δεν διαθέτει δυνατότητα αυτόματης ανίχνευσης της γλώσσας του κειμένου σε μια εικόνα. Μια εναλλακτική λύση παρέχεται από μια άλλη μονάδα python που ονομάζεται langdetect που μπορεί να εγκατασταθεί μέσω pip.

$ pip install langdetect

Αυτή η ενότητα και πάλι, δεν ανιχνεύει τη γλώσσα του κειμένου χρησιμοποιώντας μια εικόνα, αλλά χρειάζεται εισαγωγή συμβολοσειράς για να εντοπίσει τη γλώσσα από την οποία. Ο καλύτερος τρόπος για να το κάνετε αυτό είναι χρησιμοποιώντας πρώτα το tesseract για να λάβετε κείμενο OCR σε όποιες γλώσσες πιστεύετε ότι είναι εκεί, χρησιμοποιώντας langdetect για να βρείτε ποιες γλώσσες περιλαμβάνονται στο κείμενο OCR και, στη συνέχεια, εκτελέστε ξανά το OCR με τις γλώσσες που βρέθηκαν.

Ας πούμε ότι έχουμε ένα κείμενο που πιστεύαμε ότι ήταν στα αγγλικά και τα πορτογαλικά.

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)

Αυτό θα πρέπει να παράγει μια λίστα γλωσσών στο κείμενο και τις πιθανότητές τους.

[en:0.714282468983554, es:0.2857145605644145]

Οι γλωσσικοί κώδικες που χρησιμοποιούνται από langdetect ακολουθήστε τους κωδικούς ISO 639-1. Για σύγκριση, ελέγξτε αυτό και αυτό. Διαπιστώνουμε ότι η γλώσσα που χρησιμοποιείται στο κείμενο είναι τα αγγλικά και τα ισπανικά.

Παίρνουμε ξανά το κείμενο αλλάζοντας τη διαμόρφωση σε

custom_config = r'-l eng+spa --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config)

Note – Το Tesseract έχει κακή απόδοση όταν, σε μια εικόνα με πολλές γλώσσες, οι γλώσσες που καθορίζονται στη διαμόρφωση είναι λανθασμένες ή δεν αναφέρονται καθόλου. Αυτό μπορεί επίσης να παραπλανήσει αρκετά τη μονάδα langdetect.


Χρησιμοποιώντας το tessdata_fast

Εάν η ταχύτητα είναι μια σημαντική ανησυχία για εσάς, μπορείτε να αντικαταστήσετε τα μοντέλα γλώσσας tessdata με μοντέλα tessdata_fast που είναι ακέραιες εκδόσεις 8-bit των μοντέλων tessdata.

Σύμφωνα με το tessdata_fast GitHub -

Αυτό το αποθετήριο περιέχει γρήγορες ακέραιες εκδόσεις εκπαιδευμένων μοντέλων για το Μηχανή OCR ανοιχτού κώδικα Tesseract.

Αυτά τα μοντέλα λειτουργούν μόνο με τον κινητήρα LSTM OCR του Tesseract 4.

  • Αυτά είναι ένας συμβιβασμός ταχύτητας/ακρίβειας ως προς το τι πρόσφερε την καλύτερη "αξία για τα χρήματα" σε ταχύτητα έναντι ακρίβειας.
  • Για ορισμένες γλώσσες, αυτό είναι ακόμα καλύτερο, αλλά για τις περισσότερες όχι.
  • Στη συνέχεια, η διαμόρφωση δικτύου "βέλτιστη σχέση ποιότητας τιμής" ολοκληρώθηκε για περαιτέρω ταχύτητα.
  • Οι περισσότεροι χρήστες θα θέλουν να χρησιμοποιήσουν αυτά τα εκπαιδευμένα αρχεία δεδομένων για να κάνουν OCR και αυτά θα αποστέλλονται ως μέρος διανομών Linux, π.χ. Ubuntu 18.04.
  • Βελτιωμένος συντονισμός/αυξητική προπόνηση θα ΔΕΝ είναι δυνατό από αυτά fast μοντέλα, καθώς είναι ακέραιοι 8-bit.
  • Όταν χρησιμοποιείτε τα μοντέλα σε αυτό το αποθετήριο, υποστηρίζεται μόνο η νέα μηχανή OCR που βασίζεται σε LSTM. Η κληρονομιά tesseract Ο κινητήρας δεν υποστηρίζεται με αυτά τα αρχεία, επομένως οι λειτουργίες oem '0' και '2' του Tesseract δεν θα λειτουργούν με αυτά.

Χρησιμοποιώ tessdata_fast μοντέλα αντί για tessdata, το μόνο που χρειάζεται να κάνετε είναι να κατεβάσετε το δικό σας tessdata_fast αρχείο δεδομένων γλώσσας από εδώ και τοποθετήστε το μέσα σας $TESSDATA_PREFIX Κατάλογο.


Χρειάζεστε ψηφιοποίηση εγγράφων, αποδείξεων ή τιμολογίων αλλά πολύ τεμπέλης για κωδικοποίηση; Προχωρήστε προς Νανοδίκτυα και δημιουργήστε δωρεάν μοντέλα OCR!


Εκπαίδευση Tesseract σε προσαρμοσμένα δεδομένα

Το Tesseract 4.00 περιλαμβάνει μια νέα μηχανή αναγνώρισης που βασίζεται σε νευρωνικά δίκτυα που προσφέρει σημαντικά υψηλότερη ακρίβεια στις εικόνες εγγράφων. Τα νευρωνικά δίκτυα απαιτούν σημαντικά περισσότερα δεδομένα εκπαίδευσης και εκπαιδεύονται πολύ πιο αργά από το βασικό Tesseract. Για γλώσσες που βασίζονται στα Λατινικά, τα υπάρχοντα δεδομένα μοντέλου που παρέχονται έχουν εκπαιδευτεί σε περίπου 400000 γραμμές κειμένου που εκτείνονται σε περίπου 4500 γραμματοσειρές.

Για να εκτελέσετε επιτυχώς το εκπαιδευτικό σεμινάριο Tesseract 4.0 LSTM, πρέπει να έχετε μια λειτουργική εγκατάσταση των εργαλείων εκπαίδευσης Tesseract 4 και Tesseract 4 και επίσης να έχετε τα σενάρια εκπαίδευσης και τα απαιτούμενα εκπαιδευμένα αρχεία δεδομένων σε ορισμένους καταλόγους. Επίσκεψη repo github για αρχεία και εργαλεία.

Το Tesseract 4.00 διαρκεί από μερικές ημέρες έως μερικές εβδομάδες για προπόνηση από την αρχή. Ακόμη και με όλα αυτά τα νέα δεδομένα προπόνησης, επομένως εδώ υπάρχουν μερικές επιλογές για εκπαίδευση:

  • Καλές ρυθμίσεις – Ξεκινώντας με μια υπάρχουσα εκπαιδευμένη γλώσσα, προπονηθείτε στα συγκεκριμένα πρόσθετα δεδομένα σας. Για παράδειγμα εκπαίδευση σε ένα χειρόγραφο σύνολο δεδομένων και μερικές πρόσθετες γραμματοσειρές.
  • Κόψτε το επάνω στρώμα – από το δίκτυο και επανεκπαιδεύστε ένα νέο ανώτερο στρώμα χρησιμοποιώντας τα νέα δεδομένα. Εάν η λεπτομέρεια δεν λειτουργεί, αυτή είναι πιθανότατα η επόμενη καλύτερη επιλογή. Η αναλογία γιατί είναι χρήσιμο, πάρτε για παράδειγμα μοντέλα που έχουν εκπαιδευτεί στο σύνολο δεδομένων ImageNet. Ο στόχος είναι να δημιουργηθεί ένας ταξινομητής γάτας ή σκύλου, τα χαμηλότερα στρώματα στο μοντέλο είναι καλά σε αφαίρεση χαμηλού επιπέδου ως γωνίες, οριζόντιες και κάθετες γραμμές, αλλά τα υψηλότερα στρώματα στο μοντέλο συνδυάζουν αυτά τα χαρακτηριστικά και ανιχνεύουν αυτιά, μάτια, μύτη γάτας ή σκύλου και ούτω καθεξής. Με την επανεκπαίδευση μόνο των ανώτερων επιπέδων, χρησιμοποιείτε γνώσεις από τα χαμηλότερα επίπεδα και συνδυάζεστε με το νέο σας διαφορετικό σύνολο δεδομένων.
  • Επανεκπαίδευση από την αρχή – Αυτή είναι μια πολύ αργή προσέγγιση, εκτός εάν έχετε ένα πολύ αντιπροσωπευτικό και αρκετά μεγάλο σετ εκπαίδευσης για το πρόβλημά σας. Ο καλύτερος πόρος για προπόνηση από το μηδέν ακολουθεί αυτό repo github.

Ένας οδηγός για το πώς να εκπαιδεύσετε τα προσαρμοσμένα δεδομένα σας και να δημιουργήσετε .traineddata μπορείτε να βρείτε αρχεία εδώ, εδώ και εδώ.

Δεν θα καλύψουμε τον κώδικα για την εκπαίδευση χρησιμοποιώντας το Tesseract σε αυτήν την ανάρτηση ιστολογίου.

Πώς να κάνετε OCR με Tesseract, OpenCV και Python

Περιορισμοί του Tesseract

Το Tesseract λειτουργεί καλύτερα όταν υπάρχει καθαρή τμηματοποίηση του κειμένου προσκηνίου από το φόντο. Στην πράξη, μπορεί να είναι εξαιρετικά δύσκολο να εγγυηθεί κανείς αυτούς τους τύπους εγκατάστασης. Υπάρχουν διάφοροι λόγοι για τους οποίους ενδέχεται να μην λαμβάνετε έξοδο καλής ποιότητας από το Tesseract, όπως εάν η εικόνα έχει θόρυβο στο φόντο. Όσο καλύτερη είναι η ποιότητα της εικόνας (μέγεθος, αντίθεση, αστραπή) τόσο καλύτερο είναι το αποτέλεσμα αναγνώρισης. Απαιτείται λίγη προεπεξεργασία για τη βελτίωση των αποτελεσμάτων OCR, οι εικόνες πρέπει να κλιμακώνονται κατάλληλα, να έχουν όσο το δυνατόν περισσότερη αντίθεση εικόνας και το κείμενο πρέπει να είναι οριζόντια στοίχιση. Το Tesseract OCR είναι αρκετά ισχυρό, αλλά έχει τους ακόλουθους περιορισμούς.

Οι περιορισμοί Tesseract συνοψίζονται στη λίστα.

  • Το OCR δεν είναι τόσο ακριβές όσο ορισμένες εμπορικές λύσεις που έχουμε στη διάθεσή μας.
  • Δεν τα πάει καλά με εικόνες που επηρεάζονται από τεχνουργήματα, όπως μερική απόφραξη, παραμορφωμένη προοπτική και περίπλοκο φόντο.
  • Δεν είναι σε θέση να αναγνωρίσει το χειρόγραφο.
  • Μπορεί να βρει ασυναρτησίες και να το αναφέρει ως έξοδο OCR.
  • Εάν ένα έγγραφο περιέχει γλώσσες εκτός αυτών που δίνονται στα ορίσματα -l LANG, τα αποτελέσματα μπορεί να είναι φτωχά.
  • Δεν είναι πάντα καλό στην ανάλυση της φυσικής σειράς ανάγνωσης των εγγράφων. Για παράδειγμα, μπορεί να μην αναγνωρίσει ότι ένα έγγραφο περιέχει δύο στήλες και μπορεί να προσπαθήσει να ενώσει κείμενο μεταξύ των στηλών.
  • Οι σαρώσεις κακής ποιότητας μπορεί να παράγουν OCR κακής ποιότητας.
  • Δεν εκθέτει πληροφορίες σχετικά με το κείμενο της οικογένειας γραμματοσειρών στο οποίο ανήκει.


Υπάρχει φυσικά ένας καλύτερος, πολύ πιο απλός και πιο διαισθητικός τρόπος για να εκτελέσετε εργασίες OCR.


OCR με Nanonets

Πώς να κάνετε OCR με Tesseract, OpenCV και Python

Η API OCR Nanonets σας επιτρέπει να δημιουργήσετε μοντέλα OCR με ευκολία. Δεν χρειάζεται να ανησυχείτε για την προεπεξεργασία των εικόνων σας ή να ανησυχείτε για την αντιστοίχιση προτύπων ή για τη δημιουργία μηχανών βάσει κανόνων για να αυξήσετε την ακρίβεια του μοντέλου σας OCR.

Μπορείτε να ανεβάσετε τα δεδομένα σας, να τα σχολιάσετε, να ρυθμίσετε το μοντέλο για να εκπαιδεύσετε και να περιμένετε να λάβετε προβλέψεις μέσω ενός περιβάλλοντος εργασίας χρήστη που βασίζεται σε πρόγραμμα περιήγησης χωρίς να γράψετε ούτε μια γραμμή κώδικα, να ανησυχείτε για τις GPU ή να βρείτε τις σωστές αρχιτεκτονικές για τα μοντέλα βαθιάς μάθησης. Μπορείτε επίσης να αποκτήσετε τις απαντήσεις JSON κάθε πρόβλεψης για να την ενσωματώσετε με τα δικά σας συστήματα και να δημιουργήσετε εφαρμογές με μηχανική εκμάθηση που βασίζονται σε αλγόριθμους τελευταίας τεχνολογίας και μια ισχυρή υποδομή.

Χρήση του GUI: https://app.nanonets.com/

Μπορείτε επίσης να χρησιμοποιήσετε το API Nanonets-OCR ακολουθώντας τα παρακάτω βήματα: ‌

Βήμα 1: Κλωνοποιήστε το Repo, Εγκαταστήστε εξαρτήσεις

git clone https://github.com/NanoNets/nanonets-ocr-sample-python.git
cd nanonets-ocr-sample-python
sudo pip install requests tqdm

Βήμα 2: Αποκτήστε το δωρεάν κλειδί API
Αποκτήστε το δωρεάν κλειδί API σας http://app.nanonets.com/#/keys

Πώς να κάνετε OCR με Tesseract, OpenCV και Python

Βήμα 3: Ορίστε το κλειδί API ως μεταβλητή περιβάλλοντος

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

Βήμα 4: Δημιουργήστε ένα νέο μοντέλο

python ./code/create-model.py

Σημείωση: Αυτό δημιουργεί ένα MODEL_ID που χρειάζεστε για το επόμενο βήμα

Βήμα 5: Προσθέστε το αναγνωριστικό μοντέλου ως μεταβλητή περιβάλλοντος

export NANONETS_MODEL_ID=YOUR_MODEL_ID

Σημείωση: θα λάβετε το YOUR_MODEL_ID από το προηγούμενο βήμα

Βήμα 6: Ανεβάστε τα δεδομένα εκπαίδευσης
Τα δεδομένα εκπαίδευσης βρίσκονται στο images (αρχεία εικόνας) και annotations (σχολιασμοί για τα αρχεία εικόνας)

python ./code/upload-training.py

Βήμα 7: Εκπαίδευση μοντέλου
Μετά τη μεταφόρτωση των εικόνων, αρχίστε να εκπαιδεύετε το μοντέλο

python ./code/train-model.py

Βήμα 8: Λήψη κατάστασης μοντέλου
Το μοντέλο διαρκεί ~ 2 ώρες για να εκπαιδεύσει. Θα λάβετε ένα μήνυμα ηλεκτρονικού ταχυδρομείου μόλις εκπαιδευτεί το μοντέλο. Εν τω μεταξύ, ελέγχετε την κατάσταση του μοντέλου

python ./code/model-state.py

Βήμα 9: Κάντε πρόβλεψη
Μόλις εκπαιδευτεί το μοντέλο. Μπορείτε να κάνετε προβλέψεις χρησιμοποιώντας το μοντέλο

python ./code/prediction.py ./images/151.jpg


Nanonets και άνθρωποι στον βρόχο

Η οθόνη «Μέτρια» βοηθά τις διαδικασίες διόρθωσης και εισαγωγής και μειώνει τον φόρτο εργασίας του χειροκίνητου αναθεωρητή κατά σχεδόν 90% και μειώνει το κόστος κατά 50% για τον οργανισμό.

Πώς να κάνετε OCR με Tesseract, OpenCV και Python

Τα χαρακτηριστικά γνωρίσματα περιλαμβάνουν

  1. Παρακολουθήστε τις σωστές προβλέψεις
  2. Παρακολουθήστε ποια είναι λάθος
  3. Πραγματοποιήστε διορθώσεις στις ανακριβείς
  4. Διαγράψτε αυτά που είναι λάθος
  5. Συμπληρώστε τις ελλείψεις προβλέψεων
  6. Φιλτράρετε εικόνες με εύρη ημερομηνιών
  7. Λάβετε μετρήσεις από εποπτευόμενες εικόνες έναντι αυτών που δεν ελέγχονται

Όλα τα πεδία είναι δομημένα σε ένα εύχρηστο GUI, το οποίο επιτρέπει στον χρήστη να επωφεληθεί από την τεχνολογία OCR και να το βοηθήσει να βελτιωθεί όσο πηγαίνει, χωρίς να χρειάζεται να πληκτρολογήσετε κανένα κωδικό ή να καταλάβετε πώς λειτουργεί η τεχνολογία.


Έχετε κατά νου κάποιο πρόβλημα OCR; Θέλετε να μειώσετε το κόστος εισαγωγής δεδομένων του οργανισμού σας; Κατευθυνθείτε προς Νανοδίκτυα και να δημιουργήσετε μοντέλα OCR για να εξαγωγή κειμένου από εικόνες or εξαγωγή δεδομένων από PDF!


Συμπέρασμα

Ακριβώς όπως η βαθιά μάθηση έχει επηρεάσει σχεδόν κάθε πτυχή της όρασης του υπολογιστή, το ίδιο ισχύει και για την αναγνώριση χαρακτήρων και την αναγνώριση χειρογράφου. Τα μοντέλα που βασίζονται σε βαθιά μάθηση έχουν καταφέρει να επιτύχουν πρωτοφανή ακρίβεια αναγνώρισης κειμένου, πολύ πέρα ​​από τα παραδοσιακά εξαγωγή πληροφοριών και επεξεργασία εικόνας μηχανικής εκμάθησης προσεγγίσεις.

Το Tesseract έχει καλή απόδοση όταν οι εικόνες εγγράφων ακολουθούν τις ακόλουθες οδηγίες:

  • Καθαρίστε την κατάτμηση του κειμένου προσκηνίου από το φόντο
  • Οριζόντια ευθυγράμμιση και κατάλληλη κλίμακα
  • Εικόνα υψηλής ποιότητας χωρίς θολότητα και θόρυβο

Η τελευταία έκδοση του Tesseract 4.0 υποστηρίζει OCR που βασίζεται σε βαθιά μάθηση που είναι σημαντικά πιο ακριβής. Ο ίδιος ο κινητήρας OCR είναι χτισμένος σε ένα δίκτυο μακράς βραχυπρόθεσμης μνήμης (LSTM), ένα είδος επαναλαμβανόμενου νευρωνικού δικτύου (RNN).

Το Tesseract είναι τέλειο για σάρωση καθαρών εγγράφων και διαθέτει αρκετά υψηλή ακρίβεια και μεταβλητότητα γραμματοσειράς, καθώς η εκπαίδευσή του ήταν ολοκληρωμένη. Θα έλεγα ότι το Tesseract είναι ένα χρήσιμο εργαλείο εάν η εργασία σας είναι η σάρωση βιβλίων, εγγράφων και έντυπου κειμένου σε καθαρό λευκό φόντο.


Περισσότερες Πληροφορίες

Ενημέρωση:
Πολλοί άνθρωποι μας ρώτησαν πώς μπορούν να λάβουν ημερομηνία με τη μορφή κειμένου ή χρησιμοποιώντας το πότε ανιχνεύει ημερομηνία ή άλλα συγκεκριμένα δεδομένα, ώστε να μπορούν να προσαρτηθούν στη λίστα.
Ιδού η απάντηση:
Στον κώδικα για να σχεδιάσετε ένα πλαίσιο οριοθέτησης γύρω από το πλαίσιο ημερομηνίας, θα παρατηρήσετε μια γραμμή που ταιριάζει με το regex μοτίβο με d['text']. Σχεδιάζει ένα πλαίσιο μόνο εάν το μοτίβο ταιριάζει. Θα μπορούσατε απλώς να εξαγάγετε τις τιμές από d['text'] μόλις ταιριάζει το μοτίβο και προσθέστε τα σε μια λίστα.

Ενημέρωση 2:
Για να απαντήσουμε σε ερωτήσεις σχετικά με μη αγγλικά OCR, έχουμε ενημερώσει περαιτέρω λίστες ανάγνωσης.

Σφραγίδα ώρας:

Περισσότερα από AI και μηχανική μάθηση