Tesseract ile Font Eğitimi

Alperen Yılmaz
3 min readOct 8, 2021

--

Optical Character Recognition

Tesseract, çeşitli işletim sistemleri için geliştirilen Optik Karakter Tanıma yazılımıdır (Optical Character Recognition). Bazı durumlarda önceden eğitilmiş modeller yüksek performans gösteremeyebilir. Bu durumu iyileştirmenin yollarından biri de yazı tipi ile önceden eğitilmiş mevcut model üzerinden yeni bir model eğitmektir. Bu yazıda Jokerman yazı tipi için hazırlanan model eğitimde izlediğim adımları tartışacağız. Gerekli bütün kodlar ve Jokerman yazı tipi xayilmaz/tesseract-custom-font-training reposunda mevcuttur.

Eğitim süreci için Ubuntu 18.04 LTS çalıştıran bir WSL kullanılmıştır (Microsoft Store üzerinden indirebilirsiniz). Eğitim adımlarına geçmeden önce tesseract’ın en son sürümünün yüklenmesi zorunludur buradan en yeni sürümü indirebilirsiniz. Bir Ubuntu makinesinde gerekli tüm kurulumları daha hızlı yapmak için install_tesseract.sh scriptini kullanabilirsiniz.

Training Tesseract

Tesseract eğitimi için, resmi repodan langdata_lstm dosyasını indirmeniz ve onu tesseract kök dizinine eklemeniz gerekecektir. Ayrıca eğitilmiş en iyi İngilizce modeli eng.traineddata’yı indirmeniz ve onu tesseract/tessdata dizinine eklemeniz gerekecektir. Yazı ise tipi /fonts dizinine yerleştirilmelidir. Fakat bu adımların hepsi install_tesseract.sh scripti çalıştırıldığında otomatik olarak indirilecektir. Herhangi bir sorun olması halinde elle yükleme yapabilirsiniz.

Generating Training Data

Eğitim sürecindeki ilk adım, eğitim verilerini oluşturmaktır. Bizim durumumuzda, eğitim verilerini oluşturmak için tesseract tarafından sağlanan tesstrain.py betiğini kullanacağız.

tesseract/tesstrain/src/training/tesstrain.py \
--fonts_dir fonts \
--fontlist "$FONT_NAME" \
--lang eng \
--linedata_only \
--langdata_dir ./tesseract/langdata_lstm \
--tessdata_dir ./tesseract/tessdata \
--maxpages $MAX_PAGES \
--output_dir train

Yukarıdaki kod, eğitim verilerini oluşturacak ve /train klasörüne ekleyecektir. Yazı tipinin adı, yazı tipi listesine FONT_NAME ile atanır. MAX_PAGES, oluşturulan veri sayfalarının sayısını tanımlar.

Fine-Tuning Existing Model

Burada en iyi İngilizce modeli alıp yazı tipine uyacak şekilde fine-tune yapılır. Model eng.traineddata’dan çıkarılır ve yeni eğitilecek yazı tipine fine-tune yapmak için kullanılır.

combine_tessdata -e ./tesseract/tessdata/eng.traineddata eng.lstmrm -rf output/*
OMP_THREAD_LIMIT=8 lstmtraining \
--continue_from eng.lstm \
--model_output output/jokerman \
--traineddata tesseract/tessdata/eng.traineddata \
--train_listfile ./train/eng.training_files.txt \
--max_iterations $NUM_ITERATIONS

Combine Model

Fine-tune model elde edildikten sonra, son jokerman.trainneddata’yı elde etmek için oluşturulan kontrol noktalarını en iyi İngilizce modeliyle birleştirilir.

lstmtraining \
--stop_training \
--continue_from output/jokerman_checkpoint \
--traineddata ./tesseract/tessdata/eng.traineddata \
--model_output output/jokerman.traineddata \

Eğitim için kullanılan tüm komutlar training.sh içinde mevcuttur.

Performance Evaluation

10 sayfa ve 400 yineleme sonucunda 0,46 error rate oranı elde edildi. Sayfa sayısı ve yineleme sayısı artırılarak performans daha da iyileştirilebilir.

Yukarıda gösterilen görsel en iyi İngilizce model ve eğitimini gerçekleştirdiğimiz Jokerman modeli kullanılarak karşılaştırma yapılmıştır. Yeni model ile çok fazla performans artışı olduğu sonuçlardan açıkça görülmektedir.

Özetle Ubuntu WSL kurulumu yaptıktan sonra yapılması gereken adımlar.

  1. git clone https://github.com/xayilmaz/tesseract-custom-font-training.git
  2. cd tesseract-custom-font-training
  3. sh install_tesseract.sh
  4. sh training.sh

References

  1. https://github.com/tesseract-ocr/
  2. https://tesseract-ocr.github.io/tessdoc/
  3. https://www.linkedin.com/pulse/custom-font-training-tesseract-nikhil-baby

--

--