使用python內置庫pytesseract實現圖片驗證碼的識別


環境准備:

1、安裝Tesseract模塊

     git文檔地址:https://digi.bib.uni-mannheim.de/tesseract/    

     下載后就是一個exe安裝包,直接右擊安裝即可,安裝完成之后,配置一下環境變量,編輯 系統變量里面 path,添加下面的安裝路徑:

2、如果您想使用其他語言,請下載相應的培訓數據,(我們只做中文,暫時下載一個中文的文字訓練數據就可以) ,然后將.traineddata文件復制到'tessdata'目錄中。C:\Program Files (x86)\Tesseract-OCR\tessdata

 

3、配置環境變量:    

  編輯 系統變量里面 path,添加下面的安裝路徑:C:\Program Files (x86)\Tesseract-OCR  

  cmd命令模式下測試是否安裝成功:
  tesseract test.jpg text -l chi_sim

4、安裝python的第三方庫:  

  pip install pillow #一個python的圖像處理庫,pytesseract依賴
  pip install pytesseract

5、找到pytesseract的安裝包,C:\Python34\Lib\site-packages\pytesseract,編輯pytesseract.py文件(此步驟必須做,否則運行代碼時會報錯):

  tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract.exe'

代碼實例:  

簡單驗證碼代碼:
  
 1 import requests
 2 from PIL import Image
 3 import pytesseract
 4 
 5 '''
 6 簡單驗證碼
 7 '''
 8 # 驗證碼地址
 9 url = "https://www.renrendai.com/passport/index/captcha?time=1551682134111"
10 response = requests.get(url).content
11 
12 #將圖片寫入文件
13 with open('yzm.png','wb') as f:
14     f.write(response)
15 f.close()
16 
17 '''識別驗證碼'''
18 #第一步:通過內置模塊PIL打開文件
19 pic = Image.open('yzm.png')
20 #第二步:識別圖片中的內容
21 pic_str = pytesseract.image_to_string(pic)
22 print("驗證碼識別結果為:",pic_str)

 

百度文庫圖片文檔的識別:
 1 #下載圖片
 2 baidu_url = "https://wkretype.bdimg.com/retype/zoom/4127ed79a26925c52cc5bf99?pn=2&o=jpg_6&md5sum=9cdc209bc34a40ed774f7e14c0be59c4&sign=5dbcb28bf1&png=11238-22475&jpg=41808-117940"
 3 baidu_pic = requests.get(baidu_url).content
 4 
 5 #圖片寫入文件
 6 with open('baidu_pic.jpg','wb') as f:
 7     f.write(baidu_pic)
 8 f.close()
 9 
10 #識別驗證碼
11 baidu_img = Image.open('baidu_pic.jpg')
12 baidu_img_str = pytesseract.image_to_string(baidu_img,lang="chi_sim")
13 print('百度文庫圖片內容為:',baidu_img_str)
復雜的驗證碼,直接識別不了,可以使用超級鷹的第三方接口,如有需要,自己進行賬號的注冊,這里直接貼代碼嘍:
 1 from chaojiying import Chaojiying
 2 
 3 chaojiying_url= "http://www.chaojiying.com/include/code/code.php?u=1"
 4 response = requests.get(chaojiying_url).content
 5 
 6 with open('rryz.png','wb') as f:
 7     f.write(response)
 8 f.close()
 9 
10 #讀取文件內容
11 with open('rryz.png','rb') as f:
12     pic1 = f.read()
13 
14 #調用第三方打碼平台接口識別驗證碼
15 yz = Chaojiying(username='*****', password='****', soft_id='****')
16 
17 res = yz.post_pic(pic1,codetype='1902').get('pic_str')  #1902 驗證碼類型
18 print('識別的結果:',res)
 
 

 

 

  

 

    

 


免責聲明!

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



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