zoukankan      html  css  js  c++  java
  • 验证码识别

    图象识别

    Python的强大,在于它有非常多的第三方库。对于验证码识别,Python也已经有了现成的库来供我们使用了。开源的OCR库pytesseract配合tesseract,可以用来将图片中的文字转化为文本。

    不过这种方式我们在爬虫中用的并不多。因为现在大部分的验证码都加上了干扰的纹理,已经很少能用单机版的图片识别方式来识别了。所以我们这里仅仅使用简单地图片来进行介绍。如果有一天你的运气足够好,遇到了非常工整的验证码,那么你可以使用这个办法来试一试。

    安装 tesseract

    (1) Windows

    请在这里下载安装包:https://github.com/tesseract-ocr/tesseract/wiki/Downloads

    在 3rd party Windows exe's/installer 下面可以找到 exe 安装包。

    (2) Mac

    使用 homebrew 安装:

    $ brew install tesseract
    (3) Linux

    使用 apt-get 安装:

    sudo apt-get install tesseract-orc

    更多的安装帮助信息,可以参阅:https://github.com/tesseract-ocr/tesseract/wiki

    安装 Python库

    要使用 tesseract 来做图像识别,我们还需要安装两个库:

    $ pip install Pillow
    $ pip install pytesseract

    tesseract的使用

    tesseract的使用非常简单,流程如下:

    • 导入相关的第三方库
    • 打开图片
    • 识别

    我们可以通过以下代码来实现最简单的图片识别:

    import pytesseract
    from PIL import Image
    image = Image.open('1234.png')
    code = pytesseract.image_to_string(image)
    print(code)

    如果需要进行操作请保存下面图片:

    测试结果如下:

    代码:

    import pytesseract
    from PIL import Image
    image = Image.open('1234.png')
    code = pytesseract.image_to_string(image)
    print(code)

     

    打码网站的介绍

    现在还有一种在线验证码识别的网站。他们雇佣了很多失业者和残疾人来人肉识别验证码,一般十个验证码一分钱左右。我们可以使用这种网站提供的接口来帮助我们识别验证码。这种方式理论上可以识别任何使用输入方式来验证的验证码。

    这种打码网站的流程一般是这样的:

    • 将验证码上传到网站服务器
    • 网站服务器将验证码分发给打码工人
    • 打码工人肉眼识别验证码并上传结果
    • 网站将结果返回给我们

    整个流程走完,在网速良好的白天一般在3-4秒钟,在晚上大概8-10秒钟。

    使用在线打码

    大家在百度或者谷歌上面搜索:“验证码在线识别”,就可以找到很多提供在线打码的网站。但是由于一般这种打码网站是需要交费才能使用的,所以请一定要注意财产安全!

    在这堂课里面,我使用一个叫做云打码的网站来进行测试。网站地址为:http://www.yundama.com/。注册账号以后,需要交费购买“题分”才能正常使用。大家充1元钱就可以了。千万别多充,因为这个网站看起来快要倒闭了,很多文档都没有更新,他们给出的API也有些问题。

    这个网站虽然提供了各种语言的SDK,但是版本都比较旧了,所以我推荐大家使用他的HTTP接口:http://www.yundama.com/download/YDMHttp.html

    这个页面上给出了上传的地址。大家不要去看它提供的“PythonHTTP调用示例”,因为这个示例有问题。

    经过我的研究,它的HTTP接口的正确使用步骤如下:

    我这里给出一个正确的使用方式的代码片段:

    captcha_username = 'slzcc' #打码网站用户名
    captcha_password = '1234567'  #打码网站密码
    captcha_appid = 1
    captcha_appkey = '22cc5376925e9387a23cf797cb9ba745'
    captcha_codetype = '1004'
    captcha_result_url = 'http://api.yundama.com/api.php?cid={}&method=result'
    filename = '1.png'
    timeout = 15
     
    data = {'method''upload''username': captcha_username, 'password': captcha_password, 'appid': captcha_appid, 'appkey': captcha_appkey, 'codetype': captcha_codetype, 'timeout''60'}
    = open(filename, 'rb')
    file = {'file': f}
    response = requests.post(captcha_url, data, files=file).text
    f.close()
    response_dict = json.loads(response)
    '''如果验证码比较简单,或者是白天,这里直接就可以拿到结果'''
    result = response_dict['text']
     
    '''如果验证码比较难以识别或者是深夜,需要等待网站的返回结果'''
    if not result:
      cid = response_dict['cid']
      while timeout > 0:
          response = requests.get(captcha_result_url.format(cid)).text
          response_dict = json.loads(response)
          print(response_dict, '——还剩:{}秒...'.format(timeout))
          captcha = response_dict['text']
          if response_dict['text']:
              print('验证码是: {}'.format(captcha))
              break
          time.sleep(1)
          timeout -= 1
     
  • 相关阅读:
    unp.h
    美拍视频下载
    动态加载ajax 腾讯视频评论
    已知二叉树的先序,中序遍历,求后续遍历

    JSP九大内置对象及四个作用域
    转换数据库连接池为hikaricp
    JSP Tomcat8.0运行连接池时发生异常【AbstractMethodError oracle.jdbc.driver.T4CConnection.isValid(I)Z】
    tomcat启动时出现There are no resources that can be added or removed from the server
    java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener问题解决
  • 原文地址:https://www.cnblogs.com/dalton/p/11353891.html
Copyright © 2011-2022 走看看