识别验证码一直是本人想要做的事情,一直在接触按键精灵,了解到有一个虹鱼图灵识别插件专门做验证码和图像识别,原理就是图片处理和制作字库识别,制作字库我一直觉得很麻烦,工程量太大。不管怎样,它能用能达到我的目的,并且比机器学习,opencv是要简单点,那我就讲讲这个虹鱼图灵识别插件。

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789

先亮一下成果勾引,嘿嘿

一.收集验证码图片。
就找一个最常见的蓝奏云的下载输入的验证码。fiddler抓一下,说一下这个验证码特征,都是数字,1-4个数字,没有旋转,没有在一行,有干扰直线,有干扰点。
 

找到链接了,接下来写代码,这个验证码图片接口,没有任何反爬。新建一个save_img.py,新建两个文件夹,一个做字库,一个做验证集。一个100张。先爬两百张图片。

import requestsurls = "https://vip.d0.baidupan.com/file/imagecode.php" for i in range(100):    datas = requests.get(urls)    with open('./verify/'+str(i)+'.png', 'wb') as file:        file.write(datas.content)

二.处理图片,制作字库
预先说明,虹鱼图灵识别插件跟大漠一样,只能用32位的python调用,建议用conda新建python3.7 32位的python虚拟环境,cmd进入环境安装相关包,不要在pycharm安装。
虹鱼图灵识别插件需要事先注册到系统,下载图灵2.82(Python公开版),里面有安装教程,本人测试的系统为win10。

import TURINGimport easyguiimport cv2 def identi(names):    img_data = "./pic/"+str(names)+".png"    TURING.Pixel_FromPicture(img_data)    im = cv2.imread(img_data)     #切割图片,保留有效的图片    im = im[0:30, 0:99]    TURING.Filter_Tailor(0,0,99,30)     #色调分离,将整个图片的颜色分为几种。下面的函数将图片分成四种颜色分别为:0,85,170,255。将每一个点的rgb平均值放到四个区间对比。这四个区间为:0-64,64-128,128-192,192-255。落在每个区间就会固定一个颜色值,方便后面的图像处理    TURING.Filter_Posterization(4)     #二值化,其中的参数是色阶阈值,色阶阈值:一个点分为rgb三个值,三个值的平均值为阈值。该函数的作用就是遍历图像的每一个点的rgb平均值改变点的颜色,大于阈值为白色。小于阈值为黑色,现在设置阈值为95,处理后就会变成黑白色的图片了。    TURING.Filter_Binaryzation("95")      #去除杂点,现在是白底黑字,每个像素点周围一共8个点。周围大于8个白点是就由白变黑 ,作用就是去除孤立的颜色点    TURING.Filter_Despeckle(8,0,0)     #颜色反转 转前白底黑字 转后黑底白字,只有黑底白字才能进行字符切割。    TURING.Filter_InverseColor()      #范围投影字符切割,最重要的一步,非常难解释。为插件作者独创的算法,简单的说一下大概的内容,如有人想仔细了解可以问作者哈哈。作用就是找到切割验证码的字符,识别有几个字符,字符的范围和位置    #现在是黑底白字的图片,以每一个白点为一个字符范围起始点。字符范围为一个矩形,需要一个终点才能圈成一个矩形,从上往下从左往右遍历找终点,第一步就是识别这个白点的右下角的颜色如果也是白色,终点往下移动,(高度+1),如果是黑色,终点就要往右下角移动(高+1,宽+1),直到遇到图片的边缘或者超过设置的间隙。    #这时候要注意一个字可能会被切成两个部分,就要设置行间隙和列间隙。下面根据实际情况设置最小的行间隙和列间隙就是8,字符之间的间隔最少为8个像素,还可以设置其他的参数,比如矩形框的宽高范围,不在范围的框框抛弃    TURING.Incise_ScopeAisle(8,8)     #获取切割后的数据,返回值是字符串比较长,每个框的数据以竖杠分割,其中一个框的数据有四个,分别是左上角的左边,宽高,图色数据以逗号分割,拿两个点的数据给大家看看    #8, 13, 8, 10, 00111111000111110110110001000110001000011000100000110011001101100111100000001100 | 30, 11, 8, 10, 00110000000011000110100001001110000100011000000001110010001101011011100001101100    datas = TURING.Incise_GetCharData()     # add_num这是要在opencv画框的边缘扩充参数,下面会用插件的捕获到框框数据绘制大一点的框框来制作字库,好看一点    add_num = 3     if len(datas)>0:        datas_list = datas.split("|")        for j in datas_list:            data_lists = j.split(",")            x1 =int(data_lists[0])-add_num  #左上角的x坐标            y1 = int(data_lists[1])-add_num  #左上角y坐标            x2 = int(data_lists[0]) +int(data_lists[2])+add_num  #框的宽            y2 = int(data_lists[1])+int(data_lists[3])+add_num  #框的高            cv2.rectangle(im,(int(x1),int(y1)),(int(x2),int(y2)),(255,0,255),1)  #绘制框框        im = cv2.resize(im, None, fx=2.5, fy=2.5, interpolation=cv2.INTER_CUBIC)  # 图太小了,需要宽高各乘以2.5来看下这个图以便人工识别这个图的数字是多少        cv2.imshow("draw_0", im)        cv2.moveWindow("draw_0", 800, 300)  # 移动显示图片的窗口,因为默认的位置遮挡了下面的输入弹窗        #统计识别的字符个数        data_len = len(datas_list)                 #弹窗显示原始验证码,显示验证码的个数,输入框人工输入数字        input_data = easygui.enterbox(msg="请输入" + str(data_len) + "个字符添加进入字库:", title=' ', default=' ', strip=True,                                      image=img_data, root=None)         for k in range(data_len):            # 组装字库的内容            data_lists = datas_list[k].split(",")            #制作字库            insert_data = input_data[k] + "|" + data_lists[2] + "," + data_lists[3] + "|" + data_lists[4]            #添加字库数据进入字库文件            print("插入数据:"+input_data[k] + "|" + data_lists[2] + "," + data_lists[3] + "|" + data_lists[4]  )            with open("识别库1.lib", 'a+') as f:                f.write(insert_data + "\n")        #关闭所有opencv创建的窗口        cv2.destroyAllWindows()    else:         return #遍历所有的验证码for i in range(100):    identi(i)

三.来验证,算一下正确率

import TURINGimport easyguidef identifys(names):    #打开图片,同样的处理图片    TURING.Pixel_FromPicture("./verify/" + str(names) + ".png")    TURING.Filter_Tailor(0, 0, 99, 30)    TURING.Filter_Posterization(4)    TURING.Filter_Binaryzation("95")    TURING.Filter_Despeckle(8, 0, 0)    # 颜色反转 ()转后黑底白字,转前白底黑字    TURING.Filter_InverseColor()    TURING.Incise_ScopeAisle(8, 8)    TURING.Lib_Load("识别库1.lib")  #加载识别字库    识别结果 =TURING.OCR(0, 1)  #获取识别结果,可以设置结果格式,可以显示相似度,和x,y坐标等等。是一个字符串,以|分割,    result =识别结果.split("|")[0]    #来个弹框来肉眼证明结果的准确性    choices_data = easygui.ccbox(msg='识别结果是'+result, title=' ', choices=('True', 'false'), image="./verify/" + str(names) + ".png")    return choices_datasuc = 0for i in range(100):    res = identifys(i)    if res:        #统计正确的数量        suc =suc+1print(suc)

运行的效果就是本贴第一个图

GitHub链接:https://github.com/koala9527/lanzouyun_Code

最后总结:

弄完了贼有成就感,这种验证码还是有很多地方在用的,PHP框架里面好多项目都用这种验证码,最主要还是要了解图像处理的原理才会融会贯通,要继续学习继续努力,验证码越来越难了。
这还是一个简单的测试版本,验证了100个图片正确了91个,有的人眼分的不是很清楚,已经很可以了如果还想提高准确度,可以再加一些字库,或者更换图片处理方式,或者修改人眼识别库的错误等等。感谢大家的欣赏,多多关注评论点击在看,才是我继续下去的动力,哈哈

蓝奏云数值验证码识别,python调用虹鱼图灵识别插件,超高正确率相关推荐

  1. 验证码识别的原理python_蓝奏云数值验证码识别,python调用虹鱼图灵识别插件,超高正确率...

    本帖最后由 打字的小强 于 2020-6-5 13:11 编辑 识别验证码一直是本人想要做的事情,一直在接触按键精灵,了解到有一个虹鱼图灵识别插件专门做验证码和图像识别,原理就是图片处理和制作字库识别 ...

  2. 附源码,90%验证码识别成功率,Python调用虹鱼图灵识别插件

    识别验证码一直是本人想要做的事情,一直在接触按键精灵,了解到有一个虹鱼图灵识别插件专门做验证码和图像识别,原理就是图片处理和制作字库识别,制作字库我一直觉得很麻烦,工程量太大.不管怎样,它能够达到我的 ...

  3. 最新!使用Python爬取蓝奏云文件下载直链并下载,支持批量爬取,已封装为函数,可直接使用(含注释、库的使用解释)

    程序说明 本程序不借助第三方网站来获取蓝奏云直链,那样没意思,且程序流程已经过分块化处理(多函数),方便理解和阅读.程序使用了requests.re.lxml库,来请求.解析数据.具有一定学习价值,对 ...

  4. 无限存储空间的蓝奏网盘你还不用?使用Python,直接获取直链!Python使用Requests和BS4实现蓝奏云直链解析与下载

    在很多时候,都会使用到程序自主更新功能,那么今天我们就用蓝奏云实现一个Python程序的自主更新(当然,只是完成请求蓝奏云的直链地址) 文章目录 重要通知 重要通知1 重要通知2 思路解析 代码实现 ...

  5. python常胜将军问题_蓝奏云盘pc版(lanzou-gui)更新0.3.3

    本帖最后由 丶遗忘_ 于 2020-7-26 16:55 编辑 搜了一下论坛里没看到有发布更新. 蓝奏云PC客户端是一款免费开源专业的第三方蓝奏网盘电脑版,蓝奏云客户端开源在Github,提供源代码文 ...

  6. Python爬取蓝奏云直链(获取真实文件地址)

    最近在用蓝奏云,这款云盘无限速并且操作分享简单,自认为挺好的一个云盘,所以研究了如何通过蓝奏云分享链接获取文件最终地址.你可能问爬取直链有什么用,我说一下我的需求,我的服务器学生机带宽是1m,很小.我 ...

  7. 使用Python下载蓝奏云文件

    蓝奏云下载 2022年04月21日编写 # -*- coding: utf-8 -*-## Python3 ## 下载蓝奏云文件 ## 参考链接:https://blog.csdn.net/qq_45 ...

  8. php调用蓝奏云下载接口

    支持检测文件是否被取消 支持带密码的文件分享链接但不支持分享的文件夹 支持生成直链或直接下载 增加ios应用在线安装 使用方法: url:蓝奏云外链链接 type:是否直接下载 值:down pwd: ...

  9. 利用腾讯云函数做蓝奏云解析API

    利用腾讯云函数做蓝奏云解析API 前言 忽然在网上看到网友说tenapi的蓝奏云解析不能用了,恰巧又在B站上看到某up主的相关文章,一时起意就用up主的代码稍加更改,改造了个能在腾讯云函数跑起来的版本 ...

最新文章

  1. Nature年度十大杰出论文公布:机器狗算法、近室温超导等入选,复旦中科院上榜...
  2. thinkphp-add方法错误
  3. error PRJ0003 : 生成“cl.exe”时出错 解决方案
  4. layui怎样将响应数据展示在页面_layui怎么对弹出层显示数据
  5. 十四、Hadoop学习笔记————Zookeeper概述与基本概念
  6. 聊聊对账系统的设计方案
  7. 在SQL server中查找特定类别的列
  8. 渗透测试——CFS三层靶机渗透
  9. mysql拼接字符串的方式_mysql 字符串拼接,你知道几种方式?
  10. IDEA轻松实现.class文件反编译(超实用)
  11. MySQL中文乱码解决方案
  12. parted如何将磁盘所有空间格式化_磁盘-使用parted格式化大容量数据盘
  13. 阿里云ECS服务器使用限制及不允许做的事情
  14. 蓝屏信息0x0000000A、 0x00000050、 0x0000001A错误分析
  15. 让自己的app支持小程序
  16. swoft2 小白教程系列-进程篇
  17. web漏洞-远端WWW服务支持TRACE请求
  18. python-pyecharts 数据分析原来可以这么炫酷
  19. Android Crash signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr b56cb106
  20. NodeMCU检测Flash按键实现长按触发(用于进入设计好的配置模式)(C++开发)

热门文章

  1. python-练习-查找匹配-模拟数据库的查找-小例子
  2. 动态规划入门之国王的金矿
  3. 全面战争:战锤II-概念艺术设计
  4. 在细节消息中包含能够捕获失败的信息(63)
  5. Django 优秀资源大全项目资源非 Python 包工具贡献
  6. 12月29日课程笔记 磁盘格式化与挂载与手动增加swap空间
  7. 【待解决】使用JUnit时报错java.lang
  8. 面向对象要点(构造函数)
  9. 奥林匹克公园的《老北京四重奏》
  10. Visual Studio 2012 和.NET Framework 4.5 快速开始的5分钟视频