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识别简单验证码相关推荐

  1. python获取网页验证码_Python识别网站验证码

    http://drops.wooyun.org/tips/6313 Python识别网站验证码 Manning · 2015/05/28 10:57 0x00 识别涉及技术 验证码识别涉及很多方面的内 ...

  2. python 滑动验证码_python:TX滑动验证码识别方案一

    一.介绍: 本内容只做技术交流使用,请勿做商业用途.本方法验证采用本地自建服务器的形式来对所介绍的算法做验证 滑动验证码如下图所示: 复制代码 二.本地测试环境构建 本地测试环境的构建CSDN已有文章 ...

  3. eoLinker-API_Shop_验证码识别与生成类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等...

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数 ...

  4. python ocr 识别中文pdf_轻松识别文字,这款Python OCR库支持超过80种语言

    OCR是什么? 有一款软件叫扫描全能王,想必一些小伙伴听过,这是一个OCR集成软件,可以将图像内容扫描成文字. 所以说,OCR作用是对文本资料的图像文件进行分析识别处理,获取文字及版面信息. OCR的 ...

  5. python识别汉字笔画_Python识别图片中的文字

    Python识别图片中的文字 一.前言 不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制.或者像百度文档一样,只能复制一部分,这个时候我们就会选择截 ...

  6. python批量识别图片中文字_Python识别图片中的文字

    一.前言 不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制.或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存.但是当我们想用到里面的 ...

  7. python制作查询网页_Python制作简单的网页爬虫

    1.准备工作: 工欲善其事必先利其器,因此我们有必要在进行Coding前先配置一个适合我们自己的开发环境,我搭建的开发环境是: 操作系统:Ubuntu 14.04 LTS Python版本:2.7.6 ...

  8. python 读中文乱码_python字符乱码的解决小结

    引言 无论学习什么程序语言,字符串这种数据类型总是着有非常重要.然而最近在学习python这门语言,想要显示中文,总是出现各种乱码.于是在网上查了很多资料,各说纷纭,我也尝试了许多的方法,有时候可以正 ...

  9. python识别12306验证码_Python 识别12306图片验证码物品的实现示例

    1.PIL介绍以及图片分割 Python 3 安装:  pip3 install Pillow 1.1 image 模块 Image模块是在Python PIL图像处理中常见的模块,主要是用于对这个图 ...

最新文章

  1. windows 7 可以清除的文件
  2. 他们花一百万让你的票圈广告更好看,还被ACM点了赞
  3. 深入理解ASCII,Unicode和UTF-8编码
  4. 理性预期学派(Rational Expectation School)
  5. 详解用65行javascript代码做Flappy Bird
  6. k8s停止服务_使用 K8S 几年后,这些技术专家有话要说
  7. 网游服务端开发入门知识
  8. markdown与latex:如何写出像数学书里的大于等于\geqslant和小于等于\leqslant
  9. android 发送显示广播,如何查看Android系统当前发送了什么广播
  10. Opencv 相机视图中的固定框中找到直线用lsd算法
  11. win10教育版加域提示错误
  12. 准时下班系列_Word合集之第1集—批量设置嵌入型图片解决方案
  13. 2020年终总结与展望
  14. 硬件设备的软件测试,智能设备的软硬件测试都要测什么?
  15. 微博开放平台开发(一)获取access_token
  16. SAS多元线性回归分析与残差分析(画残差图,残差的正太概率图含变量交叉项,写残差向量,计算回归系数的置信区间,检验自变量系数是否相等,利用R²,MSE,CP,PRESS准则和逐步回归法选择最优方程)
  17. Centos7系统启动盘的正确安装姿势
  18. Python实现PDF转文字.
  19. imx6ull驱动开发经验
  20. 智能运维 | 我们不一样!告诉你百度云如何做智能流量异常检测

热门文章

  1. matlab 2017b破解版安装教程
  2. 用例-----U盘插上之后一直在弹出可能的原因?
  3. Python调用OpenAI实例大全
  4. android开机自动启动4g,明明买了个8G运存的手机,开机只剩下4G?另一半运存去哪了?...
  5. 验证码 KAPTCHA 参数详解
  6. 不用栈的二叉树中序遍历
  7. 扫描图片怎么提取文字
  8. Python 数据结构 —— 图
  9. 我们是冠军 恭喜ASTER.Y夺得2021极限冲层赛第二赛季全球总冠军
  10. Java坦克大战 (四) 之子弹的产生