Cara OCR dengan Tesseract, OpenCV dan Python PlatoBlockchain Data Intelligence. Pencarian Vertikal. ai.

Cara OCR dengan Tesseract, OpenCV dan Python

Cara OCR dengan Tesseract, OpenCV dan Python

Dalam posting blog ini, kami akan mencoba menjelaskan teknologi di balik Tesseract Engine yang paling banyak digunakan, yang ditingkatkan dengan pengetahuan terbaru yang diteliti dalam pengenalan karakter optik. Artikel ini juga akan berfungsi sebagai panduan / tutorial bagaimana menerapkan OCR di python menggunakan mesin Tesseract. Kami akan membahas modul-modul berikut:

  • Fitur Tesseract OCR
  • Pemrosesan awal untuk OCR menggunakan OpenCV
  • Menjalankan Tesseract dengan CLI dan Python
  • Keterbatasan mesin Tesseract

Daftar Isi

Pengantar

OCR = Character Recognition optik. Dengan kata lain, sistem OCR mengubah gambar teks dua dimensi, yang dapat berisi teks yang dicetak mesin atau teks tulisan tangan dari representasi gambarnya menjadi teks yang dapat dibaca mesin. OCR sebagai sebuah proses umumnya terdiri dari beberapa sub-proses untuk tampil seakurat mungkin. Subprosesnya adalah:

  • Pemrosesan awal Gambar
  • Pelokalan Teks
  • Segmentasi Karakter
  • Pengakuan Karakter
  • Pengolahan pasca

Sub-proses dalam daftar di atas tentu saja dapat berbeda, tetapi ini kira-kira merupakan langkah-langkah yang diperlukan untuk mendekati pengenalan karakter otomatis. Dalam perangkat lunak OCR, tujuan utamanya adalah mengidentifikasi dan menangkap semua kata unik menggunakan bahasa yang berbeda dari karakter teks tertulis.

Selama hampir dua dekade, sistem pengenalan karakter optik telah banyak digunakan untuk menyediakan entri teks otomatis ke dalam sistem komputerisasi. Padahal selama ini sistem OCR konvensional (seperti zona OCR) tidak pernah mengatasi ketidakmampuan mereka untuk membaca lebih dari segelintir jenis font dan format halaman. Jenis spasi proporsional (yang mencakup hampir semua salinan mengeset), font printer laser, dan bahkan banyak font mesin tik non-proporsional, tetap berada di luar jangkauan sistem ini. Dan sebagai hasilnya, OCR konvensional tidak pernah mencapai lebih dari dampak marginal pada jumlah total dokumen yang membutuhkan konversi ke dalam bentuk digital.

Cara OCR dengan Tesseract, OpenCV dan Python
Proses Pengenalan Karakter Optik (Kesopanan)

Mesin OCR generasi berikutnya menangani masalah-masalah yang disebutkan di atas dengan sangat baik dengan memanfaatkan penelitian terbaru di bidang pembelajaran yang mendalam. Dengan memanfaatkan kombinasi model dalam dan kumpulan data besar yang tersedia untuk umum, model mencapai akurasi mutakhir pada tugas-tugas tertentu. Saat ini juga memungkinkan untuk menghasilkan data sintetis dengan font yang berbeda menggunakan jaringan adversarial generatif dan beberapa pendekatan generatif lainnya.

Pengenalan Karakter Optik tetap a masalah yang menantang ketika teks muncul di lingkungan yang tidak dibatasi, seperti pemandangan alam, karena distorsi geometris, latar belakang yang rumit, dan font yang beragam. Teknologi ini masih memiliki potensi besar karena berbagai kasus penggunaan OCR berbasis pembelajaran mendalam seperti


Memiliki masalah OCR dalam pikiran? Ingin mengurangi biaya entri data organisasi Anda? Pergi ke Nanonet dan membangun model OCR untuk ekstrak teks dari gambar or mengekstrak data dari PDF dengan berbasis AI OCR PDF!


Alat OCR Sumber Terbuka

Ada banyak optical character recognition perangkat lunak tersedia. Saya tidak menemukan perbandingan kualitas di antara mereka, tetapi saya akan menulis tentang beberapa di antaranya yang tampaknya paling ramah pengembang.

tesseract - mesin OCR sumber terbuka yang telah mendapatkan popularitas di kalangan pengembang OCR. Meskipun terkadang sulit untuk diterapkan dan dimodifikasi, tidak ada terlalu banyak alternatif OCR yang gratis dan kuat di pasaran untuk waktu yang lama. Tesseract dimulai sebagai Ph.D. proyek penelitian di HP Labs, Bristol. Itu mendapatkan popularitas dan dikembangkan oleh HP antara 1984 dan 1994. Pada tahun 2005 HP merilis Tesseract sebagai perangkat lunak sumber terbuka. Sejak 2006 dikembangkan oleh Google.

Cara OCR dengan Tesseract, OpenCV dan Python
perbandingan tren google untuk berbagai alat OCR open source

ocropus - OCRopus adalah sistem OCR sumber terbuka yang memungkinkan evaluasi dan penggunaan kembali komponen OCR dengan mudah oleh peneliti dan perusahaan. Kumpulan program analisis dokumen, bukan sistem OCR turn-key. Untuk menerapkannya ke dokumen Anda, Anda mungkin perlu melakukan beberapa pemrosesan gambar sebelumnya, dan mungkin juga melatih model baru. Selain skrip pengenalan itu sendiri, ada beberapa skrip untuk pengeditan dan koreksi kebenaran dasar, mengukur tingkat kesalahan, menentukan matriks kebingungan yang mudah digunakan dan diedit.


Mata - Ocular bekerja paling baik pada dokumen yang dicetak menggunakan hand press, termasuk yang ditulis dalam berbagai bahasa. Ini beroperasi menggunakan baris perintah. Ini adalah sistem OCR bersejarah yang canggih. Fitur utamanya adalah:

  • Pembelajaran font yang tidak dikenal tanpa pengawasan: hanya membutuhkan gambar dokumen dan korpus teks.
  • Kemampuan untuk menangani dokumen yang berisik: tinta yang tidak konsisten, spasi, perataan vertikal
  • Dukungan untuk dokumen multibahasa, termasuk dokumen yang memiliki banyak peralihan kode tingkat kata.
  • Pembelajaran pola variasi ortografi tanpa pengawasan termasuk ejaan kuno dan cara cepat printer.
  • Secara bersamaan, transkripsi bersama menjadi bentuk diplomatik (literal) dan normal.


SwiftOCR - Saya juga akan menyebutkan mesin OCR yang ditulis dalam Swift karena ada pengembangan besar yang dilakukan untuk memajukan penggunaan Swift sebagai bahasa pemrograman pengembangan yang digunakan untuk pembelajaran mendalam. Periksa blog untuk mengetahui lebih lanjut mengapa. SwiftOCR adalah pustaka OCR yang cepat dan sederhana yang menggunakan jaringan saraf untuk pengenalan gambar. SwiftOCR mengklaim bahwa mesin mereka mengungguli pustaka Tessaract yang terkenal.

Di posting blog ini, kami akan menempatkan fokus pada Tesseract OCR dan cari tahu lebih lanjut tentang cara kerjanya dan cara penggunaannya.


Tesseract OCR

Tesseract adalah mesin pengenalan teks sumber terbuka (OCR), tersedia di bawah lisensi Apache 2.0. Ini dapat digunakan secara langsung, atau (untuk pemrogram) menggunakan API untuk mengekstrak teks yang dicetak dari gambar. Ini mendukung berbagai bahasa. Tesseract tidak memiliki GUI bawaan, tetapi ada beberapa yang tersedia dari Halaman 3rdParty. Tesseract kompatibel dengan banyak bahasa pemrograman dan kerangka kerja melalui pembungkus yang dapat ditemukan di sini. Ini dapat digunakan dengan analisis tata letak yang ada untuk mengenali teks dalam dokumen besar, atau dapat digunakan bersama dengan detektor teks eksternal untuk mengenali teks dari gambar baris teks tunggal.

Cara OCR dengan Tesseract, OpenCV dan Python
Alur Proses OCR untuk membangun API dengan Tesseract dari a posting blog

Tesseract 4.00 menyertakan subsistem jaringan saraf baru yang dikonfigurasi sebagai pengenal baris teks. Itu berasal dari LSTM berbasis Python OCRopus implementasi tetapi telah didesain ulang untuk Tesseract di C ++. Sistem jaringan neural di Tesseract mendahului TensorFlow tetapi kompatibel dengannya, karena ada bahasa deskripsi jaringan yang disebut Variable Graph Specification Language (VGSL), yang juga tersedia untuk TensorFlow.

Untuk mengenali gambar yang berisi satu karakter, kami biasanya menggunakan Convolutional Neural Network (CNN). Teks dengan panjang sembarang adalah urutan karakter, dan masalah seperti itu diselesaikan menggunakan RNN dan LSTM adalah bentuk RNN โ€‹โ€‹yang populer. Baca posting ini untuk mempelajari lebih lanjut LSTM.


Teknologi - Cara kerjanya

LSTM sangat bagus dalam mempelajari urutan tetapi sangat melambat ketika jumlah status terlalu besar. Ada hasil empiris yang menyarankan bahwa lebih baik meminta LSTM untuk mempelajari urutan panjang daripada urutan pendek di banyak kelas. Tesseract dikembangkan dari model OCRopus dengan Python yang merupakan cabang dari LSMT di C ++, yang disebut CLSTM. CLSTM adalah implementasi model jaringan saraf berulang LSTM di C ++, menggunakan pustaka Eigen untuk komputasi numerik.

Cara OCR dengan Tesseract, OpenCV dan Python
Tesseract 3 proses OCR dari kertas

Legacy Tesseract 3.x bergantung pada proses multi-tahap di mana kami dapat membedakan langkah-langkah:

  • Pencarian kata
  • Pencarian garis
  • Klasifikasi karakter

Pencarian kata dilakukan dengan mengatur baris teks menjadi blob, dan garis serta daerah dianalisis untuk nada tetap atau teks proporsional. Baris teks dipecah menjadi kata-kata yang berbeda sesuai dengan jenis spasi karakter. Pengakuan kemudian berlanjut sebagai proses dua langkah. Pada operan pertama, dilakukan upaya untuk mengenali setiap kata secara bergantian. Setiap kata yang memuaskan diteruskan ke pengklasifikasi adaptif sebagai data pelatihan. Pengklasifikasi adaptif kemudian mendapat kesempatan untuk lebih akurat mengenali teks di bagian bawah halaman.

Modernisasi alat Tesseract merupakan upaya pembersihan kode dan penambahan model LSTM baru. Citra masukan diproses dalam kotak (persegi panjang) baris demi baris yang diumpankan ke dalam model LSTM dan memberikan keluaran. Pada gambar di bawah ini kita dapat memvisualisasikan cara kerjanya.

Cara OCR dengan Tesseract, OpenCV dan Python
Bagaimana Tesseract menggunakan model LSTM presentasi

Setelah menambahkan alat pelatihan baru dan melatih model dengan banyak data dan font, Tesseract mencapai kinerja yang lebih baik. Tetap saja, tidak cukup baik untuk mengerjakan teks tulisan tangan dan font aneh. Dimungkinkan untuk menyempurnakan atau melatih kembali lapisan atas untuk eksperimen.


Menginstal Tesseract

Menginstal tesseract di Windows mudah dengan binari yang telah dikompilasi sebelumnya ditemukan di sini. Jangan lupa untuk mengedit variabel lingkungan "jalur" dan menambahkan jalur tesseract. Untuk instalasi Linux atau Mac itu diinstal dengan beberapa perintah.

Setelah instalasi, verifikasi bahwa semuanya berfungsi dengan mengetikkan perintah di terminal atau cmd:

$ tesseract --version

Dan Anda akan melihat hasilnya seperti:

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

Anda dapat menginstal pembungkus python untuk tesseract setelah ini menggunakan pip.
$ pip install pytesseract

Perpustakaan Tesseract dikirimkan dengan alat baris perintah praktis yang disebut tesseract. Kita dapat menggunakan alat ini untuk melakukan OCR pada gambar dan hasilnya disimpan dalam file teks. Jika kami ingin mengintegrasikan Tesseract dalam kode C ++ atau Python kami, kami akan menggunakan API Tesseract.


Menjalankan Tesseract dengan CLI

Panggil mesin Tesseract pada gambar dengan jalur_gambar dan ubah gambar menjadi teks, tulis baris demi baris di command prompt dengan mengetik berikut ini:

$ tesseract image_path stdout

Untuk menulis teks keluaran dalam sebuah file:

$ tesseract image_path text_result.txt

Untuk menentukan nama model bahasa, tulis shortcut bahasa setelahnya -l bendera, secara default dibutuhkan bahasa Inggris:

$ tesseract image_path text_result.txt -l eng

Secara default, Tesseract mengharapkan halaman teks saat menyegmentasikan gambar. Jika Anda hanya ingin OCR wilayah kecil, coba mode segmentasi yang berbeda, menggunakan โ€“Psm argumen. Ada 14 mode yang tersedia yang dapat ditemukan di sini. Secara default, Tesseract sepenuhnya mengotomatiskan segmentasi halaman tetapi tidak melakukan orientasi dan deteksi skrip. Untuk menentukan parameter, ketikkan yang berikut ini:

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

Ada juga satu argumen penting lagi, mode mesin OCR (oem). Tesseract 4 memiliki dua mesin OCR - mesin Tesseract Legacy dan mesin LSTM. Ada empat mode operasi yang dipilih dengan menggunakan opsi โ€“oem.
0 Mesin lama saja.
1 Jaringan saraf mesin LSTM saja.
2 mesin Legacy + LSTM.
3 Default, berdasarkan apa yang tersedia.

Cara OCR dengan Tesseract, OpenCV dan Python
Hasil dari mesin OCR Tesseract

OCR dengan Pytesseract dan OpenCV

Pytesseract adalah pembungkus untuk Tesseract-OCR Engine. Ini juga berguna sebagai skrip permintaan yang berdiri sendiri untuk tesseract, karena dapat membaca semua jenis gambar yang didukung oleh pustaka pencitraan Pillow dan Leptonica, termasuk jpeg, png, gif, bmp, tiff, dan lainnya. Info lebih lanjut tentang pendekatan Python baca di sini. Kode untuk tutorial ini dapat ditemukan di sini gudang.

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)

Pemrosesan awal untuk Tesseract

Untuk menghindari semua penurunan akurasi keluaran Tesseract, Anda perlu memastikan gambarnya tepat diproses sebelumnya.

Ini termasuk penskalaan ulang, binarisasi, penghapusan derau, deskewing, dll.

Untuk memproses gambar terlebih dahulu untuk OCR, gunakan salah satu fungsi python berikut atau ikuti Dokumentasi 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) 

Mari kita bekerja dengan sebuah contoh untuk melihat segala sesuatunya dengan lebih baik. Seperti inilah gambar asli kami โ€“

Cara OCR dengan Tesseract, OpenCV dan Python
Sistem penulisan Aurebesh

Setelah preprocessing dengan kode berikut

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

dan memplot gambar yang dihasilkan, kami mendapatkan hasil sebagai berikut.

Cara OCR dengan Tesseract, OpenCV dan Python
Gambar setelah preprocessing

Output untuk gambar asli terlihat seperti ini -

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

Inilah tampilan output untuk berbagai gambar yang telah diproses sebelumnya โ€“

Gambar tepi Canny (tidak begitu bagus) -

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

Gambar dengan ambang batas -

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

Gambar pembuka -

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


Mengumpulkan kotak di sekitar teks

Dengan menggunakan Pytesseract, Anda bisa mendapatkan informasi kotak pembatas untuk hasil OCR Anda menggunakan yang berikut ini kode.

Skrip di bawah ini akan memberi Anda informasi kotak pembatas untuk setiap karakter yang terdeteksi oleh tesseract selama 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)

Jika Anda ingin kotak di sekitar kata, bukan karakter, fungsinya image_to_data akan berguna. Anda bisa menggunakan image_to_data fungsi dengan tipe keluaran yang ditentukan dengan pytesseract Output.

Cara OCR dengan Tesseract, OpenCV dan Python

Pikirkan masalah OCR? Ingin mendigitalkan faktur, PDF, atau plat nomor? Kepala ke Nanonet dan bangun model OCR gratis!


Kami akan menggunakan contoh gambar faktur di atas untuk menguji keluaran tesseract kami.

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())

Ini akan memberi Anda keluaran berikut -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

Dengan kamus ini, kita dapat mendeteksi setiap kata, informasi kotak pembatasnya, teks di dalamnya, dan skor keyakinan untuk masing-masing kata.

Anda dapat memplot kotak dengan menggunakan kode di bawah ini -

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)

Inilah yang akan terlihat seperti gambar contoh faktur.

Cara OCR dengan Tesseract, OpenCV dan Python


Pencocokan template teks

Ambil contoh mencoba menemukan di mana tanggal dalam gambar. Di sini template kami akan menjadi pola ekspresi reguler yang akan kami cocokkan dengan hasil OCR kami untuk menemukan kotak pembatas yang sesuai. Kami akan menggunakan regex modul dan image_to_data berfungsi untuk ini.

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)

Seperti yang diharapkan, kami mendapatkan satu kotak di sekitar tanggal faktur pada gambar.

Cara OCR dengan Tesseract, OpenCV dan Python

Mode segmentasi halaman

Ada beberapa cara menganalisis halaman teks. Api tesseract menyediakan beberapa mode segmentasi halaman jika Anda ingin menjalankan OCR hanya pada wilayah kecil atau dalam orientasi berbeda, dll.

Berikut daftar mode segmentasi halaman yang didukung oleh tesseract โ€“

0 Orientasi dan deteksi skrip (OSD) saja.
1 Segmentasi halaman otomatis dengan OSD.
2 Segmentasi halaman otomatis, tetapi tidak ada OSD, atau OCR.
3 Segmentasi halaman sepenuhnya otomatis, tetapi tidak ada OSD. (Default)
4 Asumsikan satu kolom teks dengan ukuran variabel.
5 Asumsikan satu blok seragam teks vertikal rata.
6 Asumsikan satu blok teks seragam.
7 Perlakukan gambar sebagai satu baris teks.
8 Perlakukan gambar sebagai satu kata.
9 Perlakukan gambar sebagai satu kata dalam lingkaran.
10 Perlakukan gambar sebagai satu karakter.
11 Teks renggang. Temukan teks sebanyak mungkin tanpa urutan tertentu.
12 Teks renggang dengan OSD.
13 Garis mentah. Perlakukan gambar sebagai satu baris teks, melewati peretasan yang khusus untuk Tesseract.

Untuk mengubah mode segmentasi halaman Anda, ubah --psm argumen dalam string konfigurasi kustom Anda ke salah satu kode mode yang disebutkan di atas.


Deteksi orientasi dan skrip

Anda dapat mendeteksi orientasi teks pada gambar Anda dan juga skrip tempat teks itu ditulis. Gambar berikut -
Cara OCR dengan Tesseract, OpenCV dan Python
setelah menjalankan kode berikut -

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)

akan mencetak keluaran berikut.

angle: 90
script: Latin

Deteksi hanya angka

Ambil gambar ini misalnya -
Cara OCR dengan Tesseract, OpenCV dan Python
Teks yang diekstrak dari gambar ini terlihat seperti ini.

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

Anda hanya dapat mengenali angka dengan mengubah konfigurasinya menjadi berikut

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

Outputnya akan terlihat seperti ini.

-- . 43876324
172018
0 76496234

Karakter daftar putih

Katakanlah Anda hanya ingin mendeteksi karakter tertentu dari gambar yang diberikan dan mengabaikan sisanya. Anda dapat menentukan daftar putih karakter Anda (di sini, kami telah menggunakan semua karakter huruf kecil dari a sampai z saja) dengan menggunakan konfigurasi berikut.

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

Keluaran -

customername
roject
tnvoleeno
ated alliumenergyservices
e
thovo

Karakter yang masuk daftar hitam

Jika Anda yakin beberapa karakter atau ekspresi pasti tidak akan muncul dalam teks Anda (OCR akan mengembalikan teks yang salah sebagai pengganti karakter yang masuk daftar hitam), Anda dapat memasukkan karakter tersebut ke daftar hitam dengan menggunakan konfigurasi berikut.

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

Keluaran -

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

Deteksi dalam berbagai bahasa

Anda dapat memeriksa bahasa yang tersedia dengan mengetik ini di terminal

$ tesseract --list-langs

Untuk mengunduh tesseract untuk penggunaan bahasa tertentu

$ sudo apt-get install tesseract-ocr-LANG

di mana LANG adalah kode tiga huruf untuk bahasa yang Anda butuhkan. Anda dapat mengetahui nilai LANG di sini.

Anda dapat mendownload .traindata file untuk bahasa yang Anda butuhkan di sini dan letakkan di $TESSDATA_PREFIX direktori (ini harus sama dengan tempat file tessdata direktori diinstal) dan itu harus siap digunakan.

Note - Hanya bahasa yang memiliki a .traineddata format file didukung oleh tesseract.

Untuk menentukan bahasa yang Anda perlukan untuk keluaran OCR Anda, gunakan -l LANG argumen dalam konfigurasi di mana LANG adalah kode 3 huruf untuk bahasa apa yang ingin Anda gunakan.

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

Ambil gambar ini misalnya -
Cara OCR dengan Tesseract, OpenCV dan Python
Anda dapat bekerja dengan banyak bahasa dengan mengubah parameter LANG seperti -

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

dan Anda akan mendapatkan hasil berikut -

Hereโ€™s some Greek: ฮŸฮดฮนฮฟ ฮดฮนฯƒฯ„ฮฑ ฮนฮผฯ€ฮตฮดฮนฯ„ ฯ†ฮนฮผ ฮตฮน, ฮฑฮด ฯ†ฮตฮป ฮฑฮฒฯ‡ฮฟฯฯฮตฮฑฮฝฮธ ฮตฮปฯ‰ฮบฯ…ฮตฮฝฮธฮนฮฑฮผ, ฮตฮพ ฮตฯƒฮต ฮตฮพฮตฯฯƒฮน ฮณฯ…-
ฮฒฮตฯฮณฯฮตฮฝ ฮทฮฑฯ‚. ฮ‘ฯ„ ฮผฮตฮน ฯƒฮฟฮปฮตฯ„ ฯƒฯฮนฯ€ฯ„ฮฟฯฮตฮผ. แผดฯ…ฯ‚ ฮฑฮปฮนฮฑ ฮปฮฑฮฒฯ‰ฯฮต ฮธฮต. ฮฃฮนฮธ ฮบฯ…ฯ‰ฯ„ ฮฝฯ…ฯƒฮบฯ…ฮฑฮผ
ฯ„ฯฮฑฯƒฯ…ฮฝฮดฮนฮฑ ฮฑฮฝ, แฝ ฮผฮฝฮนฯ…ฮผ ฮตฮปฮนฮณฮตฮฝฮดฮน ฯ„ฮนฮฝ ฯ€ฯฮน. ฮ ฮฑฯฯ„ฮตฮผ ฯ†ฮตฯฮธฮตฯฮตฮผ ฯƒฯ…ฯƒฮนฯ€ฮนฮฑฮฝฯ„แฝบฯ…ฯ ฮตฮพ ฮนฯ…ฯ‚,ฮฝฮฑฮผ
%0790 เน เธฃ เน€เธ‡ เน‘ เน• 80 เน• 6 เน‘ เธญ 06 เธช 0 เน€เธ‡ เธ™ เธญ เน“ , ฯ€ฯฯ‰ ฯ€ฯฯ‰ฯ€ฯฮนฮฑฮต ฯƒฮฑฮตฯ†ฮฟฮปฮฑ ฮนฮด. ฮ‘ฯ„ ฯ€ฯฮน ฮดฮฟฮปฮฟฯ ฮฝฯ…-
ฯƒฮบฯ…ฮฑฮผ. 6 Thai Hereโ€™s some Thai: ฮฝแพฟ เธ„ เธญ เธฃ เธฑ เธ› เธ‹เธฑ เธ™ เธˆ เธธ เน‰ เธข เน‚เธ› เธฃ เธ” เธด เธง เน€เธ‹ เธญ เธฃ เนŒ เธช เธ–เธฒ เธ› เธฑ เธ• เธข เนŒ เธˆ เนŠ เธฒ เธš เนเธˆ เน‡ เธ เธž เน‡ เธญ เธ• เธก เน‰ เธฒ เธซ เธด เธ™ เธญ เนˆ เธญ เธ™ เธ‹เธฒ เธ เธธ เธฃ เธฐ เธ„ เธฑ เธ™ เธ– เธ˜ เธธ เธฃ เธฐ เธŸเธด เธ” เธช เธ• เธฒ เธฃ เนŒ เธ— เธ‡ เธต เน‰ เธš เธญ เธข
เธ„ เธญ เธ• เธญ เธท เนˆ เธก เนเธ› เธฃ เธฑ เธช เธฑ เธ‡ เน‚เธ† เธ„ เน เธฒ เธช เธฒ เธ› เนเธŸ เธ™ เธ‹เธต เธจเธด เธฅ เธ› เธง เธฑ เธ’ เธ™ เธ˜เธฃ เธฃ เธก เน„เธŸ เธฅ เธ— เนŒ เธˆ เธด เนŠ เธ เน‚เธ เน‹ เธ เธฑ เธš เธ” เธฑ เธ เน€เธˆ เธฅ เธž เธฅ เน‡ เธญ เธ• เธก เธฒ เธก เนˆ เธฒ เธ‹เธฒ เธ เธธ เธฃ เธฐ เธ” เธต เธฅ เน€เธฅ เธญ
เธฃ เนŒ เธ‹เธต เธ™ เธ” เธฑ เธก เธž เนŒ เนเธฎ เธ› เธ› เธต เน‰ เน€เธญ เนŠ เน‰ เธฒ เธฐ เธญ เธธ เธฃ เธฑ เธ‡ เธ„ เธ˜เธฒ เธ• เธธ เธ‹เธด เธก เธŸเธด เธ™ เธด เธ เธ‹เนŒ เน€เธ— เธฃ เธฅ เน€เธฅ เนˆ เธญ เธฃ เนŒ เธญ เธง เธญ เธฃ เนŒ เธ” เนเธ„ เธ™ เธข เธญ เธ™ เธช เธก เธฒ เธž เธฑ เธ™ เธ˜เนŒ เธ„ เธฃ เธฑ เธง เธ‹เธญ เธ‡ เธฎเธฑ เธก เธญ เธฒ
เธ‚เนˆ เธฒ เน€เธญ เน‡ เธ เธ‹เนŒ เน€เธž เธฃ เธช

Note - Bahasa yang ditentukan pertama kali ke -l parameter adalah bahasa utama.

Sayangnya tesseract tidak memiliki fitur untuk mendeteksi bahasa teks pada gambar secara otomatis. Solusi alternatif disediakan oleh modul python lain yang disebut langdetect yang dapat dipasang melalui pip.

$ pip install langdetect

Modul ini sekali lagi, tidak mendeteksi bahasa teks menggunakan gambar tetapi membutuhkan input string untuk mendeteksi bahasanya. Cara terbaik untuk melakukannya adalah dengan menggunakan tesseract terlebih dahulu untuk mendapatkan teks OCR dalam bahasa apa pun yang mungkin Anda rasakan di sana, menggunakan langdetect untuk menemukan bahasa apa yang disertakan dalam teks OCR dan kemudian menjalankan OCR lagi dengan bahasa yang ditemukan.

Katakanlah kita memiliki teks yang kita pikir dalam bahasa Inggris dan Portugis.

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)

Ini harus menampilkan daftar bahasa dalam teks dan probabilitasnya.

[en:0.714282468983554, es:0.2857145605644145]

Kode bahasa yang digunakan oleh langdetect ikuti kode ISO 639-1. Untuk membandingkan, silakan periksa ini dan ini. Kami menemukan bahwa bahasa yang digunakan dalam teks tersebut adalah bahasa Inggris dan Spanyol.

Kami mendapatkan teks lagi dengan mengubah config menjadi

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

Note โ€“ Tesseract berkinerja buruk ketika, dalam gambar dengan banyak bahasa, bahasa yang ditentukan dalam konfigurasi salah atau tidak disebutkan sama sekali. Ini juga bisa sedikit menyesatkan modul langdetect.


Menggunakan tessdata_fast

Jika kecepatan adalah perhatian utama Anda, Anda dapat mengganti model bahasa tessdata Anda dengan model tessdata_fast yang merupakan versi integer 8-bit dari model tessdata.

Menurut tessdata_fast github -

Repositori ini berisi versi integer cepat dari model terlatih untuk Mesin OCR Sumber Terbuka Tesseract.

Model ini hanya bekerja dengan mesin LSTM OCR dari Tesseract 4.

  • Ini adalah kompromi kecepatan/akurasi tentang apa yang menawarkan "nilai uang" terbaik dalam kecepatan vs akurasi.
  • Untuk beberapa bahasa, ini masih yang terbaik, tetapi untuk sebagian besar tidak.
  • Konfigurasi jaringan "nilai terbaik untuk uang" kemudian digabungkan untuk kecepatan lebih lanjut.
  • Sebagian besar pengguna ingin menggunakan file data terlatih ini untuk melakukan OCR dan ini akan dikirimkan sebagai bagian dari distribusi Linux misalnya. Ubuntu 18.04.
  • Penyetelan halus / pelatihan tambahan akan JANGAN mungkin dari ini fast model, karena merupakan bilangan bulat 8-bit.
  • Saat menggunakan model dalam repositori ini, hanya mesin OCR berbasis LSTM baru yang didukung. Warisan tesseract engine tidak didukung dengan file-file ini, jadi mode oem Tesseract '0' dan '2' tidak akan bekerja dengannya.

Untuk menggunakan tessdata_fast model, bukan tessdata, yang perlu Anda lakukan hanyalah mengunduh file tessdata_fast file data bahasa dari di sini dan letakkan di dalam $TESSDATA_PREFIX direktori.


Perlu mendigitalkan dokumen, kwitansi atau faktur tetapi terlalu malas untuk kode? Kepala ke Nanonet dan bangun model OCR gratis!


Melatih Tesseract pada data khusus

Tesseract 4.00 menyertakan mesin pengenalan berbasis jaringan saraf baru yang memberikan akurasi lebih tinggi pada gambar dokumen. Jaringan saraf membutuhkan data pelatihan yang jauh lebih banyak dan melatih jauh lebih lambat daripada basis Tesseract. Untuk bahasa berbasis Latin, data model yang ada telah dilatih pada sekitar 400000 baris teks yang mencakup sekitar 4500 font.

Agar berhasil menjalankan tutorial pelatihan Tesseract 4.0 LSTM, Anda harus memiliki instalasi yang berfungsi dari Tesseract 4 dan Tesseract 4 Training Tools dan juga memiliki skrip pelatihan dan file data terlatih yang diperlukan di direktori tertentu. Mengunjungi repo github untuk file dan alat.

Tesseract 4.00 membutuhkan beberapa hari hingga beberapa minggu untuk pelatihan dari awal. Meskipun dengan semua data pelatihan baru ini, berikut beberapa opsi untuk pelatihan:

  • Melodi indah - Dimulai dengan bahasa terlatih yang ada, latih data tambahan spesifik Anda. Misalnya pelatihan tentang set data tulisan tangan dan beberapa font tambahan.
  • Potong lapisan atas โ€“ dari jaringan dan latih kembali lapisan atas baru menggunakan data baru. Jika penyetelan halus tidak berhasil, kemungkinan besar ini adalah opsi terbaik berikutnya. Analogi mengapa ini berguna, ambil contoh model yang dilatih pada dataset ImageNet. Tujuannya adalah untuk membangun pengklasifikasi kucing atau anjing, lapisan bawah dalam model bagus dalam abstraksi tingkat rendah sebagai sudut, garis horizontal dan vertikal, tetapi lapisan yang lebih tinggi dalam model menggabungkan fitur-fitur itu dan mendeteksi telinga, mata, hidung kucing atau anjing dan seterusnya. Dengan melatih ulang hanya lapisan atas, Anda menggunakan pengetahuan dari lapisan bawah dan menggabungkannya dengan kumpulan data baru yang berbeda.
  • Latih kembali dari awal - Ini adalah pendekatan yang sangat lambat kecuali Anda memiliki set pelatihan yang sangat representatif dan cukup besar untuk masalah Anda. Sumber daya terbaik untuk pelatihan dari awal mengikuti ini repo github.

Panduan tentang cara melatih data kustom Anda dan membuat .traineddata file dapat ditemukan di sini, di sini dan di sini.

Kami tidak akan membahas kode untuk pelatihan menggunakan Tesseract di postingan blog ini.

Cara OCR dengan Tesseract, OpenCV dan Python

Batasan Tesseract

Tesseract berfungsi paling baik jika ada segmentasi yang bersih pada teks latar depan dari latar belakang. Dalam praktiknya, bisa jadi sangat menantang untuk menjamin jenis penyiapan ini. Ada berbagai alasan mengapa Anda tidak mendapatkan hasil berkualitas baik dari Tesseract seperti jika gambar memiliki noise di latar belakang. Semakin baik kualitas gambar (ukuran, kontras, kilat), semakin baik pula hasil pengenalannya. Diperlukan sedikit pemrosesan awal untuk meningkatkan hasil OCR, gambar perlu diskalakan dengan tepat, memiliki kontras gambar sebanyak mungkin, dan teks harus sejajar horizontal. Tesseract OCR cukup kuat tetapi memiliki batasan berikut.

Batasan Tesseract dirangkum dalam daftar.

  • OCR tidak seakurat beberapa solusi komersial yang tersedia bagi kami.
  • Tidak cocok dengan gambar yang terpengaruh oleh artefak termasuk oklusi parsial, perspektif terdistorsi, dan latar belakang yang kompleks.
  • Itu tidak mampu mengenali tulisan tangan.
  • Ini mungkin menemukan omong kosong dan melaporkan ini sebagai keluaran OCR.
  • Jika sebuah dokumen berisi bahasa di luar yang diberikan dalam argumen -l LANG, hasilnya mungkin buruk.
  • Tidak selalu bagus dalam menganalisis urutan pembacaan alami dokumen. Misalnya, mungkin gagal mengenali bahwa sebuah dokumen berisi dua kolom, dan mungkin mencoba untuk menggabungkan teks di seluruh kolom.
  • Pindaian berkualitas buruk dapat menghasilkan OCR berkualitas buruk.
  • Itu tidak membeberkan informasi tentang jenis font keluarga teks.


Tentu saja ada cara yang lebih baik, lebih sederhana, dan lebih intuitif untuk melakukan tugas OCR.


OCR dengan Nanonets

Cara OCR dengan Tesseract, OpenCV dan Python

Grafik Nanonet OCR API memungkinkan Anda membangun model OCR dengan mudah. Anda tidak perlu khawatir tentang pra-pemrosesan gambar Anda atau khawatir tentang template yang cocok atau membangun mesin berbasis aturan untuk meningkatkan akurasi model OCR Anda.

Anda dapat mengunggah data Anda, membuat anotasi, mengatur model untuk dilatih dan menunggu untuk mendapatkan prediksi melalui UI berbasis browser tanpa menulis satu baris kode, mengkhawatirkan GPU atau menemukan arsitektur yang tepat untuk model pembelajaran mendalam Anda. Anda juga dapat memperoleh respons JSON dari setiap prediksi untuk mengintegrasikannya dengan sistem Anda sendiri dan membangun aplikasi yang didukung mesin pembelajaran yang dibangun di atas algoritma canggih dan infrastruktur yang kuat.

Menggunakan GUI: https://app.nanonets.com/

Anda juga dapat menggunakan API Nanonets-OCR dengan mengikuti langkah-langkah di bawah ini: โ€Œ

Langkah 1: Mengkloning Repo, Instal dependensi

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

Langkah 2: Dapatkan Kunci API gratis Anda
Dapatkan Kunci API gratis Anda dari http://app.nanonets.com/#/keys

Cara OCR dengan Tesseract, OpenCV dan Python

Langkah 3: Tetapkan kunci API sebagai Variabel Lingkungan

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

Langkah 4: Buat Model Baru

python ./code/create-model.py

Catatan: Ini menghasilkan MODEL_ID yang Anda butuhkan untuk langkah selanjutnya

Langkah 5: Tambahkan Id Model sebagai Variabel Lingkungan

export NANONETS_MODEL_ID=YOUR_MODEL_ID

Catatan: Anda akan mendapatkan YOUR_MODEL_ID dari langkah sebelumnya

Langkah 6: Unggah Data Pelatihan
Data pelatihan ditemukan di images (file gambar) dan annotations (anotasi untuk file gambar)

python ./code/upload-training.py

Langkah 7: Model Kereta
Setelah Gambar diunggah, mulailah melatih Model

python ./code/train-model.py

Langkah 8: Dapatkan Status Model
Model ini membutuhkan ~ 2 jam untuk berlatih. Anda akan mendapatkan email setelah model dilatih. Sementara itu Anda memeriksa keadaan model

python ./code/model-state.py

Langkah 9: Buat Prediksi
Setelah model dilatih. Anda dapat membuat prediksi menggunakan model

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


Nanonet dan Manusia di Lingkaran

Layar 'Sedang' membantu proses koreksi dan entri serta mengurangi beban kerja peninjau manual hingga hampir 90% dan mengurangi biaya organisasi hingga 50%.

Cara OCR dengan Tesseract, OpenCV dan Python

Fitur termasuk

  1. Lacak prediksi yang benar
  2. Lacak yang mana yang salah
  3. Lakukan koreksi pada yang tidak akurat
  4. Hapus yang salah
  5. Isi prediksi yang hilang
  6. Saring gambar dengan rentang tanggal
  7. Dapatkan jumlah gambar yang dimoderasi terhadap yang tidak dimoderasi

Semua bidang disusun menjadi GUI yang mudah digunakan yang memungkinkan pengguna untuk mengambil keuntungan dari teknologi OCR dan membantu membuatnya menjadi lebih baik, tanpa harus mengetikkan kode apa pun atau memahami cara kerja teknologi.


Memiliki masalah OCR dalam pikiran? Ingin mengurangi biaya entri data organisasi Anda? Pergi ke Nanonet dan membangun model OCR untuk ekstrak teks dari gambar or mengekstrak data dari PDF!


Kesimpulan

Sama seperti pembelajaran mendalam telah memengaruhi hampir setiap aspek visi komputer, hal yang sama berlaku untuk pengenalan karakter dan pengenalan tulisan tangan. Model berbasis pembelajaran mendalam telah berhasil mendapatkan akurasi pengenalan teks yang belum pernah terjadi sebelumnya, jauh melampaui tradisional ekstraksi informasi dan pemrosesan gambar pembelajaran mesin pendekatan.

Tesseract bekerja dengan baik saat gambar dokumen mengikuti pedoman berikut:

  • Membersihkan segmentasi teks latar depan dari latar belakang
  • Disejajarkan secara horizontal dan diskalakan dengan tepat
  • Gambar berkualitas tinggi tanpa keburaman dan noise

Rilis terbaru Tesseract 4.0 mendukung OCR berbasis pembelajaran dalam yang jauh lebih akurat. Mesin OCR sendiri dibangun di atas jaringan Long Short-Term Memory (LSTM), semacam Jaringan Neural Berulang (RNN).

Tesseract sangat cocok untuk memindai dokumen bersih dan hadir dengan akurasi dan variabilitas font yang cukup tinggi karena pelatihannya komprehensif. Saya akan mengatakan bahwa Tesseract adalah alat bantu jika tugas Anda memindai buku, dokumen, dan teks tercetak pada latar belakang putih bersih.


Selanjutnya Membaca

Update:
Banyak orang bertanya kepada kami bagaimana mereka bisa mendapatkan tanggal dalam bentuk teks atau menggunakan ketika mendeteksi tanggal atau data spesifik lainnya sehingga mereka dapat menambahkan ke daftar.
Inilah jawabannya:
Dalam kode untuk menggambar kotak pembatas di sekitar kotak tanggal, Anda akan melihat garis yang cocok dengan pola regex dengan d['text']. Itu hanya menarik sebuah kotak jika polanya cocok. Anda cukup mengekstrak nilainya dari d['text'] setelah pola cocok dan menambahkannya ke daftar.

Update 2:
Untuk menjawab pertanyaan seputar OCR non-Inggris, kami telah memperbarui daftar bacaan lebih lanjut.

Stempel Waktu:

Lebih dari AI & Pembelajaran Mesin