Explore Tesseract Optical Character Recognition (OCR)

cahyati sangaji (cahya)
4 min readMar 1, 2022

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.

Bagan Proses

Komponen yang digunakan:

  1. Windows OS
  2. Tesseract OCR windows
  3. Anaconda+Jupyter Notebook
  4. Program Python
  5. 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
Sample 1

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
Sample 2

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
sample 3

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.

--

--