Tesseract-OCR的簡單使用與訓練
最近看到某個網站提交數據要提交驗證碼,用tesseract自帶的識別,

識別出來是什么鬼,0-9識別成了什么玩意!

so決定自己訓練下tesseract...
1.准備工作(安裝工具環境)
1.下載安裝tesseract-ocr-setup-3.02.02.exe安裝包 http://www.pc0359.cn/downinfo/55218.html
2.安裝jTessBoxEditor
下載jTessBoxEditor,地址https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/;解壓后得到jTessBoxEditor,由於這是由Java開發的,所以我們應該確保在運行jTessBoxEditor前先安裝JRE(Java Runtime Environment,Java運行環境)。
3.安裝Java環境:http://mydown.yesky.com/pcsoft/33490441.html
2.准備訓練圖片,可以多張圖片,我們可以用畫圖工具繪制樣本文件,數量越多越好
准備圖片如下

3.Merge樣本文件
打開jTessBoxEditor,ctrl+m 選擇所有樣本圖片,並將合並文件保存為 bm.font.exp0.tif

4.生成BOX文件
打開命令行並切換至bm.font.exp0.tif所在目錄,

輸入如下命令,生成文件名為bm.font.exp0.box
tesseract bm.font.exp0.tif bm.font.exp0 batch.nochop makebox
此時文件夾下會多出一個bm.font.exp0.box文件
5.定義字符配置文件
在目標文件夾內生成一個名為font_properties的文本文件,內容為
font 0 0 0 0 0
【語法】:<fontname> <italic> <bold> <fixed> <serif> <fraktur>
fontname為字體名稱,italic為斜體,bold為黑體字,fixed為默認字體,serif為襯線字體,fraktur德文黑字體,1和0代表有和無,精細區分時可使用,如果是txt文件記得把.txt后綴去掉。

6.字符矯正
打開jTessBoxEditor,BOX Editor -> Open,打開bm.font.exp0.tif;

7.生成字符特征文件
tesseract.exe bm.font.exp0.tif bm.font.exp0 nobatch box.train

這一步將生成兩個文件,bm.font.exp0.tr(特征文件)和bm.font.exp0.txt文件
8.計算字符集(unicharset)
unicharset_extractor.exe bm.font.exp0.box

這一步產生字符集文件unicharset
9.聚集字符特征(inttemp、pffmtable、normproto)
mftraining -F font_properties -U unicharset -O bm.unicharset bm.font.exp0.tr

根據上一步產生的字符集文件unicharset,來生成當前新語言的字符集文件mfunicharset。同時還會產生圖形原型文件inttemp和每個字符所對應的字符特征數文件pffmtable。附帶還會產生Microfeat文件,但是這個文件沒啥用。
10.接下來產生字符形狀正常化特征文件normproto
cntraining.exe bm.font.exp0.tr
11.重命名打包文件
將如下四個文件加上bm.前綴
normproto bm.normproto inttemp bm.inttemp pffmtable bm.pffmtable shapetable bm.shapetable

12.合並訓練文件(*.traineddata)
combine_tessdata.exe bm.

生成bm.traineddata文件,

將這個文件復制到Tesseract-OCR\tessdata文件夾下然后用訓練過的字庫在識別下
tesseract beiming.png output_2 -l bm

識別完全正確,細心的人會發現,最后一句指令,我們使用了指令[-l bm]而不是[-l eng]。這說明,最后一次轉換我們使用的是新生成的bm語言的匹配庫而不是默認的eng語言匹配庫
python pytesseract使用
import pytesseract
from PIL import Image
# pytesseract.pytesseract.tesseract_cmd='D:\Program Files\python\Tesseract-OCR\\tesseract.exe'
def getyzm():
image1 = Image.open('yzm.jpg')
w,h = image1.size
#創建新圖片
image2 = Image.new("RGB",(w+10,h+6),(255,255,255))
#兩張圖片相加: 我這里的圖片不是標准的圖片格式所以需要蓋在新圖片上
image2.paste(image1,(5,3))
# image2.save("yzm.png")
result = pytesseract.image_to_string(image2,lang="num")
return result
print(getyzm())
