上篇文章簡單的學習了tesseract-ocr識別圖片中的英文(連結地址如下:www.cnblogs.com/wj-1314/p/9428909.html),看起來效果還不錯,所以這篇文章繼續深入學習tesseract-ocr識別圖片中的中文。
一,準備中文字型檔
下載chi_sim.traindata字型檔。要有這個才能識別中文。下好後,放到Tesseract-OCR項目的tessdata檔案夾裡面。(注意下載字型檔,一定要看庫對應的tesseract版本下載)
為什麼強調版本呢 ,小編這裡講自己做的愚蠢的事情附上,希望大家別入坑了。
上一篇學習Tesseract-ocr中,識別的是英文,然後小編下載了中文庫,如下
不知道是什麼原因,總是報錯。報錯如下:
我找了多種方法,包括重新安裝庫,配置環境變數,仍然沒有解決問題,所以在這裡,我又考慮到Tesseract的版本問題,所以打算重新最新版 w64-v4.0.0,繼續試試。附上下載連結地址
下載Tesseract的地址:digi.bib.uni-mannheim.de/tesseract/
下載Tesseract-ocr包的地址:github.com/tesseract-ocr/tesseract/wiki/Data-Files
下載Tesseract的Git地址:github.com/tesseract-ocr/tesseract/wiki
經過一天的折騰,在tesseract的GitHub中,我偶然發現了問題的所在,可以說自己是非常的蠢,請看
也就是不同的版本,安裝的中文包是不同的,而我亂安裝了包,所以一直報錯,還沒有解決問題,下次一定不能這麼粗心。
二,準備訓練字型檔
下載jTessBoxEditor,這個是用來訓練字型檔的。
以上的在百度都能找到下載,就不詳細講了(要是找不到的,可以留言給我),下載好之後就是這樣的。
三,下載Java虛擬機器(Java大法好啊)
如果你剛剛接觸Java語言,並且對它興趣很大,想繼續研究。那麼這節就來給你說說怎麼安裝Java工具JDK,它是你進行Java的第一步。
首先你要下載Java的JDK(JDK的全稱是:Java Development Kit即Java語言軟體工具開發包),目前最新的JDK版本是1.8,Java最初是SUN公司,因後來被oracle公司收購,故你需要到oracle官網上下載JDK網址是:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html。輸入這個網址你就可以看到下面圖片
其中圖片中現實的上面是oracle公司提供的Java JDK,上面有兩個按鈕,預設是不接受License,你需要接受以後就可以下載Java的JDK,這裡你需要根據自己電腦的類型,以及作業系統的位元,下載對應的JDK。下面的一個是oracle公司對JDK提供的demos和Samples即簡單的例子,可以供我們學習,感興趣的可以下載下來學習。
這裡我選擇下載JDK的Windows的64位JDK,下面圖片是下載的JDK的安裝包。
雙擊JDK安裝包,點擊下一步。
這裡選擇不安裝公用JRE,因為公用JRE是一個獨立的JRE系統,它是單獨的安裝在windows系統下的其他路徑下。公用的JRE會向瀏覽器和系統中註冊Java運行時的環境。通過向瀏覽器和系統中註冊運行時的環境,系統中的任何應用程式都可以使用公用JRE。但是現在在瀏覽器網頁上執行applet的機會幾乎沒有,並且JDK目錄下JRE完全可以勝任,所以一般選擇不安裝公用JRE。這裡如果你不想安裝在預設路徑下,可以選擇更改目錄。
單擊下一步,會出現如下安裝條。
輸入Java -version可以查看自己的Java版本。這樣你的JDK就安裝成功了。
四,識別中文效果 1,隨便製作一張有漢字的圖片,小編做的圖片如下:
2,使用中文字型檔訓練,程式如下:
import pytesseractfrom PIL import Image#開啟驗證碼圖片image = Image.open('07.jpg')#載入一片防止報錯,此處可以省略image.load()#調用show來展示圖片,調試用此處可以省略image.show()text = pytesseract.image_to_string(Image.open('07.jpg'),lang ='chi_sim')print(text)
3,使用中文字型檔訓練的結果如下:
從結果來看,效果不太理想,所以我們要想得到更好的結果,那麼就需要訓練自己的字型檔,下面小編開始訓練自己的字型檔。
五,訓練自己的文庫1、將圖片轉換成tif格式,用於後面產生box檔案。可以通過畫圖,然後另存新檔tif即可
更改圖片名字,這個是有要求的
tif文面命名格式[lang].[fontname].exp[num].tiflang是語言 fontname是字型 比如我們要訓練自訂字型檔myfontlab 字型名normal那麼我們把圖片檔案重新命名 myfontlab.normal.exp0.jpg在轉tif。
2、產生box檔案
tesseract myfontlab.normal.exp0.jpg myfontlab.normal.exp0 -l chi_sim batch.nochop makebox
box檔案和對應的tif一定要在相同的目錄下,不然後面打不開。
3、開啟jTessBoxEditor矯正錯誤並訓練
開啟train.bat
用jTessBoxEditor.jar開啟tif檔案,然後根據實際情況修改box檔案
找到tif圖,開啟,並校正。
4、訓練,產生.tr檔案。
只要在命令列輸入命令即可。
tesseract myfontlab.normal.exp07.jpg myfontlab.normal.exp07 nobatch box.train
產生一個unicharset檔案
unicharset_extractor myfontlab.normal.exp07.box
在這我明明已經矯正好了,但是還是有1個字元不能識別出來,報的錯跟實際上完全沒有相關性,不知道是不是bug,到後面的結果就是“一”字沒有識別出來。
5,建立一個font_properties檔案
裡面內容寫入 normal 0 0 0 0 0 表示預設普通字型
運行命令
shapeclustering -F font_properties.txt -U unicharset myfontlab.normal.exp07.tr
mftraining -F font_properties.txt -U unicharset -O unicharset myfontlab.normal.exp07.tr
cntraining myfontlab.normal.exp07.tr
目錄下會產生對應下列五個檔案,在這五個檔案前加上normal.進行重新命名
6 執行 combine_tessdata normal.
合并五個檔案,此時目錄下的normal.traineddata 就是訓練好的字型檔檔案
combine_tessdata normal.
得到訓練好的字型檔如下:
六 測試字型檔1,把normal.traineddata 複製到Tesseract-OCRt程式目錄下的“tessdata”目錄,2,在Tesseract-OCRt程式目錄下執行
tesseract.exe myfontlab.normal.exp07.jpg out –l normal
下面檔案中會儲存你識別到的資料;
這個其實網上資料很多,但大都描述的不夠詳細和完整,這裡我一步一步把使用tesseract-ocr 訓練字型檔的方法和步驟進行了描述,親測是沒有問題。
七,如何通過jTessBoxEditor進行Tesseract3.02.02樣本訓練
Tesseract產生.box檔案後,需要用到jTessBoxEditor工具對其進行糾正,以下是jTessBoxEditor的使用步驟。
1 載入要糾正的.tif檔案
box檔案的內容也同時會載入到jTessBoxEditor,如果這部分的內容為空白,則是沒有產生.box檔案的!如:
2 載入步驟如下:
此處借用的是網友的圖片,方便,如有侵權,請聯絡小編及時刪除。
3 矯本文字
當一個字被識別為兩個時,按住Ctrl鍵選中兩個,然後點擊Merge,即可進行合并!
進行矯正 主要就是座標 位置的調整,注意 添加需要選擇上一個文字才能分離
4.刪除空白的方法
有些空白處可能也會被jTessBoxEditor誤認為是字型,用藍色框框住,
這個可以直接選中,delete掉就好了!
5.總結
正常情況下是每個字型都會有藍色框框住,如果說有其中的兩個相鄰的字都沒有被框住,這時候即使採用insert後加上藍色框,但是最後識別還是有問題,這個不懂是不是我操作不對! 最後發現原來是兩個字型挨的太近的,導致區別不開了,在老大的建議下,把兩個字的距離隔開點來,就可以正常的框出來了!(如果有更好的方法,請指出,謝謝)
修改完成後儲存即可!這裡我是一張張樣本圖片進行修改的,但是我這樣做每張都有做同樣的糾正,不知道有沒有批量修改的方法呢?
在對圖片進行訓練之前,最好先用Opencv進行下處理,比如說二值化,這樣就可以去掉一些幹擾!但是要注意的是在識別之前同樣的也對圖片先進行相同效果的處理!這樣的識別率會有所提高!
八 軟體佈建字型的方法 在setting>font 設定中文字型