Assalamu‘alaikum wr. wb.
Hello guys! Tesseract OCR merupakan Library Package yang dibuat oleh Hewlett-Packard (HP) dan dikembangkan oleh Google mulai Tahun 2006 dan berlisensi Apache 2.0 untuk mengembangkan Model Optical Character Recognition (OCR). Kali ini kita akan membahas mengenai Cara menggunakan Tesseract OCR dengan Python.
Apakah Anda pernah perlu mengekstrak teks dari gambar atau dokumen yang dipindai? Baik untuk mendigitalkan arsip lama, mengotomatiskan entri data, atau sekadar membuat dokumen lebih mudah dicari, pemrosesan dokumen berbasis AI dan perangkat lunak OCR adalah mesin utama yang memungkinkan semua itu terjadi.
Saya telah bekerja dengan teknologi OCR selama bertahun-tahun dan bisa mengatakan bahwa meskipun perkembangannya sudah sangat pesat, masih banyak hal yang bisa dieksplorasi.
Salah satu alat OCR yang paling banyak digunakan adalah Tesseract Engine, sebuah proyek open-source yang telah mengalami peningkatan besar berkat kemajuan teknologi deep learning.
OCR bisa menjadi hal yang kompleks, terutama saat berhadapan dengan berbagai jenis font, format halaman yang beragam, atau teks yang terdistorsi di lingkungan alami. Namun, dengan teknik yang tepat—seperti menggabungkan Tesseract dengan Python dan OpenCV—Anda dapat memanfaatkan kekuatan deep learning untuk mencapai tingkat akurasi yang tinggi.
IKTISAR
Sumber Artikel : Wikipedia.org dan Klippa.com
A. Pengertian Tesseract OCR
Tesseract adalah mesin pengenalan karakter optik (OCR) yang dapat digunakan pada berbagai sistem operasi. Perangkat lunak ini bersifat gratis dan dirilis di bawah lisensi Apache. Awalnya, Tesseract dikembangkan oleh Hewlett-Packard sebagai perangkat lunak berpemilik pada tahun 1980-an, namun kemudian dirilis sebagai open source pada tahun 2005. Sejak tahun 2006, pengembangannya didukung oleh Google.
Pada tahun 2006, Tesseract dikenal sebagai salah satu mesin OCR open source paling akurat yang tersedia saat itu.
Tesseract adalah mesin pengenalan teks (OCR) open-source yang tersedia di bawah lisensi Apache 2.0. Tesseract dapat digunakan secara langsung, atau bagi para programmer, dapat diakses melalui API untuk mengekstraksi teks cetak dari gambar. Mesin ini mendukung berbagai macam bahasa.
Meskipun Tesseract tidak memiliki antarmuka grafis (GUI) bawaan, ada sejumlah GUI pihak ketiga yang tersedia dan dapat ditemukan melalui halaman 3rdParty.
Tesseract juga kompatibel dengan banyak bahasa pemrograman dan framework melalui wrapper yang tersedia di Github. Tesseract dapat digunakan bersama sistem analisis tata letak yang ada untuk mengenali teks dalam dokumen berukuran besar, atau digunakan bersama detektor teks eksternal untuk mengenali teks dari gambar dengan satu baris teks.
B. Sejarah Tesseract OCR
Mesin Tesseract awalnya dikembangkan sebagai perangkat lunak berpemilik di laboratorium Hewlett-Packard yang berlokasi di Bristol, Inggris dan Greeley, Colorado antara tahun 1985 hingga 1994. Pada tahun 1996, dilakukan beberapa perubahan untuk menjadikannya kompatibel dengan Windows, serta migrasi sebagian dari bahasa C ke C++ pada tahun 1998. Mayoritas kode awalnya ditulis dalam bahasa C, dan sebagian lagi menggunakan C++. Seiring waktu, seluruh kode akhirnya dikompilasi menggunakan C++.
Selama satu dekade berikutnya, hanya sedikit pengembangan yang dilakukan. Pada tahun 2005, Hewlett-Packard bersama University of Nevada, Las Vegas (UNLV) merilis Tesseract sebagai proyek open-source. Pengembangan lebih lanjut kemudian disponsori oleh Google pada tahun 2006.
Versi 4 dari Tesseract memperkenalkan mesin OCR berbasis LSTM (Long Short-Term Memory) dan model untuk banyak bahasa serta sistem tulisan tambahan, sehingga total bahasa yang didukung menjadi 116 dan mencakup 37 jenis aksara.
Versi 5 dirilis pada tahun 2021 setelah lebih dari dua tahun pengujian dan pengembangan.
C. Fitur-fitur Tesseract OCR
Tesseract merupakan salah satu dari tiga mesin OCR dengan akurasi karakter terbaik pada Tahun 1995. Saat ini, Tesseract tersedia untuk sistem operasi Linux, Windows, dan Mac OS.
Hingga versi 2, Tesseract hanya dapat menerima input berupa gambar TIFF yang berisi teks sederhana dalam satu kolom. Versi awal ini tidak mendukung analisis tata letak, sehingga jika digunakan untuk teks dalam banyak kolom, gambar, atau rumus matematika, hasilnya akan berantakan. Namun, sejak versi 3, Tesseract mulai mendukung format keluaran teks dengan informasi posisi melalui hOCR, serta dilengkapi dengan analisis tata letak halaman. Dukungan terhadap berbagai format gambar juga ditambahkan melalui integrasi dengan pustaka Leptonica. Selain itu, Tesseract dapat mendeteksi apakah teks menggunakan font monospaced atau proporsional.
Awalnya, Tesseract hanya dapat mengenali teks dalam bahasa Inggris. Pada versi 2, ditambahkan enam bahasa Barat lainnya, yaitu Prancis, Italia, Jerman, Spanyol, Portugis Brasil, dan Belanda. Versi 3 kemudian memperluas dukungan bahasa secara signifikan, termasuk bahasa ideografik seperti Tionghoa dan Jepang, serta bahasa kanan-ke-kiri seperti Arab dan Ibrani. Bahasa tambahan lainnya termasuk Arab, Bulgaria, Katalan, Tionghoa (Sederhana dan Tradisional), Kroasia, Ceko, Denmark, Jerman (naskah Fraktur), Yunani, Finlandia, Ibrani, Hindi, Hungaria, Indonesia, Jepang, Korea, Latvia, Lituania, Norwegia, Polandia, Portugis, Rumania, Rusia, Serbia, Slovakia (standar dan Fraktur), Slovenia, Swedia, Tagalog, Tamil, Thai, Turki, Ukraina, dan Vietnam.
Versi 3.04 yang dirilis pada Juli 2015 menambahkan 39 kombinasi bahasa dan skrip baru, sehingga total dukungan bahasa menjadi lebih dari 100. Beberapa kode bahasa baru tersebut antara lain: amh (Amharik), asm (Assam), aze_cyrl (Azerbaijan dalam skrip Sirilik), bod (Tibet), bos (Bosnia), ceb (Cebuano), cym (Welsh), dzo (Dzongkha), fas (Persia), gle (Irlandia), guj (Gujarati), hat (Haiti dan Kreol Haiti), iku (Inuktitut), jav (Jawa), kat (Georgia), kat_old (Georgia Kuno), kaz (Kazakh), khm (Khmer Tengah), kir (Kirgiz), kur (Kurdi), lao (Lao), lat (Latin), mar (Marathi), mya (Burma), nep (Nepali), ori (Oriya), pan (Punjabi), pus (Pashto), san (Sanskerta), sin (Sinhala), srp_latn (Serbia dalam skrip Latin), syr (Suryani), tgk (Tajik), tir (Tigrinya), uig (Uighur), urd (Urdu), uzb (Uzbek), uzb_cyrl (Uzbek dalam skrip Sirilik), yid (Yiddish). Tesseract juga dapat dilatih untuk mendukung bahasa lainnya.
Tesseract mampu memproses teks kanan-ke-kiri seperti Arab atau Ibrani, berbagai skrip India, serta karakter CJK (Cina, Jepang, Korea) dengan cukup baik. Tingkat akurasinya telah disajikan dalam presentasi tutorial Tesseract pada konferensi DAS 2016 di Santorini oleh Ray Smith.
Tesseract sangat cocok digunakan sebagai backend dan dapat digunakan untuk tugas OCR yang lebih kompleks, termasuk analisis tata letak halaman, dengan bantuan frontend seperti OCRopus.
Namun, hasil keluaran Tesseract bisa sangat buruk jika gambar input tidak melalui proses praproses terlebih dahulu. Misalnya, gambar (terutama tangkapan layar) harus diperbesar agar tinggi huruf minimal 20 piksel. Rotasi atau kemiringan gambar harus diperbaiki terlebih dahulu, jika tidak maka teks tidak akan dikenali. Perubahan pencahayaan dengan frekuensi rendah perlu difilter menggunakan high-pass filter agar proses binarisasi tidak merusak halaman, dan batas gelap pada gambar harus dihapus secara manual agar tidak disalahartikan sebagai karakter.
D. Cara Kerja Tesseract OCR
![]() |
OCR Process Flow (Sumber : Medium.com (@balaajip)) |
Tesseract 4.00 mencakup subsistem jaringan saraf baru yang dikonfigurasi sebagai pengenal baris teks. Sistem ini berasal dari implementasi LSTM berbasis Python milik OCRopus, namun telah dirancang ulang untuk Tesseract dalam bahasa C++. Meskipun sistem jaringan saraf dalam Tesseract sudah ada sebelum TensorFlow, sistem ini tetap kompatibel karena menggunakan bahasa deskripsi jaringan yang disebut Variable Graph Specification Language (VGSL), yang juga tersedia untuk TensorFlow.
Untuk mengenali gambar yang hanya berisi satu karakter, biasanya digunakan Convolutional Neural Network (CNN). Sementara itu, teks dengan panjang tak terbatas merupakan rangkaian karakter, dan permasalahan seperti ini biasanya diselesaikan menggunakan Recurrent Neural Networks (RNN), di mana LSTM (Long Short-Term Memory) merupakan salah satu bentuk RNN yang paling umum digunakan. Baca artikel ini untuk mempelajari lebih lanjut tentang LSTM.
LSTM sangat efektif dalam mempelajari data berbentuk urutan (sequences), namun performanya bisa melambat secara signifikan ketika jumlah status atau kelas yang harus dipelajari terlalu banyak. Berdasarkan hasil empiris, lebih baik meminta LSTM untuk mempelajari urutan yang panjang daripada mempelajari urutan pendek dengan banyak kelas.
Tesseract sendiri dikembangkan dari model OCRopus berbasis Python, yang merupakan turunan dari LSTM dalam C++ bernama CLSTM. CLSTM adalah implementasi dari model jaringan saraf berulang LSTM dalam bahasa pemrograman C++, yang menggunakan Eigen library untuk melakukan komputasi numerik.
![]() |
Proses dari Tesseract 3.0 (Sumber : Jurnal/Paper "VOTING-BASED OCR SYSTEM") |
Legacy Tesseract 3.x bergantung pada proses multi-tahap di mana kita dapat membedakan langkah-langkahnya :
- Penemuan Kata
- Penemuan Baris
- Klasifikasi Karakter
Pencarian kata dilakukan dengan cara mengorganisir baris-baris teks menjadi kumpulan (blob), kemudian baris dan area tersebut dianalisis apakah menggunakan spasi tetap (fixed pitch) atau spasi proporsional. Baris teks kemudian dipisahkan menjadi kata-kata dengan cara yang berbeda, tergantung pada jenis jarak antar karakter. Proses pengenalan dilakukan dalam dua tahap. Pada tahap pertama, sistem mencoba mengenali setiap kata satu per satu. Kata-kata yang berhasil dikenali dengan baik akan digunakan sebagai data pelatihan oleh adaptive classifier (pengklasifikasi adaptif). Pengklasifikasi ini kemudian digunakan untuk mengenali teks di bagian bawah halaman dengan akurasi yang lebih baik.
Modernisasi alat Tesseract merupakan upaya untuk membersihkan kode dan menambahkan model LSTM yang baru. Gambar yang diinput akan diproses dalam bentuk kotak (persegi panjang) baris demi baris, kemudian dikirimkan ke model LSTM dan menghasilkan keluaran (output). Dalam ilustrasi berikut, kita bisa melihat bagaimana proses ini bekerja.
![]() |
Cara Kerja Tesseract OCR menggunakan LSTM |
Setelah menambahkan alat pelatihan baru dan melatih model dengan sejumlah besar data dan berbagai jenis font, Tesseract berhasil mencapai kinerja yang lebih baik. Namun, hasilnya masih belum cukup baik untuk mengenali tulisan tangan atau font yang tidak biasa. Meski begitu, masih memungkinkan untuk melakukan fine-tuning atau melatih ulang lapisan-lapisan atas dari model untuk keperluan eksperimen.
TUTORIAL
Sumber Tutorial : Nanonets.com (Blog), Builtin.com, Pyimagesearch.com, dan Blog.Unmaha.ac.id
Berikut ini adalah Tutorial Cara Instalasi dan Membuat Aplikasi Sederhana menggunakan Tesseract OCR.
A. Download dan Instalasi
Pastkan Anda telah menginstal Python di Komputer kalian. Untuk Tutorial-nya, silakan lihat di sini.
1. Download Tesseract OCR (di Windows)
Pertama, bukalah Website Resmi-nya di sini (tesseract-ocr.github.io), dan klik "User Manual" untuk menuju Dokumentasi dari Tesseract OCR.
Kemudian, Scroll ke bawah sampai menemukan "Downloads", dan klik pada "Downloads" di bagian Releases and Changelog.
Jika sudah, Scroll terus sampai menemukan "UB Mannheim" pada 3rd party Windows exe’s/installer.
Maka akan langsung pergi ke GitHub, dan klik pada "Latest Installers".Tunggulah sampai proses Download selesai.
2. Setup Instalasi Tesseract OCR
Jika sudah, maka bukalah File yang telah di-Download tadi. Kemudian, pilihlah Bahasa untuk melakukan Instalasi, pililah "English" karena cukup dalam Bahasa Inggris saja agar mudah dipahami, dan klik "Ok".
Maka, akan membuka Setup Installer Tesseract OCR, dan klik "Next".
Pada Perjanjian Persetujuan (License Agreement), klik saja "I Agree".
Kemudian, klik "Install just for me" dan klik "Next".
Kemudian, Lewati saja pada bagian Choose Components dengan mengelik "Next".Lalu, klik saja "Next" jika Lokasi Install Folder kalian sudah betul.
Untuk Start Menu Folder, lewati saja dengan mengeklik "Install".
Tunggulah sampai proses Instalasi Tesseract OCR selesai.
Terakhir, klik "Finish" untuk mengakhiri Setup Instalasi Tesseract OCR.
3. Konfigurasi Tesseract OCR (di Windows)
Apabila sudah selesai melakukan Langkah-langkah di atas, bukalah Letak Folder dari Tesseract OCR yang telah kamu simpan tadi saat melakukan Setup. Misalnya :
C:\Users\Inzaghi\AppData\Local\Programs\Tesseract-OCR
Selanjutnya, ketiklah Perintah ini untuk memeriksa bahwa Tesseract OCR sudah Terinstal :
tesseract -v
Selanjutnya, kita atur lagi di bagian System Environment Variables yang ada di Komputer Windows.
Kemudian, kita atur dengan mengeklik "Environment Variables...", cari di bagian Path lalu klik "Edit...", lalu klik di Tombol "New" dan tempelkan Alamat Folder Tesseract OCR tadi. Setelah itu, klik di Tombol "OK" semuanya.
Coba Ketik lagi Perintah "tesseract -v" di Folder apapun di Command Prompt (CMD) dan kamu sudah bisa memeriksa Versi Tesseract OCR dimanapun!
4. Instalasi Tesseract OCR ke Python
Selanjutnya, kita akan melakukan Instalasi Tesseract OCR ke Python. Langkah awal untuk membangun aplikasi OCR menggunakan Tesseract adalah dengan melakukan instalasi perangkat lunaknya. Anda bisa memperoleh Tesseract melalui situs resminya atau dengan memanfaatkan package manager seperti pip. Di bawah ini merupakan contoh cara memasang Tesseract menggunakan pip :
pip install pytesseract
Library Tesseract disertakan dengan alat baris perintah yang praktis bernama tesseract. Kita dapat menggunakan alat ini untuk melakukan OCR (Optical Character Recognition) pada gambar, dan hasilnya akan disimpan dalam file teks. Jika kita ingin mengintegrasikan Tesseract ke dalam kode C++ atau Python, kita akan menggunakan API dari Tesseract.
Untuk menginstall di Jupyter Notebook, silakan ketik :
!pip install pytesseract
B. Menjalankan Tesseract OCR Melalui CLI (CMD)
Sebelum mencoba menjalankan Tesseract OCR menggunakan Python, alangkah baiknya mencoba terlebih dahulu dengan Command Line (CLI) seperti Command Prompt di Windows (CMD).
Panggil mesin Tesseract pada gambar dengan image_path dan ubah gambar menjadi teks, tulis baris demi baris di Command Prompt dengan mengetik yang berikut :
$ tesseract image_path stdout
Untuk menulis Teks output dalam File :
$ tesseract image_path text_result.txt
Contohnya :
tesseract IMG_20250404_173002.jpg text_result.txt
Untuk Gambar (IMG_20250404_173002.jpg) :
Jika kita lihat, maka akan menambahkan File text_result.txt pada Folder ini :
Dan inilah Isi Teks dari File text_result.txt di atas :
Building Strong Families Since 1871 INFORMAS! NILAI GIZI Takaran Saji 225 ml 4 Sajian per Kemasan JUMLAH PER Energi Total a 150 kkal Energi dari Lemak 50 kkal : ape emak To Kolesteral 5 mg 5% Lemak Jenuh 3g 16% Protein 6g 9% Karbohidrat Total 20 g 6% Gula 16g Sukrosa 8g Laktosa 8g Garam (Natrium) 90 mg 6% ‘VitaminA 25% | i VitaminD3 25% §taminE ~ 6% ¥itamin B1 20% VitaminB2 20% VitaminB3 20% VitaminB5 20% VitaminB6 20% VitaminB12. 25% | Kaun 6% K _ * Persen AKG berdasarkan kebutuhan energ! 2 ‘8° & Kebutuhan energi anda mungkin lebih tings}: :::au lebih endah. OR: _ KOMPOSISI: Susu (Segar (50%), Skim Bubuk, Bubus:\x::termilk, 4 Lemak Susu, Laktosa) (53%), Air, Sukrosa, Maltodekstiiis. * | Sintetik, Penstabil Nabati, 3 Mineral, Ekstrak Air Kelapa (0,019), 9 Vitamin (mengandung antioksidan tokoferol) Mengandung alergen, lihat daftar bahan yang dicetak teb' Gb ~ Kocok dahulu sebelum diminum; ~ Petunjuk penyimpanan: | -Simpan ditempat sejuk dan kering; 4 ~Setelah dibuka, segera ditutup rapat dan disimpandi on lemari es dengan suhu di bawah 4°C maksimum 4 hari. |)
Memang, ada beberapa karakter yang tidak terbaca dikarenakan tulisan yang kurang jelas seperti Blur, Layar Kabur, hingga Cahaya Kamera yang mengganggu.
A
C. Menggunakan Tesseract OCR dengan Python
Pytesseract atau Python-tesseract adalah alat OCR untuk Python yang juga berfungsi sebagai pembungkus (wrapper) untuk Mesin Tesseract-OCR.
Alat ini dapat membaca dan mengenali teks dalam gambar, dan umumnya digunakan dalam kasus penggunaan OCR gambar ke teks dengan Python.
1. Membaca Teks OCR dengan Tesseract
Pytesseract juga berguna sebagai skrip pemanggilan mandiri ke Tesseract, karena dapat membaca semua jenis gambar yang didukung oleh pustaka pencitraan Pillow dan Leptonica, termasuk jpeg, png, gif, bmp, tiff, dan lainnya.
import cv2import pytesseractimg = cv2.imread('image.jpg')# Adding custom optionscustom_config = r'--oem 3 --psm 6'pytesseract.image_to_string(img, config=custom_config)
Contoh :
import cv2import pytesseractimg = cv2.imread('Dataset/Minuman/IMG_20250404_173002.jpg')# Adding custom optionscustom_config = r'--oem 3 --psm 6'pytesseract.image_to_string(img, config=custom_config)
Pada Folder :
📁 your-tesseract-project ├── 📁 Dataset ├── 📁 Alat_Mandi_dan_Kebersihan ├── 📁 Minuman ├── IMG_20250404_173002.jpg ├── kemasan-produk.py [Jika menggunakan Python] ├── kemasan-produk.ipymb [Jika menggunakan Jupyter Notebook]
Hasil Output :
"Pp <BR [ g\nsi \\ etOtECr. a”\nf\nMa Building ing Strang\n\\ Families Since 1871\n“ wows... HFORMASI NILAI GIZI\nTakaran Saji 225 ml\n4 Sajian per Kemasan\nJUMLAH PER SAJIAN\nEnergi Total 150 kkal\nEnergi dari Lemak 50 kkal\n%AKG*\nLemak Total 6g 3%)\nKolesterol 15 mg 5%\nLemak Jenuh 3g 16%\nS | Protein 6g 9%\n4 © | Karbohidrat Total 20 g 6%\n= | Gula 16g\n“a Sukrosa 8g\nrj Laktosa 8g\nmm: Garam (Natrium) 90 mg 6%\n“a HitaminDS. | 25%\na Hamine 6%\nYr VitaminBS = Ge hrm\n° VitaminBIA) as N\nKasur e\n_| *Persen AKG berdasarkan kebutuhan enery! 2 ‘8° kkal. i\nKebutuhan energi anda mungkin lebih tings: :::au lebih\n| Nendah. TN:\n_ MOMPOSISI: Susu (Segar (50%), Skim Bubuk, Bubus. °s::termilk,\n5} Lemak Susu, Laktosa) (53%), Air, Sukrosa, Maltodekstiis; Perisa\nSintetik, Penstabil Nabati, 3 Mineral, Ekstrak Air Kelapa (0,019),\n| 9Vitamin (mengandung antioksidan tokoferol)\nMengandung alergen, lihat daftar bahan yang dicetak teb'\n-Kocok dahulu sebelum diminum; |\n~ Petunjuk penyimpanan: i\n(~~ Simpan di tempat sejuk dan kering; i\n,, | ~Setelah dibuka, segera ditutup rapat dan disimpan di e\n} lemari es dengan suhu di bawah 4°C maksimum 4 hari. . .\n"
Dari Kode di atas, terlihat berantakan dan tidak rapi? Berikut ini adalah Alternatif lainnya yang lebih rapi :
import cv2import pytesseractimport argparseimport sys# img = cv2.imread('Dataset/Alat_Mandi_dan_Kebersihan/IMG_20250325_105723.jpg')img = cv2.imread('Dataset/Minuman/IMG_20250404_173002.jpg')# Adding custom optionscustom_config = r'--oem 3 --psm 6'pytesseract.image_to_string(img, config=custom_config)# construct the argument parser and parse the arguments}ap = argparse.ArgumentParser()ap.add_argument("-i", "--image", required=True,help="path to input image to be OCR'd")args = vars(ap.parse_args())# load the input image and convert it from BGR to RGB channel# ordering}image = cv2.imread(args["image"])image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# use Tesseract to OCR the imagetext = pytesseract.image_to_string(image)print(text)
CATATAN :
Jika masih terdapat Error di atas, inilah Kode Programnya :
import cv2import pytesseractimport argparseimport sys# img = cv2.imread('Dataset/Alat_Mandi_dan_Kebersihan/IMG_20250325_105723.jpg')img = cv2.imread('Dataset/Minuman/IMG_20250404_173002.jpg')# Adding custom optionscustom_config = r'--oem 3 --psm 6'pytesseract.image_to_string(img, config=custom_config)# Simulasi argumen command linesys.argv = ['script_name', '-i', 'Dataset/Minuman/IMG_20250404_173002.jpg']ap = argparse.ArgumentParser()ap.add_argument("-i", "--image", required=True,help="path to input image to be OCR'd")args = vars(ap.parse_args())image_path = args["image"]print(f"Path to image: {image_path}")# load the input image and convert it from BGR to RGB channel# ordering}image = cv2.imread(args["image"])image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# use Tesseract to OCR the imagetext = pytesseract.image_to_string(image)print(text)
Hasil Output :
Building Strong Families Since 1871 INFORMAS! NILAI GIZI Takaran Saji 225 ml 4 Sajian per Kemasan JUMLAH PER Energi Total a 150 kkal Energi dari Lemak 50 kkal : ape emak To Kolesteral 5 mg 5% Lemak Jenuh 3g 16% Protein 6g 9% Karbohidrat Total 20 g 6% Gula 16g Sukrosa 8g Laktosa 8g Garam (Natrium) 90 mg 6% ‘VitaminA 25% | i VitaminD3 25% §taminE ~ 6% ¥itamin B1 20% VitaminB2 20% VitaminB3 20% VitaminB5 20% VitaminB6 20% VitaminB12. 25% | Kaun 6% K _ * Persen AKG berdasarkan kebutuhan energ! 2 ‘8° & Kebutuhan energi anda mungkin lebih tings}: :::au lebih endah. OR: _ KOMPOSISI: Susu (Segar (50%), Skim Bubuk, Bubus:\x::termilk, 4 Lemak Susu, Laktosa) (53%), Air, Sukrosa, Maltodekstiiis. * | Sintetik, Penstabil Nabati, 3 Mineral, Ekstrak Air Kelapa (0,019), 9 Vitamin (mengandung antioksidan tokoferol) Mengandung alergen, lihat daftar bahan yang dicetak teb' Gb ~ Kocok dahulu sebelum diminum; ~ Petunjuk penyimpanan: | -Simpan ditempat sejuk dan kering; 4 ~Setelah dibuka, segera ditutup rapat dan disimpandi on lemari es dengan suhu di bawah 4°C maksimum 4 hari. |)
Terlihat lebih rapi kan?
2. Preprocessing untuk Tesseract
Agar hasil pengenalan teks (OCR) dengan Tesseract tetap akurat, penting untuk memastikan bahwa gambar sudah melalui tahap pra-pemrosesan yang benar.
Tahapan ini meliputi: mengubah ukuran gambar (rescaling), mengkonversi gambar menjadi hitam putih (binarization), menghapus gangguan pada gambar (noise removal), dan meluruskan gambar yang miring (deskewing), serta langkah-langkah lainnya.
Untuk mempersiapkan gambar agar siap diproses dengan OCR, Anda bisa memakai berbagai fungsi Python berikut ini.
import cv2import numpy as np# Definisi fungsidef get_grayscale(image):return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)def thresholding(image):return cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)[1]def opening(image):kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)def canny(image):return cv2.Canny(image, 100, 200)# Baca gambarimage = cv2.imread('Dataset/Minuman/IMG_20250404_173002.jpg')#template matchingdef match_template(image, template):return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)def resize_image(image, scale_percent):width = int(image.shape[1] * scale_percent / 100)height = int(image.shape[0] * scale_percent / 100)dim = (width, height)return cv2.resize(image, dim, interpolation=cv2.INTER_AREA)# Proses gambargray = get_grayscale(image)thresh = thresholding(gray)opened = opening(gray)edges = canny(gray)# Resize sebelum tampilkangray_resized = resize_image(gray, 20) # 20% dari ukuran aslithresh_resized = resize_image(thresh, 20)opened_resized = resize_image(opened, 20)edges_resized = resize_image(edges, 20)# Tampilkan hasilcv2.imshow("Grayscale", gray_resized)cv2.imshow("Threshold", thresh_resized)cv2.imshow("Opening", opened_resized)cv2.imshow("Canny Edges", edges_resized)cv2.waitKey(0)cv2.destroyAllWindows()
Hasil Output :
3. Membuat Kotak Sekitar Teks
Dengan menggunakan Pytesseract, Anda dapat memperoleh informasi tentang bounding box dari hasil OCR menggunakan kode berikut.
a. Menggunakan image_to_boxes
Skrip di bawah ini akan memberikan informasi bounding box untuk setiap karakter yang terdeteksi oleh Tesseract selama proses OCR.
import cv2import pytesseract# Fungsi resizedef resize_image(image, scale_percent):width = int(image.shape[1] * scale_percent / 100)height = int(image.shape[0] * scale_percent / 100)dim = (width, height)return cv2.resize(image, dim, interpolation=cv2.INTER_AREA)img = cv2.imread('Dataset/Minuman/IMG_20250404_173002.jpg')h, w, c = img.shapeboxes = 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)# Resize gambar setelah kotak-kotak dibuatimg_resized = resize_image(img, scale_percent=20) # Misal dikecilkan jadi 20% ukuran aslicv2.imshow('img', img_resized)cv2.waitKey(0)cv2.destroyAllWindows()
Jika Anda ingin mendapatkan kotak mengelilingi kata daripada karakter, fungsi :
image_to_data
akan sangat berguna. Anda dapat menggunakan fungsi image_to_data dengan menentukan tipe keluaran melalui pytesseract :
Output
b. Menggunakan image_to_data
Kita akan menggunakan gambar kemasan produk sampel di atas untuk menguji output dari Tesseract.
import cv2import pytesseractfrom pytesseract import Output# Fungsi resizedef resize_image(image, scale_percent):width = int(image.shape[1] * scale_percent / 100)height = int(image.shape[0] * scale_percent / 100)dim = (width, height)return cv2.resize(image, dim, interpolation=cv2.INTER_AREA)img = cv2.imread('Dataset/Minuman/IMG_20250404_173002.jpg')d = pytesseract.image_to_data(img, output_type=Output.DICT)print(d.keys())
Ini akan memberikan output seperti berikut :
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])
Dengan menggunakan dictionary ini, kita dapat memperoleh setiap kata yang terdeteksi, informasi bounding box untuk masing-masing kata, teks dalam kotak tersebut, dan nilai skor kepercayaan (confidence scores) untuk setiap deteksi.
Anda dapat menggambar kotak pada gambar dengan menggunakan kode berikut :
n_boxes = len(d['text'])for i in range(n_boxes):if int(d['conf'][i]) > 60: # Confidence > 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)# Resize gambar setelah bounding boximg_resized = resize_image(img, scale_percent=20) # Resize ke 20% dari ukuran aslicv2.imshow('img', img_resized)cv2.waitKey(0)cv2.destroyAllWindows()
Kode Lengkapnya :
import cv2import pytesseractfrom pytesseract import Output# Fungsi resizedef resize_image(image, scale_percent):width = int(image.shape[1] * scale_percent / 100)height = int(image.shape[0] * scale_percent / 100)dim = (width, height)return cv2.resize(image, dim, interpolation=cv2.INTER_AREA)img = cv2.imread('Dataset/Minuman/IMG_20250404_173002.jpg')d = pytesseract.image_to_data(img, output_type=Output.DICT)print(d.keys())n_boxes = len(d['text'])for i in range(n_boxes):if int(d['conf'][i]) > 60: # Confidence > 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)# Resize gambar setelah bounding boximg_resized = resize_image(img, scale_percent=20) # Resize ke 20% dari ukuran aslicv2.imshow('img', img_resized)cv2.waitKey(0)cv2.destroyAllWindows()
Hasilnya akan terlihat seperti ini untuk gambar kemasan produk sampel.
4. Pencocokan Template Teks
Ambil contoh ketika kita mencoba menemukan lokasi Tanggal dalam sebuah gambar. Dalam kasus ini, template kita adalah pola ekspresi reguler (regular expression) yang akan kita cocokkan dengan hasil OCR untuk menemukan bounding box yang sesuai.
regex
Untuk hal ini, kita sudah tidak menggunakan gambar di atas, namun kami menggunakan Gambar ini yang bernama IMG_20250313_163406.jpg :
Untuk melakukannya, kita akan menggunakan modul regex dan fungsi image_to_data dari Tesseract.
import reimport cv2import pytesseractfrom pytesseract import Outputimg = cv2.imread('Dataset/Minuman/IMG_20250313_163406.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)\d\d$'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)
Jika Tanggal-nya tak terdeteksi dengan Kode di atas, Anda dapat menggunakan Pola Tanggal seperti ini :
date_pattern = r'^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[0-2])\.(\d{2})$'
Artinya :
- Dua digit tanggal (01-31)
- Titik .
- Dua digit bulan (01-12)
- Titik .
- Dua digit tahun (00-99)
Sehingga, Kode-nya seperti ini :
import reimport cv2import pytesseractfrom pytesseract import Outputimg = cv2.imread('Dataset/Minuman/IMG_20250313_163406.jpg') # pakai path yang baru uploadd = pytesseract.image_to_data(img, output_type=Output.DICT)keys = list(d.keys())# Update pola tanggaldate_pattern = r'^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[0-2])\.(\d{2})$'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)# Resize supaya tidak terlalu besarscale_percent = 30width = int(img.shape[1] * scale_percent / 100)height = int(img.shape[0] * scale_percent / 100)dim = (width, height)resized_img = cv2.resize(img, dim, interpolation=cv2.INTER_AREA)cv2.imshow('Detected Date', resized_img)cv2.waitKey(0)cv2.destroyAllWindows()
Hasilnya akan terlihat seperti ini untuk Gambar di bawah ini.
https://tesseract-ocr.github.io
https://github.com/tesseract-ocr/tesseract
https://github.com/letterassist-ai/flusseract
VIDEO
Untuk melihat Tutorial lainnya dan lebih jelasnya tentang Cara Instalasi dan Penggunaan Tesseract OCR dengan Python, silakan lihat Video-video YouTube di bawah ini.
Itulah Tutorial Cara menggunakan Tesseract OCR dengan Python yang telah kita lakukan. Untuk melihat Pengertian (Definisi) dari Optical Character Recognition (OCR), silakan lihat di sini.
Terima Kasih 😄😘👌👍 :)
Wassalamu‘alaikum wr. wb.