這是我轉載保存學習用的
上篇文章簡單的學習了tesseract-ocr識別圖片中的英文(鏈接地址如下:https://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的地址:https://digi.bib.uni-mannheim.de/tesseract/
下載Tesseract-ocr包的地址:https://github.com/tesseract-ocr/tesseract/wiki/Data-Files
下載Tesseract的Git地址:https://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,使用中文字庫訓練,程序如下:
1
2
3
4
5
6
7
8
9
10
11
12
import pytesseract
from?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即可
更改圖片名字,這個是有要求的
1
2
3
4
5
6
7
tif文面命名格式[lang].[fontname].exp[num].tif
lang是語言?????????? fontname是字體
比如我們要訓練自定義字庫myfontlab????? 字體名normal
那么我們把圖片文件重命名 myfontlab.normal.exp0.jpg在轉tif。
2、生成box文件
1tesseract 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文件。
只要在命令行輸入命令即可。
1tesseract? myfontlab.normal.exp07.jpg? myfontlab.normal.exp07? nobatch box.train
? 生成一個unicharset文件
1unicharset_extractor myfontlab.normal.exp07.box
在這我明明已經矯正好了,但是還是有1個字符不能識別出來,報的錯跟實際上完全沒有相關性,不知道是不是bug,到后面的結果就是“一”字沒有識別出來。
5,新建一個font_properties文件
1里面內容寫入 normal 0 0 0 0 0 表示默認普通字體
運行命令
1shapeclustering -F font_properties.txt -U unicharset myfontlab.normal.exp07.tr
1mftraining -F font_properties.txt -U unicharset -O unicharset myfontlab.normal.exp07.tr
1cntraining myfontlab.normal.exp07.tr
? 目錄下會生成對應下列五個文件,在這五個文件前加上normal.進行重命名
6 執行 combine_tessdata normal. ?
合并五個文件,此時目錄下的normal.traineddata 就是訓練好的字庫文件
1combine_tessdata normal.
得到訓練好的字庫如下:
六? 測試字庫
1,把normal.traineddata ?復制到Tesseract-OCRt程序目錄下的“tessdata”目錄,
2,在Tesseract-OCRt程序目錄下執行?
1tesseract.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 設置中文字體
不經一番徹骨寒 怎得梅花撲鼻香