tesseract-ocr筆記(續

Kuan
5 min readJun 5, 2020

--

還記得那慘不仁賭的驗證碼準確率嗎?其實上回步驟跟做法都是對的,只是當初鬼遮眼,僅一行 code 沒注意到,白白浪費超多時間呀。

ref:

https://medium.com/@kuancat/tesseract-ocr-%E7%AD%86%E8%A8%98-d3e8781a587d

Samuel L. Jackson

請教了一下強者同事,原來 tesseract 目前有三種訓練方法。

  • make ( 此次會用到的方法 )
  • tesstrain.sh
  • jTessBoxEditor ( 適合陶冶性情 🍵 )

ref:

https://github.com/tesseract-ocr/tesstrain

https://livezingy.com/train-tesseract-lstm-methods-comparison/

因為我是開 VM 裝 docker 訓練的,如果想用 windows 跑的話,請依照上方 ref 安裝。

第一步

安裝 tesseract 4.0.0beta1 以上的版本、 tesseract training tools 與 Python 3.x for Pillow。

You will need a recent version (>= 4.0.0beta1) of tesseract built with the training tools and matching leptonica bindings. Build instructions and more can be found in the Tesseract project wiki.

You need a recent version of Python 3.x. For image processing the Python library Pillow is used. If you don't have a global installation, please use the provided requirements file pip install -r requirements.txt.

第二步

準備待訓練的圖檔 ( png 或 tif ) 與相對應的 txt ( 檔名與圖檔相同,但後綴為.gt.txt;內容則是圖檔的文字 )

圖檔名稱為 BAmn.png

文檔名稱為 BAmn.gt.txt

文檔內容為圖片內容,此處為 BAmn

第三步

開始訓練

將剛剛準備好的檔案放到 tesstrain/data/[lang]-ground-truth 下。

make training MODEL_NAME=[lang]

假設想要訓練出的語言為 ABC、以基底英文 ( eng ) 為訓練 model.

make training MODEL_NAME=ABC START_MODEL=eng

訓練好後就會在 tesstrain/data 下產生一個 ABC.traineddata 啦!

就是這麼簡單~準備好圖、文檔,打打指令自動訓練。不用再像上回一樣,坐在電腦前一張一張 box 比對,省下來的時間就可以浪費在其他更美好的事物上啦!!

拉回本文開頭。強者我同事有寫一個驗證程式碼的程式,我就直接借來驗證我的訓練準不準確。那到底是漏看了什麼導致準確率甚低?

首先,拿 tesseract 原生的 eng.traineddata 來比對驗證碼, 解析出來的不是漏字、多字、不然就是英文變數字,準確率不到 1 %,然後訓練了 300 張,準確率 8 %; 800 張 11 % …

眉頭一皺,這樣下去要練幾萬張才會達到預期的準確率。念頭一轉,是不是圖檔太雜,訓練時不好判斷。

改成灰階圖或二值化圖訓練,沒用。開始想辦法降噪,降噪參數一個一個改,一個一個訓練,沒用。修改 PSM、拉高訓練次數,沒用!!!

濾波降噪
降噪太多
降噪
降噪

電腦大概是 2012, 2013 左右的機子,效能問題訓練時間又不短,中間又歷經 VM 被我玩掛掉、重新下載 image 又常斷線( 剛好處在一個網路不好的地方 ) 。

就在要放棄時,想說看看到底是哪些 "字" 這麼難訓練,突然發現只要是大寫的字都判斷不出來!!!竟然!!!

當初沒仔細看,原來那驗證程式碼的程式有設定參數 tessedit_char_whitelist 只抓小寫…

恩恩...哈哈...我... 😭

--

--