3种实现方案
 
1. 编码实现 tesseract-ocr
  谷歌开源的识别工具,自己实现代码编码,投入精力大,回馈低。且平台验证码更换周期短,编好的代码容易失效

2. 在线打码
  在线平台提供,识别率90%以上
  http://www.yunzhuan.com/

3. 人工打码
  效率低,准确率高
 
这里主要实现第二种,贴上代码
# 在与代码同一个目录下创建一个Images文件夹,放一些测试验证码图片,我们就可以测试了
import json
import requests


class YDMHttp(object):
    apiurl = \'http://api.yundama.com/api.php\'
    username = \'\'
    password = \'\'
    appid = \'\'
    appkey = \'\'

    def __init__(self, username, password, appid, appkey):
        self.username = username
        self.password = password
        self.appid = str(appid)
        self.appkey = appkey

    def balance(self):
        data = {\'method\': \'balance\', \'username\': self.username, \'password\': self.password, \'appid\': self.appid, \'appkey\': self.appkey}
        response_data = requests.post(self.apiurl, data=data)
        ret_data = json.loads(response_data.text)
        if ret_data["ret"] == 0:
            print("获取剩余积分", ret_data["balance"])
            return ret_data["balance"]
        else:
            return None

    def login(self):
        data = {\'method\': \'login\', \'username\': self.username, \'password\': self.password, \'appid\': self.appid, \'appkey\': self.appkey}
        response_data = requests.post(self.apiurl, data=data)
        ret_data = json.loads(response_data.text)
        if ret_data["ret"] == 0:
            print("登录成功", ret_data["uid"])
            return ret_data["uid"]
        else:
            return None

    def decode(self, filename, codetype, timeout):
        data = {\'method\': \'upload\', \'username\': self.username, \'password\': self.password, \'appid\': self.appid, \'appkey\': self.appkey, \'codetype\': str(codetype), \'timeout\': str(timeout)}
        files = {\'file\': open(filename, \'rb\')}
        response_data = requests.post(self.apiurl, files=files, data=data)
        ret_data = json.loads(response_data.text)
        if ret_data["ret"] == 0:
            print("识别成功", ret_data["text"])
            return ret_data["text"]
        else:
            return None


def ydm(file_path):
    username = \'da_ge_da1\'
    # 密码
    password = \'da_ge_da\'
    # 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!
    appid = 3129
    # 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!
    appkey = \'40d5ad41c047179fc797631e3b9c3025\'
    # 图片文件
    filename = \'image/captcha.jpg\'
    # 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
    codetype = 5000
    # 超时时间,秒
    timeout = 60
    # 检查
    yundama = YDMHttp(username, password, appid, appkey)
    
    if username == \'username\':
        print(\'请设置好相关参数再测试\')
    else:
        # 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
        return yundama.decode(file_path, codetype, timeout)


if __name__ == "__main__":
    # 用户名
    username = \'da_ge_da1\'
    # 密码
    password = \'da_ge_da\'
    # 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!
    appid = 3129
    # 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!
    appkey = \'40d5ad41c047179fc797631e3b9c3025\'
    # 图片文件
    filename = \'image/captcha.jpg\'
    # 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
    codetype = 5000
    # 超时时间,秒
    timeout = 60
    # 检查
    if (username == \'username\'):
        print (\'请设置好相关参数再测试\')
    else:
        # 初始化
        yundama = YDMHttp(username, password, appid, appkey)

        # 登陆云打码
        uid = yundama.login();
        print(\'uid: %s\' % uid)

        # 登陆云打码
        uid = yundama.login();
        print (\'uid: %s\' % uid)

        # 查询余额
        balance = yundama.balance();
        print (\'balance: %s\' % balance)

        # 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
        text = yundama.decode(filename, codetype, timeout);

 

版权声明:本文为cq146637原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/cq146637/p/9072788.html