python识别中文验证码_Python识别简单验证码
12.1 更新
已经有完整的代码了
=======================================
新手, 多多指教
大概思路: 1. 转换图片为黑白, 2. 去除干扰, 3. 切割, 4. 识别
<1>
采集足够的验证码图片
要识别的验证码都是简单的, 字体一致, 无变形, 干扰少,位置固定(适合新手)
采集代码(隐去网址)
for i in range(500):
url = r'http://xxxx/default3.html'
urllib.urlretrieve(url, str(i) + '.gif')
<2>
切割转换图片, 返回为图片块
rct 为五个数字的四条边的位置, 由于位置固定所以通过手动微调得到大概值
import os
from PIL import Image
def get_cut(file_name):
img = Image.open(file_name)
cut_img = []
# 每个数字的范围
rct = (
(5, 5, 15, 19), # 左边距 上边距 右边距 下边距
(14, 5, 24, 19),
(23, 5, 33, 19),
(32, 5, 42, 19),
(41, 5, 51, 19)
)
# 转换图片
bin_img = get_bin(img)
# 将图片分割为五部分
for part in range(5):
cut_img.append(bin_img.crop(rct[part]))
return cut_img
切割后的图片大概如下:
保存切割的图片代码如下, 测试的时候用:
for i in range(20):
img = get_cut('img\\' + str(i) + '.gif')
d = 0
for im in img:
d += 1
im.save('cut\\' + str(i) + str(d) + '.gif')
<3>
把图片转换为灰度图 , 去除噪音部分, 转换为黑白
由图可看出, 数字部分颜色比较暗, 背景部分偏亮, 转换为灰度图, 将亮的部分去除得到的就是有效的数字部分像素, 阈值可用ps, 或者用代码计算出亮度信息集中部分, 将高于阈值的部分去除
# 去除图片噪点并转为黑白
def get_bin(img):
bin_img = Image.new('L', img.size, 255) # 新图片 模式 L灰度 大小 色彩深度
cvt_img = img.convert("L") # 转换模式为灰度图
for x in range(img.size[1]):
for y in range(img.size[0]):
pix = cvt_img.getpixel((y, x))
if pix < 110: # 去噪阈值过滤灰度大于 110 的像素点
bin_img.putpixel((y, x), 0) # 填充新图片
else:
bin_img.putpixel((y, x), 255)
return bin_img
<4>
将图片每个像素点转换为 0, 1 值对应的字典,1代表有, 0 代表无
# 转换为矢量
def buildvector(img):
d1 = {}
count = 0
for i in img.getdata():
d1[count] = 0
if i ==255:
d1[count] = 1
count += 1
return d1
<5>
识别图片块数字, 将要识别的图片转换为二值对应的字典, 读取已知的图片并与要识别的图片比较, 比较的方法是对比x每一行, y每一列, 将一样的值计数统计除以总像素计算出相似度, 并返回相似度最高的图片的值
# 识别每个图片块的内容
def get_result(src_img):
guess = -1
# 将图片转换为二值列表
srcimgbin = buildvector(src_img)
# 用于储存每个对比数字的相似率
simalist = []
for i in range(10):
simalist.append(0)
# 与每个数字对比
for cp_numb in range(10):
cp_count = len(os.listdir('convert_Img\\%s' % cp_numb))
# 遍历比较已知数字图片块集合目录
for comp in os.listdir('convert_Img\\%s' % cp_numb):
cpimgpath = 'convert_Img\\' + str(cp_numb) + '\\' + comp
# 将已知块转换
cp_bin =buildvector(get_bin(Image.open(cpimgpath)))
xy = 0
yx = 0
# 纵向扫描对比 并统计相同
for x in range(10):
for y in range(14):
if cp_bin[x * y + y] == srcimgbin[x * y + y] == 1:
xy += 1
# 横向扫描对比
for y in range(14):
for x in range(10):
if cp_bin[y * x + x] == srcimgbin[y * x + x] == 1:
yx += 1
# 得出单张图片相似率
sima = (xy + yx) / 280
# 统计该数相似率
simalist[cp_numb] += sima
# 求于个数平均值
simalist[cp_numb] /= cp_count
# 得到相似度最高的数字
guess = getmax(simalist)
return guess
# 获取列表最大数
def getmax(list):
li = list
max = 0
index = 0
for i in range(len(li)):
if max < li[i]:
max = li[i]
index = i
return index
<6>
主函数循环识别一百张张图片验证码内容,将识别结果命名为图片名
if __name__ == '__main__':
for i in range(100):
# 得到只有黑白值的图片分割块
cut_img = get_cut('img\\' + str(i) + '.gif')
result = ''
# 识别每个图片块的内容
for im in cut_img:
# 将识别的结果连接
result = result + str(get_result(im))
print result
# 重命名文件名为识别结果
os.rename('img\\' + str(i) + '.gif','img\\' + result + '.gif')
识别结果
待解决问题, 将已标记的图片先转换为二值标记文件, 8 会识别为 3 ,原因是还有干扰的点
待更新 . . .
python识别中文验证码_Python识别简单验证码相关推荐
- python获取网页验证码_Python识别网站验证码
http://drops.wooyun.org/tips/6313 Python识别网站验证码 Manning · 2015/05/28 10:57 0x00 识别涉及技术 验证码识别涉及很多方面的内 ...
- python 滑动验证码_python:TX滑动验证码识别方案一
一.介绍: 本内容只做技术交流使用,请勿做商业用途.本方法验证采用本地自建服务器的形式来对所介绍的算法做验证 滑动验证码如下图所示: 复制代码 二.本地测试环境构建 本地测试环境的构建CSDN已有文章 ...
- eoLinker-API_Shop_验证码识别与生成类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等...
以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数 ...
- python ocr 识别中文pdf_轻松识别文字,这款Python OCR库支持超过80种语言
OCR是什么? 有一款软件叫扫描全能王,想必一些小伙伴听过,这是一个OCR集成软件,可以将图像内容扫描成文字. 所以说,OCR作用是对文本资料的图像文件进行分析识别处理,获取文字及版面信息. OCR的 ...
- python识别汉字笔画_Python识别图片中的文字
Python识别图片中的文字 一.前言 不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制.或者像百度文档一样,只能复制一部分,这个时候我们就会选择截 ...
- python批量识别图片中文字_Python识别图片中的文字
一.前言 不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制.或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存.但是当我们想用到里面的 ...
- python制作查询网页_Python制作简单的网页爬虫
1.准备工作: 工欲善其事必先利其器,因此我们有必要在进行Coding前先配置一个适合我们自己的开发环境,我搭建的开发环境是: 操作系统:Ubuntu 14.04 LTS Python版本:2.7.6 ...
- python 读中文乱码_python字符乱码的解决小结
引言 无论学习什么程序语言,字符串这种数据类型总是着有非常重要.然而最近在学习python这门语言,想要显示中文,总是出现各种乱码.于是在网上查了很多资料,各说纷纭,我也尝试了许多的方法,有时候可以正 ...
- python识别12306验证码_Python 识别12306图片验证码物品的实现示例
1.PIL介绍以及图片分割 Python 3 安装: pip3 install Pillow 1.1 image 模块 Image模块是在Python PIL图像处理中常见的模块,主要是用于对这个图 ...
最新文章
- windows 7 可以清除的文件
- 他们花一百万让你的票圈广告更好看,还被ACM点了赞
- 深入理解ASCII,Unicode和UTF-8编码
- 理性预期学派(Rational Expectation School)
- 详解用65行javascript代码做Flappy Bird
- k8s停止服务_使用 K8S 几年后,这些技术专家有话要说
- 网游服务端开发入门知识
- markdown与latex:如何写出像数学书里的大于等于\geqslant和小于等于\leqslant
- android 发送显示广播,如何查看Android系统当前发送了什么广播
- Opencv 相机视图中的固定框中找到直线用lsd算法
- win10教育版加域提示错误
- 准时下班系列_Word合集之第1集—批量设置嵌入型图片解决方案
- 2020年终总结与展望
- 硬件设备的软件测试,智能设备的软硬件测试都要测什么?
- 微博开放平台开发(一)获取access_token
- SAS多元线性回归分析与残差分析(画残差图,残差的正太概率图含变量交叉项,写残差向量,计算回归系数的置信区间,检验自变量系数是否相等,利用R²,MSE,CP,PRESS准则和逐步回归法选择最优方程)
- Centos7系统启动盘的正确安装姿势
- Python实现PDF转文字.
- imx6ull驱动开发经验
- 智能运维 | 我们不一样!告诉你百度云如何做智能流量异常检测