轉自:https://www.cnblogs.com/MrRead/p/7656800.html
1、驗證碼的識別是有針對性的,不同的系統、應用的驗證碼區別有大有小,只要處理好圖片,利用好pytesseract,一般的驗證碼都可以識別
2、我在識別驗證碼的路上走了很多彎路,重點應該放在怎么把圖片處理成這個樣子,方便pytesseract的識別,以提高成功率
3、原圖為:
思想過程:
①不要盲目的去直接用代碼識別,識別不出來就懷疑代碼有問題或者pytesseract不好用:
先將驗證碼用圖片處理工具處理,一步步得到理想圖片,記住處理過程,將處理后的圖片直接用pytesseract識別,代碼如下:
# -*- coding: UTF-8 -*-、 import Image import pytesseract im = Image.open('31.png') aa = pytesseract.image_to_string(out) print aa
②確定圖片可以識別后,開始用代碼復現你的圖片處理過程
# -*- coding: UTF-8 -*_ from PIL import Image from pytesseract import * import PIL.ImageOps def initTable(threshold=140): table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) return table im = Image.open('31.png') #圖片的處理過程 im = im.convert('L') binaryImage = im.point(initTable(), '1') im1 = binaryImage.convert('L') im2 = PIL.ImageOps.invert(im1) im3 = im2.convert('1') im4 = im3.convert('L') #將圖片中字符裁剪保留 box = (30,10,90,28) region = im4.crop(box) #將圖片字符放大 out = region.resize((120,38)) asd = pytesseract.image_to_string(out) print asd print (out.show())
先將圖片轉換為L模式
然后去噪
反轉顏色
將重要部分裁剪放大
輸出結果: