1. 程式人生 > >linux環境下pytesseract的安裝和央行征信中心的登錄驗證碼識別實戰

linux環境下pytesseract的安裝和央行征信中心的登錄驗證碼識別實戰

int tab 權限 linux a-z 都是 提示 解釋 text

首先是安裝,我參考的是這個 http://blog.csdn.net/xinghun_4/article/details/47860645

我是centos,使用yum

yum install python-devel libjpeg libjpeg-devel freetype freetype-devel zlib zlib-devel littlecms littlecms-devel libwebp libwebp-devel libfreetype libfreetype-devel giflib-devel automake libtool

tesseract安裝包我下載的是3.0.4,安裝的時候提示搭配的leptonica的版本必須是1.7.2以上,所以不能使用1.6.9的leptonica,這點要註意。

技術分享

上一些央行征信征信的驗證碼例子,這是截圖

技術分享

可以看到,字跡是相當的工整,但是直接使用image_to_string這個方法幾乎是不可能是別的,只有少數圖片可以轉換輸出文字。

需要做點處理,找規律可以發現這些噪點都是一些暗淡的像素點,可以把他們去掉(就是轉換成白色的)。

#!/root/miniconda3/envs/crcc/bin/python2.7
#coding=utf-8

import pytesseract
from PIL import Image
import re

threshold = 140
table = []

name=‘test‘
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)


def pic2text(name):
im=Image.open(name+‘.jpg‘)
imgry = im.convert(‘L‘) #灰化
out = imgry.point(table,‘1‘) #二值化
out.save(name+‘b.jpg‘)
# i = Image.open(name+‘b.jpg‘)
# i.show()
text= pytesseract.image_to_string(out)
print text
text2=re.sub(‘[^a-z0-9]‘,‘‘,text)
return text2


if __name__=="__main__":
print pic2text(‘pictures/150656820893‘)

技術分享

這是pycharmm調用的是遠程linux環境的截圖,如果要在linxu直接執行./do_yzm.py,那就需要在代碼第一行指明解釋器路徑,然後修改do_yzm.py的權限為可執行的權限.

實際識別率幾乎達到了95%,效果還可以。如果錯了再換個驗證碼登錄就可以了。

這是原圖技術分享

threshold這個值要設置合理,設置太大了,那些噪點全部變成黑色了。

技術分享

設置小了也不行,雖然噪點都去掉了,但會把字母也弄殘了。

技術分享

這樣就會識別不出來了。

這是設置140的結果技術分享



linux環境下pytesseract的安裝和央行征信中心的登錄驗證碼識別實戰