Lewati ke konten utama
Panduan pengembang

Tesseract OCR di Python
dengan pytesseract.

Panduan lengkap dan teruji untuk pytesseract: pemasangan, API inti, prapemrosesan gambar, PDF, skor keyakinan, konfigurasi PSM/OEM, performa, dan error yang paling sering terjadi.

Mulai cepat (tiga baris)

Pasang mesin terlebih dahulu, lalu jalankan ini. Penyiapan lengkap ada di bawah.

ocr.py
import pytesseract
from PIL import Image

text = pytesseract.image_to_string(Image.open("image.png"))
print(text)

Pasang pytesseract

pytesseract hanya pembungkus: ia memanggil biner Tesseract, jadi mesin harus dipasang lebih dulu.

bash
pip install pytesseract pillow
# opsional, untuk prapemrosesan:
pip install opencv-python numpy
# opsional, untuk input PDF:
pip install pdf2image

Jika mesin tidak ada di PATH (umum di Windows), arahkan secara eksplisit:

python
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

Baru dengan mesinnya? Lihat panduan pemasangan untuk Windows, macOS, Linux, Docker, dan WSL.

API inti

pytesseract menyediakan satu fungsi per jenis keluaran. Pilih sesuai kebutuhan Anda.

FungsiMengembalikanGunakan saat
image_to_stringTeks biasaHanya butuh teks yang dikenali
image_to_dataKotak per kata + keyakinanMenyorot teks, memfilter kata berkeyakinan rendah
image_to_boxesKotak per karakterGeometri tingkat karakter
image_to_pdf_or_hocrPDF dapat dicari atau hOCRMembuat PDF dapat dicari atau overlay web
image_to_osdDeteksi orientasi dan aksaraMendeteksi rotasi atau aksara sebelum OCR
image_to_alto_xmlALTO XMLPipeline arsip / perpustakaan

Konfigurasi: PSM, OEM, bahasa, dan daftar karakter

Berikan opsi sebagai string dipisah spasi ke config=.

config.py
# Satu blok teks, mesin LSTM, bahasa Indonesia
text = pytesseract.image_to_string(img, lang="ind", config="--oem 3 --psm 6")

# Hanya angka (total struk, bacaan meteran)
text = pytesseract.image_to_string(img, config="--psm 7 -c tessedit_char_whitelist=0123456789.")

# Bahasa gabungan
text = pytesseract.image_to_string(img, lang="eng+ind")
PSMModeIdeal untuk
3Sepenuhnya otomatis (bawaan)Dokumen standar
4Satu kolom dengan ukuran bervariasiArtikel, halaman satu kolom
6Satu blok teks seragamParagraf, label
7Satu baris teksKeterangan satu baris, bidang tunggal
8Satu kataKata individual
11Teks jarangStruk, teks antarmuka yang tersebar
13Baris mentahSatu baris tanpa trik Tesseract

Mode OEM: --oem 1 (hanya LSTM, bawaan v5), --oem 0 (lama), --oem 3 (otomatis). Referensi lengkap di dokumentasi.

Prapemrosesan gambar

Masukan yang bersih adalah faktor terbesar dalam akurasi. Berikut langkah yang paling penting.

prapemrosesan.py
import cv2, numpy as np, pytesseract
from PIL import Image

image = cv2.imread("struk.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Perbesar teks kecil ke setara ~300 DPI
gray = cv2.resize(gray, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)

# Kurangi noise, lalu ambang Otsu ke hitam-putih murni
blur = cv2.GaussianBlur(gray, (5, 5), 0)
_, binary = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

text = pytesseract.image_to_string(Image.fromarray(binary))

Posisi dan skor keyakinan

Gunakan image_to_data untuk kotak per kata dan keyakinan 0–100, lalu filter noise.

keyakinan.py
from pytesseract import Output

data = pytesseract.image_to_data(img, output_type=Output.DICT)
for text, conf in zip(data["text"], data["conf"]):
    if text.strip() and float(conf) > 60:   # buang noise berkeyakinan rendah
        print(round(float(conf)), text)

OCR PDF di Python

Tesseract bekerja dengan gambar, jadi rasterkan halaman PDF lebih dulu dengan pdf2image (memerlukan poppler).

pdf.py
import io, pytesseract
from pdf2image import convert_from_path
from pypdf import PdfWriter, PdfReader

pages = convert_from_path("pindaian.pdf", dpi=300)   # memerlukan poppler
writer = PdfWriter()
for page in pages:
    pdf_bytes = pytesseract.image_to_pdf_or_hocr(page, extension="pdf")
    writer.add_page(PdfReader(io.BytesIO(pdf_bytes)).pages[0])
with open("pindaian_dapat_dicari.pdf", "wb") as f:
    writer.write(f)

Di Windows, berikan folder bin poppler melalui poppler_path=. Untuk alur yang lebih lengkap, lihat dokumentasi format keluaran.

Performa

pytesseract memanggil CLI di setiap panggilan, jadi throughput bergantung pada cara Anda menyusunnya.

PendekatanKapanTrade-off
pytesseract per panggilanSkrip dan tugas sekali jalanMemulai proses per panggilan — lambat dalam loop
Kelompokkan ke TIFF multi-halamanBanyak halaman, pengaturan samaSatu proses untuk banyak halaman
multiprocessingBanyak gambar independenMemakai semua inti CPU; lebih banyak memori
tesserocrVolume tinggi, dalam prosesBinding native, penyiapan lebih rumit

Katalog error

Error berikut mencakup sebagian besar masalah pytesseract.

ErrorPenyebabSolusi
TesseractNotFoundErrorBiner tidak terpasang atau tidak di PATHPasang mesin atau setel pytesseract.pytesseract.tesseract_cmd.
(-215:Assertion failed) src.type() == CV_8UC1Ambang pada gambar 3 kanalKonversi dulu dengan cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).
Error opening data file ...fra.traineddataPaket bahasa tidak adaPasang bahasa atau setel TESSDATA_PREFIX.
Keluaran kosongDPI rendah, PSM salah, atau tidak ada teksPerbesar, coba --psm 6/7/11, dan prapemrosesan.
Sangat lambat dalam loopSatu proses per panggilanKelompokkan, gunakan multiprocessing atau tesserocr.

Mengukur akurasi

Ukur tingkat kesalahan karakter dan kata alih-alih menilai keluaran dengan mata.

eval.py
import pytesseract, jiwer
from PIL import Image

hypothesis = pytesseract.image_to_string(Image.open("contoh.png"))
reference  = open("contoh.gt.txt").read()

print("CER:", jiwer.cer(reference, hypothesis))
print("WER:", jiwer.wer(reference, hypothesis))

Simpan sekumpulan kecil gambar representatif dengan teks acuan sebagai uji regresi dan jalankan ulang saat Anda mengubah prapemrosesan atau konfigurasi.

FAQ Python

Bagaimana cara menggunakan Tesseract OCR di Python?

Pasang mesin terlebih dahulu, lalu pip install pytesseract pillow. Buka gambar dengan Pillow dan panggil pytesseract.image_to_string(img).

Mengapa muncul TesseractNotFoundError?

pytesseract tidak menemukan biner. Pasang mesin, masukkan ke PATH, atau setel pytesseract.pytesseract.tesseract_cmd ke jalur lengkap.

Bagaimana meningkatkan akurasi?

Skalakan ke ~300 DPI, grayscale, ambang, pengurangan noise, koreksi kemiringan, dan --psm yang tepat. Gunakan lang= yang sesuai dan, untuk bidang tetap, daftar karakter yang diizinkan.

Bagaimana melakukan OCR pada PDF?

Gunakan pdf2image (dengan poppler) untuk mengubah halaman menjadi gambar, jalankan pytesseract pada tiap halaman, dan gabungkan dengan image_to_pdf_or_hocr(..., extension="pdf").

Bagaimana mendapatkan skor keyakinan?

Gunakan image_to_data(..., output_type=Output.DICT) dan filter daftar conf.

Apakah pytesseract lambat?

Setiap panggilan memulai proses. Kelompokkan, gunakan multiprocessing, atau beralih ke binding dalam proses tesserocr.

Pelajari mesin dan ekosistem lebih dalam.