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.
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=indPelatihan 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.
| Pendekatan | Gunakan saat | Data yang dibutuhkan | Waktu |
|---|---|---|---|
Fine-tuning (FINETUNE_TYPE=1) | Skrip sama, font atau kosakata domain baru | 1.000–5.000 baris | Jam |
Potong lapisan atas (FINETUNE_TYPE=2) | Skrip sama, bentuk glif sangat berbeda | 5.000–20.000 baris | Jam–hari |
| Dari nol | Skrip baru atau alfabet yang sangat berbeda | 50.000+ baris | Hari |
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.
- Lingkungan Linux — native atau WSL2 di Windows. macOS tidak didukung untuk pelatihan.
git,make,pkg-config,automake, dan toolchain C++.libtesseract-devdanlibleptonica-dev(biner pelatihan menaut ke keduanya).- Repositori
tesstrain, sertalangdata_lstmdan model awaltessdata_best.
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_bestMenyiapkan 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.
# 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.
- Pasang font pelatihan di lingkungan; berikan nama keluarga yang tepat ke
--font. - Saat fine-tuning, pertahankan
unicharsetmodel awal agar lapisan keluaran cocok. - Untuk skrip baru, turunkan unicharset dari ground truth Anda agar setiap glif terwakili.
- Sertakan tanda baca, angka, dan huruf besar/kecil jika dokumen nyata memuatnya; jika tidak, model akan membuangnya.
Menjalankan pelatihan
Satu perintah menjalankan seluruh pipeline Makefile.
make training \
MODEL_NAME=myfont \
START_MODEL=ind \
TESSDATA_PREFIX=../tessdata_best \
MAX_ITERATIONS=10000| Variabel | Arti | Nilai umum |
|---|---|---|
START_MODEL | Model untuk dilanjutkan (fine-tuning) | eng, ind… |
TESSDATA_PREFIX | Direktori yang memuat model awal | ../tessdata_best |
MAX_ITERATIONS | Batas atas langkah pelatihan | 10000–100000 |
LEARNING_RATE | Ukuran langkah; lebih kecil lebih aman untuk fine-tuning | 0.0001–0.001 |
FINETUNE_TYPE | 0 dari nol, 1 fine-tuning, 2 potong lapisan atas | 1 |
NET_SPEC | Spesifikasi arsitektur jaringan | biarkan default |
RATIO_TRAIN | Pembagian pelatihan/validasi | 0.9 |
TARGET_ERROR_RATE | Target CER untuk penghentian dini | 0.01 |
Checkpoint, stop_training, dan best vs fast
- tesstrain menulis checkpoint berkala (misalnya
myfont_checkpoint) yang dapat Anda evaluasi atau lanjutkan. - Buat file
stop_trainingdi direktori keluaran untuk mengakhiri pelatihan dengan bersih pada iterasi berikutnya. - Konversi checkpoint menjadi model yang dapat dipakai dengan
combine_tessdata -e/convert_to_intdari alat pelatihan. - Model best paling akurat; fast lebih kecil dan lebih cepat. Lakukan fine-tuning dari
tessdata_bestsaat akurasi penting.
Evaluasi: character error rate dengan lstmeval
Nilai model pada data yang tidak pernah dilihatnya.
lstmeval --model data/myfont_checkpoint \
--traineddata ../tessdata_best/ind.traineddata \
--eval_listfile data/myfont-ground-truth/eval_files.txtPantau 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.
# 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 myfontAnda dapat menggabungkan model dengan bahasa dasar, mis. -l myfont+ind. Di Python, berikan nilai yang sama ke pytesseract; lihat panduan Python.
Pemecahan masalah
| Gejala | Penyebab | Solusi |
|---|---|---|
| Kotak buruk / ground truth tidak selaras | Metrik font salah atau gambar baris terlalu besar | Hasilkan ulang dengan --font dan --ptsize yang benar; periksa beberapa gambar secara visual. |
| Karakter hilang di keluaran | Karakter tidak ada di unicharset | Tambahkan glif ke ground truth dan bangun ulang unicharset. |
| Loss divergen / NaN | Learning rate terlalu tinggi | Turunkan LEARNING_RATE dan lanjutkan dari checkpoint sebelumnya. |
| Kehabisan memori (OOM) | Batch terlalu besar untuk RAM/GPU | Kurangi BATCH_SIZE/ukuran jaringan, atau gunakan mesin dengan memori lebih besar. |
| CER validasi naik sementara loss turun | Overfitting | Berhenti 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.