Explore Tesseract Optical Character Recognition (OCR)
Cahyati Supriyati Sangaji (My Note)
Artikel ini adalah pengalaman dari explore tentang OCR, proses yang dilakukan disini menggunakan OpenSource. Untuk mengetahui gambaran proses OCR menggunakan IBM Product dapat dilihat pada artikel Custom Inference Script — OCR Model on IBM Application Suite-Visual Inspection.
Komponen yang digunakan:
- Windows OS
- Tesseract OCR windows
- Anaconda+Jupyter Notebook
- Program Python
- Sample Image
Bahasa yang digunakan adalah bahasa pemprograman python, maka langkah awal yang dilakukan adalah import library python. Untuk proses OCR digunakan library pytesseract.
from PIL import Image
import pytesseract
import numpy as np
import cv2
import os
import matplotlib.pyplot as plt
Kemudian deklarasikan path dari aplikasi tesseract yang sudah di install sebelumnya dan deklarasi dari path image yang akan diproses.
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files/Tesseract-OCR/tesseract.exe'
filename1 = 'C:/Users/Cahya/Downloads/Test/T1.png'
img1 = Image.open(filename1)
img1
Lakukan image processing dari image awal yang bertujuan untuk menghilangkan noise.
image = cv2.imread(filename1)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
imgplot = plt.imshow(rgb)
plt.show()
Berikut hasil text dari image processing sebelumnya.
text = pytesseract.image_to_string(rgb)text
Output:
'Tesseract sample'
Dilakukan test kembali dengan sample kedua, yang berasal dari gambar awal yang memang memiliki noise. Seperti sebelumnya dilakukan deklarasi path aplikasi tesseract dan path image dari sample kedua.
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files/Tesseract-OCR/tesseract.exe'
filename2 = 'C:/Users/Cahya/Downloads/Test/test2.png'
img2 = Image.open(filename2)
img2
Lakukan juga image processing pada sample kedua.
image = cv2.imread(filename2)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.medianBlur(gray, 3)
imgplot = plt.imshow(gray)
plt.show()
Kemudian deklarasi file image baru agar bisa di proses menjadi text.
filename = "{}.png".format(os.getpid())
cv2.imwrite(filename, gray)
Output:
True
Berikut tampilan dari image processing sebelumnya.
image = cv2.imread(filename)
imgplot = plt.imshow(image)
plt.show()
Dan hasil dari proses OCR dari sample kedua adalah sebagai berikut:
text = pytesseract.image_to_string(image)
text
Output:
'Tesseract sample'
Contoh dengan kartu nama
Terakhir dilakukan test dengan tulisan yang berasal dari hardcopy atau yang dalam bentuk fisik. Sample ke tiga yang digunakan adalah foto dari kartu nama. Langkah awal sama seperti sebelumnya adalah melakukan deklarasi dari path aplikasi tesseract dan path foto yang akan di proses.
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files/Tesseract-OCR/tesseract.exe'
filename3 = 'C:/Users/Cahya/Downloads/Test/KartuNama.jpg'
img = Image.open(filename3)
img
Lakukan juga image processing dari sample foto ke tiga dengan proses seperti pada sample kedua yang terdapat noise dari text dari gambar sample kedua.
image = cv2.imread(filename3)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
imgplot = plt.imshow(gray)
plt.show()
filename = "{}.png".format(os.getpid())
cv2.imwrite(filename, gray)
Output:
True
Tampilan hasil image processing sebelumnya.
image = cv2.imread(filename)
imgplot = plt.imshow(image)
plt.show()
Berikut hasil text dari foto kartu nama yang sudah di proses.
text = pytesseract.image_to_string(image)
text
Output:
'w) Sinergi Wahana Gemilang\n[GB Value Added Distributor\n\n \n\nCahyati Supriyati Sangaji\nSolution Specialist\nIBM Software - Internet of Things & Artificial Intelligence\n\n+62-821-41561927\ncahyati.sangaji@swgemilang.com'
Kemudian terakhir rapikan hasil output text berdasarkan hasil proses OCR sebelumnya.
## Normalize
for word in text.split("\n"):
if "w)" in word:
word = word.replace("w)", "@")
if "[GB" in word:
word = word.replace("[GB", "@")
print(word)
Output:
@ Sinergi Wahana Gemilang
@ Value Added Distributor
Cahyati Supriyati Sangaji
Solution Specialist
IBM Software - Internet of Things & Artificial Intelligence
+62-821-41561927
cahyati.sangaji@swgemilang.com
Referensi :
Adrian Rosebrock, Correcting Text Orientation with Tesseract and Python.
Firhan Maulana Rusli , KTP-OCR in Python using Pytesseract.