Lewati ke konten utama
Panduan developer

Melatih Tesseract pada font
dan data khusus (tesstrain, v5).

Panduan teruji dan berorientasi keputusan untuk fine-tuning dan melatih model Tesseract 5 dengan tesstrain: membangun dari sumber, menyiapkan ground truth, menjalankan make training, mengatur variabel penting, mengukur CER dengan lstmeval, dan menerapkan traineddata Anda.

TL;DR — fine-tune model yang sudah ada

Jika skrip Anda sudah didukung, fine-tuning adalah jalur tercepat menuju model yang lebih baik.

bash
git clone https://github.com/tesseract-ocr/tesstrain.git
cd tesstrain && make tesseract-langdata
# letakkan gambar baris + .gt.txt di data/myfont-ground-truth/
make training MODEL_NAME=myfont START_MODEL=ind

Pelatihan tidak tersedia melalui installer biner. Anda memerlukan Linux atau WSL2. Lihat instalasi untuk membangun dari sumber.

Pohon keputusan: fine-tuning vs potong lapisan atas vs dari nol

Memilih pendekatan yang tepat menghemat berhari-hari pelatihan yang terbuang.

PendekatanGunakan saatData yang dibutuhkanWaktu
Fine-tuning (FINETUNE_TYPE=1)Skrip sama, font atau kosakata domain baru1.000–5.000 barisJam
Potong lapisan atas (FINETUNE_TYPE=2)Skrip sama, bentuk glif sangat berbeda5.000–20.000 barisJam–hari
Dari nolSkrip baru atau alfabet yang sangat berbeda50.000+ barisHari

Mulailah dari opsi teringan yang mungkin berhasil, evaluasi, dan naikkan tingkat hanya jika CER tidak dapat diterima. Sebagian besar masalah font khusus diselesaikan dengan fine-tuning.

Prasyarat

Pelatihan memerlukan build dari sumber, bukan biner paket.

bash
sudo apt update
sudo apt install -y git make automake pkg-config g++ \
  libleptonica-dev libtesseract-dev tesseract-ocr

git clone https://github.com/tesseract-ocr/tesstrain.git
cd tesstrain
make tesseract-langdata   # mengambil langdata_lstm + tessdata_best

Menyiapkan ground truth

Ground truth adalah gambar baris yang dipasangkan dengan teks persisnya.

tesstrain mengharapkan satu gambar per baris teks di data/<MODEL_NAME>-ground-truth/, masing-masing dengan file .gt.txt berisi transkripsi persisnya. Hasilkan gambar dari file teks dan font dengan text2image, dan bagi teks panjang menjadi baris dengan split_training_text.py dari langdata_lstm.

bash
# Hasilkan gambar baris dari korpus + font
text2image --text=corpus.txt \
  --outputbase=data/myfont-ground-truth/myfont \
  --font='Font Khusus Saya' --fonts_dir=/usr/share/fonts \
  --ptsize=14

# text2image juga menghasilkan file .box; konversikan ke .gt.txt
# (tesstrain/training/ berisi skrip bantu, atau ganti nama setelah diverifikasi)

Berapa banyak data: 100–500 baris untuk memvalidasi pipeline, 1.000–5.000 untuk produksi. Akurasi berasal dari variasi — font, ukuran, spasi, dan derau yang berbeda — lebih daripada volume mentah.

Font dan pemilihan unicharset

Kumpulan karakter harus mencakup semua yang akan dilihat model.

Menjalankan pelatihan

Satu perintah menjalankan seluruh pipeline Makefile.

bash
make training \
  MODEL_NAME=myfont \
  START_MODEL=ind \
  TESSDATA_PREFIX=../tessdata_best \
  MAX_ITERATIONS=10000
VariabelArtiNilai umum
START_MODELModel untuk dilanjutkan (fine-tuning)eng, ind…
TESSDATA_PREFIXDirektori yang memuat model awal../tessdata_best
MAX_ITERATIONSBatas atas langkah pelatihan10000–100000
LEARNING_RATEUkuran langkah; lebih kecil lebih aman untuk fine-tuning0.0001–0.001
FINETUNE_TYPE0 dari nol, 1 fine-tuning, 2 potong lapisan atas1
NET_SPECSpesifikasi arsitektur jaringanbiarkan default
RATIO_TRAINPembagian pelatihan/validasi0.9
TARGET_ERROR_RATETarget CER untuk penghentian dini0.01

Checkpoint, stop_training, dan best vs fast

Evaluasi: character error rate dengan lstmeval

Nilai model pada data yang tidak pernah dilihatnya.

bash
lstmeval --model data/myfont_checkpoint \
  --traineddata ../tessdata_best/ind.traineddata \
  --eval_listfile data/myfont-ground-truth/eval_files.txt

Pantau CER pada himpunan yang disisihkan. Saat berhenti turun — atau mulai naik sementara loss pelatihan terus turun — terjadi overfitting; berhenti dan gunakan checkpoint sebelumnya.

Menerapkan model terlatih

Salin traineddata, arahkan mesin ke sana, dan uji.

bash
# Salin ke direktori tessdata
cp data/myfont.traineddata /usr/share/tesseract-ocr/5/tessdata/
# atau setel prefiks khusus
export TESSDATA_PREFIX=/jalur/ke/tessdata
tesseract contoh.png stdout -l myfont

Anda dapat menggabungkan model dengan bahasa dasar, mis. -l myfont+ind. Di Python, berikan nilai yang sama ke pytesseract; lihat panduan Python.

Pemecahan masalah

GejalaPenyebabSolusi
Kotak buruk / ground truth tidak selarasMetrik font salah atau gambar baris terlalu besarHasilkan ulang dengan --font dan --ptsize yang benar; periksa beberapa gambar secara visual.
Karakter hilang di keluaranKarakter tidak ada di unicharsetTambahkan glif ke ground truth dan bangun ulang unicharset.
Loss divergen / NaNLearning rate terlalu tinggiTurunkan LEARNING_RATE dan lanjutkan dari checkpoint sebelumnya.
Kehabisan memori (OOM)Batch terlalu besar untuk RAM/GPUKurangi BATCH_SIZE/ukuran jaringan, atau gunakan mesin dengan memori lebih besar.
CER validasi naik sementara loss turunOverfittingBerhenti lebih awal, tambahkan ground truth lebih bervariasi, atau gunakan learning rate lebih rendah.

FAQ pelatihan

Bisakah saya melatih Tesseract tanpa membangunnya dari sumber?

Tidak. Alat pelatihan tidak ada di installer biner; gunakan Linux atau WSL2 dengan libtesseract-dev dan repositori tesstrain.

Berapa banyak sampel yang saya butuhkan?

Sekitar 100–500 baris untuk memvalidasi pipeline dan 1.000–5.000 untuk produksi. Fine-tuning membutuhkan lebih sedikit daripada melatih dari nol.

Fine-tuning atau dari nol?

Fine-tuning untuk font atau kosakata baru pada skrip yang sudah ada; dari nol hanya untuk skrip yang benar-benar baru.

Kapan saya harus menghentikan pelatihan?

Saat CER validasi berhenti membaik, bukan saat loss pelatihan mendatar. Selisih itu adalah overfitting.

Di mana model diletakkan?

Salin <MODEL_NAME>.traineddata ke direktori tessdata (atau setel TESSDATA_PREFIX) dan jalankan tesseract image.png stdout -l myfont.