本來是學著使用tesserocr來識別驗證碼的,但是由於tesserocr的識別率不高,還是學了一下使用雲打碼來識別驗證碼== 具體步驟如下: 1、首先是註冊賬號,然後進入這個網址(http://www.yundama.com/apidoc/YDM_SDK.html)選擇PythonHTTP示例下載 ...
本來是學著使用tesserocr來識別驗證碼的,但是由於tesserocr的識別率不高,還是學了一下使用雲打碼來識別驗證碼==
具體步驟如下:
1、首先是註冊賬號,然後進入這個網址(http://www.yundama.com/apidoc/YDM_SDK.html)選擇PythonHTTP示例下載:
2、下載後解壓,可以看到有如下幾個文件,因為我使用的Python版本是3.5,所以打開YDMHTTPDemo3.x:
3、打開之後修改如下幾個部分,用戶名和密碼就是你的用戶名和密碼,而appid和appkey需要進入開發者後臺查看,第一次使用的時候還需要新建一個軟體,才能有appid和appkey:
下圖中的軟體代碼就是appid,通訊密鑰就是appkey:
4、把信息都添加進去後運行代碼,不出意外會返回一個1007,進入錯誤代碼及排錯(http://www.yundama.com/apidoc/YDM_ErrorCode.html)查找原因,原來是因為賬戶沒有餘額
然後進入用戶後臺充值就行了,充值完以後再次運行代碼,就可以看到識別結果了。
進行完如上步驟之後,我們就可以使用雲打碼平臺來識別驗證碼了,不過為了使用方便,可以建一個YDMDemo.py,把賬號密碼等信息寫進去,調用的時候只需要傳入驗證碼圖片就行了。
1 import json 2 import time 3 import requests 4 5 6 class YDMHttp: 7 apiurl = 'http://api.yundama.com/api.php' 8 username = '' 9 password = '' 10 appid = '' 11 appkey = '' 12 13 def __init__(self, username, password, appid, appkey): 14 self.username = username 15 self.password = password 16 self.appid = str(appid) 17 self.appkey = appkey 18 19 def request(self, fields, files=[]): 20 response = self.post_url(self.apiurl, fields, files) 21 response = json.loads(response) 22 return response 23 24 def balance(self): 25 data = {'method': 'balance', 'username': self.username, 'password': self.password, 'appid': self.appid, 26 'appkey': self.appkey} 27 response = self.request(data) 28 if response: 29 if response['ret'] and response['ret'] < 0: 30 return response['ret'] 31 else: 32 return response['balance'] 33 else: 34 return -9001 35 36 def login(self): 37 data = {'method': 'login', 'username': self.username, 'password': self.password, 'appid': self.appid, 38 'appkey': self.appkey} 39 response = self.request(data) 40 if response: 41 if response['ret'] and response['ret'] < 0: 42 return response['ret'] 43 else: 44 return response['uid'] 45 else: 46 return -9001 47 48 def upload(self, filename, codetype, timeout): 49 data = {'method': 'upload', 'username': self.username, 'password': self.password, 'appid': self.appid, 50 'appkey': self.appkey, 'codetype': str(codetype), 'timeout': str(timeout)} 51 file = {'file': filename} 52 response = self.request(data, file) 53 if response: 54 if response['ret'] and response['ret'] < 0: 55 return response['ret'] 56 else: 57 return response['cid'] 58 else: 59 return -9001 60 61 def result(self, cid): 62 data = {'method': 'result', 'username': self.username, 'password': self.password, 'appid': self.appid, 63 'appkey': self.appkey, 'cid': str(cid)} 64 response = self.request(data) 65 return response and response['text'] or '' 66 67 def decode(self, filename, codetype, timeout): 68 cid = self.upload(filename, codetype, timeout) 69 if cid > 0: 70 for i in range(0, timeout): 71 result = self.result(cid) 72 if result != '': 73 return cid, result 74 else: 75 time.sleep(1) 76 return -3003, '' 77 else: 78 return cid, '' 79 80 def report(self, cid): 81 data = {'method': 'report', 'username': self.username, 'password': self.password, 'appid': self.appid, 82 'appkey': self.appkey, 'cid': str(cid), 'flag': '0'} 83 response = self.request(data) 84 if response: 85 return response['ret'] 86 else: 87 return -9001 88 89 def post_url(self, url, fields, files=[]): 90 for key in files: 91 files[key] = open(files[key], 'rb') 92 res = requests.post(url, files=files, data=fields) 93 return res.text 94 95 96 def use_ydm(filename): 97 username = '' # 用戶名 98 password = '' # 密碼 99 app_id = 1 # 軟體ID 100 app_key = '' # 軟體密鑰 101 code_type = 1004 # 驗證碼類型 102 timeout = 60 # 超時時間,秒 103 yundama = YDMHttp(username, password, app_id, app_key) # 初始化 104 balance = yundama.balance() # 查詢餘額 105 print('您的題分餘額為{}'.format(balance)) 106 cid, result = yundama.decode(filename, code_type, timeout) # 開始識別 107 print('識別結果為{}'.format(result)) 108 return result