Tesseract-ocr視覺學習-驗證碼識別及python import pytesseract使用


  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())

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM