附源码,90%验证码识别成功率,Python调用虹鱼图灵识别插件
off999 2024-10-23 12:52 94 浏览 0 评论
作者:打字的小强
识别验证码一直是本人想要做的事情,一直在接触按键精灵,了解到有一个虹鱼图灵识别插件专门做验证码和图像识别,原理就是图片处理和制作字库识别,制作字库我一直觉得很麻烦,工程量太大。不管怎样,它能够达到我的目的,并且比机器学习,opencv是要简单点,那我就讲讲这个虹鱼图灵识别插件。
先亮一下成果勾引,嘿嘿
私信小编001即可获取大量python学习资料!
一.收集验证码图片。
就找一个最常见的蓝奏云的下载输入的验证码。fiddler抓一下,说一下这个验证码特征,都是数字,1-4个数字,没有旋转,没有在一行,有干扰直线,有干扰点。
找到链接了,接下来写代码,这个验证码图片接口,没有任何反爬。新建一个save_img.py,新建两个文件夹,一个做字库,一个做验证集。一个100张。先爬两百张图片。
import requests
urls = "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 TURING
import easygui
import 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 TURING
import easygui
def 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_data
suc = 0
for i in range(100):
res = identifys(i)
if res:
#统计正确的数量
suc =suc+1
print(suc)最后总结:
弄完了贼有成就感,这种验证码还是有很多地方在用的,PHP框架里面好多项目都用这种验证码,最主要还是要了解图像处理的原理才会融会贯通,要继续学习继续努力,验证码越来越难了。
这还是一个简单的测试版本,验证了100个图片正确了91个,有的人眼分的不是很清楚,已经很可以了如果还想提高准确度,可以再加一些字库,或者更换图片处理方式,或者修改人眼识别库的错误等等。感谢大家的欣赏,有帮助给个免费转发哦,或者多多关注我,才是我继续下去的动力,哈哈
相关推荐
- 华硕官网客服电话(华硕官网400客服电话)
-
华硕维修中心官网,http://www.asus.com.cn/support/你可以通过电话,邮件等方式联系华硕的售后客户,提供你的主板序列号,他会告诉你的。华硕ROG真享服务包是一项专门针对购买华...
- win11如何进入安全模式(win11如何进入安全模式启动)
-
进入Win11安全模式有多种方法,下面介绍两种常用的方法:方法一:使用系统配置工具1.使用组合键Win+R打开“运行”对话框,输入“msconfig”并按Enter键。2.在“系统配...
- 网易邮箱163登录界面(网易163邮箱登陆界面)
-
163邮箱登录首页入口为http://mail.163.com/网易163免费邮箱--中文邮箱第一品牌.容量自动翻倍,支持50兆附件,免费开通手机号码邮箱赠送3G超大附件服务.支持各种客户端软件收发,...
- win10激活注意事项(win10激活过程要多久)
-
1.是:KMS激活、数字许可证激活、产品密钥激活。2.KMS激活是通过KeyManagementService服务器来激活系统,它需要连接到企业内部的KMS服务器进行激活,适用于企业用户。数字...
- 华硕官网正品查询(华硕官网防伪查询)
-
登陆网站www.asus.com.cn进入网站,点击防伪查询,输入16位防伪数码,即可辨别真伪。华硕显卡sn码官网查1.打开浏览器进入华硕官方网站。2.在页面下方找到“华硕产品服务政策”类目,点击进入...
- 数据网络打开了连不上网怎么回事
-
1、如您无法上网请尝试关机开机重启;请检查是否已达本月流量封顶阀值;请检查手机设置移动数据是否已打开;手机设置流动数据选项APN及名称是否设置为3gnet。2、如仍无法上网,建议您可通过以下方式进行排...
- synopsys软件(synthia软件)
-
PSIM是趋向于电力电子领域以及电机控制领域的仿真应用包软件。PSIM具有仿真高速、用户界面友好、波形解析等功能,为电力电子电路的解析、控制系统设计、电机驱动研究等有效提供强有力的仿真环境。本...
- cmd定时关机命令设置时间(cmd定时关机怎么设置)
-
在WindowsXP下打开C盘,在Windows下选system32中有一个shutdown的程序,可以复制到其它系统中。“开始”--->运行--->(在输入shutdown的命令)...
- 笔记本电脑开机就蓝屏(笔记本电脑开机就蓝屏了)
-
USB: 假如计算机处于开机的状态时USB接口上有U盘等存储设备,那么计算机就很有可能出现蓝屏现象,而且无法正常开机。因此,当计算机在开机时出现蓝屏状态时,我们首先要检查一下USB接口是否有接入U...
- 重置无线路由器(重置无线路由器密码)
-
1、将网线—路由器—电脑之间的线路连接好,启动电脑和路由器设备;2、启动设备后,打开浏览器,在地址栏中输入192.168.1.1进入无线路由器设置界面。(如进不了请翻看路由器底部铭牌或者是路由器使用说...
- win7系统整个界面变大(win7系统整个界面变大怎么办)
-
解决方法:1、首先查看当前系统的桌面图标情况,发现桌面图标突然变成了超大号的了。非常难看。2、右键点击桌面空白处,分别选择“查看”,“中等图标”。3、现在再查看桌面图标,发现已经恢复了。4、还有一种方...
- 电脑设置一切正常就是没声音
-
在电脑重置后没有声音的情况下,可能有以下几种可能的原因和解决方法:1.音频驱动程序问题:电脑重置后,可能需要重新安装或更新音频驱动程序。你可以尝试重新安装声卡驱动程序,可以从电脑或声卡制造商的官方网...
- eset nod32官网(esetnod32官网)
-
从系统性能上来说,卡巴斯基对系统的影响略大于ESETNOD32。具体表现就是,系统反应有所变慢,硬盘读写变频繁。从防护角度上来说的话……卡巴斯基的防护组件很多(商业版,免费版不在考虑范围之内),全开...
- 如何安装ie浏览器(怎么安装ie浏览器 win10)
-
方法一:一般系统自带的IE不能卸载和自己安装,如果是系统自带的可以还原系统或重装,也可用软件覆盖安装IE试试。使用系统自带的系统还原的方法:系统自带的系统还原:“开始”/“程序”/“附件”/“系统工具...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
