為什么要使用百度AI的:
百度AI這個我之前用到的是語音識別,想着肯定也有圖片識別成文字的,所以找了一下果然找了,而且可以免費使用一點。
注:調用的這個百度AI識別不是專門識別驗證碼圖片的(它可以識別圖片中的所有文字,包括空格),所以只能識別一些簡單的驗證碼,專業的使用超級鷹(收費)
使用到的場景:
(1) 最近再寫一個web自動化測試項目,在里面有一個selenium功能就是需要識別驗證碼。
(2) 在用爬蟲爬取登陸后的頁面內容時候,也需要識別驗證碼
百度AI找的地方:
支持識別的圖片格式:
# 僅jpg/png/bmp格式
使用如下代碼需要先申請一個AI的應用:
--------申請完需要修改代碼種這三個值------------
APP_ID = 'xxxxxxxx'
API_KEY = 'xxxxxxxx'
SECRET_KEY = 'xxxxxxxxxx'
--------申請完需要修改代碼種這三個值------------
安裝模塊 :
pip install baidu-aip
識別代碼如下:
# 不包含轉換圖片格式的寫法
from aip import AipOcr
def _get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() # 調用百度圖片識別 def baidu_discern(filename): """ 你的 APPID AK SK """ APP_ID = 'xxxxxxxx' API_KEY = 'xxxxxxxx' SECRET_KEY = 'xxxxxxxxxx' client = AipOcr(APP_ID, API_KEY, SECRET_KEY) image = _get_file_content(filename) """ 調用網絡圖片文字識別, 圖片參數為本地圖片 """ ret = client.webImage(image) words = ret.get('words_result') if words: return ''.join(words[0]['words'].split(' ')) else: return '' if __name__ == '__main__': ret = baidu_discern('../code.png') print(ret)
當圖片格式不是這三種格式時候,需要轉換圖片格式才能識別:
# 我用的是python3的pillow模塊進行圖片格式轉換
# python2是pil模塊
from PIL import Image from aip import AipOcr """ 讀取圖片 """ def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() def baidu_discern(filename): """ 你的 APPID AK SK """ APP_ID = 'xxxxxxx' API_KEY = 'xxxxxxxxx' SECRET_KEY = xxxxxxxxxx' client = AipOcr(APP_ID, API_KEY, SECRET_KEY) image = get_file_content(filename) """ 調用網絡圖片文字識別, 圖片參數為本地圖片 """ ret = client.webImage(image) words = ret.get('words_result') if words: return ''.join(words[0]['words'].split(' ')) def get_img_content(filename, format=False): if format: # 轉換圖片格式 new_filename = filename.split('.')[0] + '.png' Image.open(filename).save(new_filename) ret = baidu_discern(new_filename) else: ret = baidu_discern(filename) return ret if __name__ == '__main__': # 非轉換的 ret = get_img_content('../code.png', format=False) # 轉換的 ret = get_img_content('../code.png', format=True) print(ret)
使用效果:
# 以古詩文網的驗證碼為例
https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx
# 用selenium執行的話,使用的時候需要截圖下來