- 资源介绍
- 更新记录
- 安装教程
于2020/7/1-3日编写,仅供个人学习参考,请勿用于非法途径。
验证码识别去干扰线 去噪点
字符分割算法用了垂直投影取中间前后4点比较进行分割
[Python] 纯文本查看 复制代码# 需要用到的库
from itertools import groupby
from PIL import Image
import time
import requests
import re
首先下载验证码图片:
[Python] 纯文本查看 复制代码def down_img(i):
# code地址
codeurl = \’https://nuc.api.mgtv.com/v1/LoginCaptcha?\’
# code参数
codedata = {
\’_support\’:\’10000000\’,
\’deviceid\’:\’1e92894d-daac-497d-b4d9-25d41da0568e\’,
\’appVersion\’:\’pcweb-6.3.0.gray\’,
\’dname\’:\’\’,
\’src\’:\’intelmgtv\’,
\’invoker\’:\’pcweb\’,
\’username\’:\’@账号\’,
\’smscode\’:\’86\’,
\’t\’:\’@时间戳\’,
}
t = int(round(time.time() * 1000))
codedata[\’username\’] = \’这里随便输个账号\’
codedata[\’t\’] = t
coderes = requests.get(codeurl,params=codedata)
with open(str(i)+\’.png\’, \’wb\’) as file:
file.write(coderes.content)
file.close
这里用画图工具(去色工具)获取,也可以用其它图色处理工具
处理验证码图片:
观察验证码可以发现,干扰线为 FF0000 的红色
直接遍历图片像素把红色的点转换为白色,其它转为黑色
然后对字体进行一些小修补和去除杂点
[Python] 纯文本查看 复制代码def change_img(img,i):
pixels = img.load()
for k in range(img.size[0]):
for j in range(img.size[1]):
if pixels[k,j] == (255, 0, 0):
pixels[k,j] = (255, 255, 255)
elif pixels[k,j] != (255, 255, 255):
pixels[k,j] = (0, 0, 0)
for k in range(1,img.size[0]-1):
for j in range(1,img.size[1]-1):
x1 = pixels[k-1,j]
x2 = pixels[k+1,j]
y1 = pixels[k,j-1]
y2 = pixels[k,j+1]
if pixels[k,j] == (255, 255, 255):
if x1 == x2 == y1 == y2 == (0, 0, 0):
pixels[k,j] = (0, 0, 0)
elif x1 == y1 == y2 == (0, 0, 0):
pixels[k,j] = (0, 0, 0)
elif x2 == y1 == y2 == (0, 0, 0):
pixels[k,j] = (0, 0, 0)
if pixels[k,j] == (0, 0, 0):
if x1 == x2 == y1 == y2 == (255, 255, 255):
pixels[k,j] = (255, 255, 255)
elif x1 == x2 == y1 == (255, 255, 255):
pixels[k,j] = (255, 255, 255)
elif x1 == x2 == y2 == (255, 255, 255):
pixels[k,j] = (255, 255, 255)
elif x1 == y1 == y2 == (255, 255, 255):
pixels[k,j] = (255, 255, 255)
elif x2 == y1 == y2 == (255, 255, 255):
pixels[k,j] = (255, 255, 255)
img.save(str(i)+\’_new.png\’)
对验证码进行分割处理:
先对验证码进行简单处理边缘白色无用像素,便于后面切割
[Python] 纯文本查看 复制代码def cut_LR(img):
pixels = img.load()
x,y = img.size
for w in range(x):
for h in range(y):
if pixels[w,h] == 0:
x1 = w
break
if pixels[w,h] == 0:
break
for w in range(x):
w = x – w – 1
for h in range(y):
if pixels[w,h] == 0:
x2 = w + 1
break
if pixels[w,h] == 0:
break
for h in range(y):
for w in range(x1,x2):
if pixels[w,h] == 0:
y1 = h
break
if pixels[w,h] == 0:
break
for h in range(y):
h = y – h – 1
for w in range(x1,x2):
if pixels[w,h] == 0:
y2 = h + 1
break
if pixels[w,h] == 0:
break
return x1,y1,x2,y2
传入处理后的图片进行垂直投影
[Python] 纯文本查看 复制代码def vertical(img):
pixdata = img.load()
w,h = img.size
result = []
for x in range(w):
black = 0
for y in range(h):
if pixdata[x,y] == 0:
black += 1
result.append(black)
return result
对垂直投影结果进行处理,取投影结果中间前后取4个值对比,
在其中取最小值第一次进行分割(变成2+2的两个验证码)
然后再对其二次分割成(1+1+1+1)的验证码
[Python] 纯文本查看 复制代码def get_start_x(hist_width):
mid = len(hist_width) // 2
temp = hist_width[mid-4:mid+5]
return mid – 4 + temp.index(min(temp))
def get_split(img,hist_width):
w,h = img.size
box1 = (0,0,hist_width,h)
box2 = (hist_width,0,w,h)
img_1 = img.crop(box1)
img_chuizhi = vertical(img_1)
split_x1 = get_start_x(img_chuizhi)
w1,h1 = img_1.size
box_1 = (0,0,split_x1,h1)
box_2 = (split_x1,0,w1,h1)
img_1.crop(box_1).save(\’x_1.png\’)
img_1.crop(box_2).save(\’x_2.png\’)
img_2 = img.crop(box2)
img_chuizhi = vertical(img_2)
split_x2 = get_start_x(img_chuizhi)
w2,h2 = img_2.size
box_3 = (0,0,split_x2,h2)
box_4 = (split_x2,0,w2,h2)
img_2.crop(box_3).save(\’x_3.png\’)
img_2.crop(box_4).save(\’x_4.png\’)
最终处理结果:
分割效果还是很不错的,少许粘连,少许倾斜用这种垂直投影的切割方法处理出来的效果已经可以达到不错的效果,可完美分割99%。为后续训练节省不少时间。
代码比较乱,因为这是初稿(主要是刚学py没多久,之前都是用易语言比较多,规范的问题就一略而过了,哈哈),写的没那么规范。
如果有看不懂的可以留言。
这种验证码比较简单,粘连倾斜的比较少,所以比较简单。如果是倾斜比较厉害的可以用水滴算法进行分割。
吾爱论坛ID:lennydada
如果觉得对你有帮助请给个评分哦,每日评分都是免费的
猜你喜欢
-
悟饭游戏厅电脑版三国战纪辅助 自己做的 还带源码哦
2020-09-01 -
【8月28修复版】影视小程序附带教程
2020-08-28 -
赛尔号发包例子(易语言)
2020-09-01 -
从零开始搭建完整的全栈系统(六)——基于Flutter开发的App应用展示
2020-10-19 -
行知学徒网课-一晚上解决网课:计算机和办公设备维修人员
2020-09-16 -
全新乐看影视V6对接苹果CMS八端开源-不包更新
2020-08-14 -
最新泛目录程序 附教学视频 黑帽seo
2020-06-21 -
QYBot契约机器人官网HTML源代码
2020-06-11 -
关于市面上快排研究总结
2020-09-09 -
【C#源码】Winform高仿安卓QQ音乐
2020-09-01
-
二次包装解析播放可包装几百接口自动删除无用接口
2020-11-28 -
【C++】模仿Spy++
2020-09-01 -
[VB]自动加密压缩目录下所有文件,并生成对应的密码记录文件
2020-09-16 -
【Ctrl.js】给抖音喜欢的视频点赞评论
2020-10-19 -
PotPlayer播放器在线字幕翻译-百度翻译-机器翻译版插件
2020-09-01 -
destoon7.0移动端与pc端完美分离二开
2020-09-01 -
站壳网jizhi-chlid极致主题4.0去授权破解版[支持RiPro7.1破解版]
2020-08-31 -
短视频/音乐解析(带在线支付会员系统)
2020-09-10 -
新版多媒体云盘系统 云切片网盘 支持多服务器切片
2020-08-27 -
python在命令行打印彩色文字
2020-09-07
猜你在找
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
小酒资源吧 » [Python] 某果验证码识别去干扰线 去噪点 字符分割算法
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 小酒资源吧
- 2020-09-01Hi,初次和大家见面了,请多关照!