使用Python进行验证码识别(转) z

使用python验证码识别来爆破网站后台 使用python验证码识别来爆破网站后台 在我的上一篇博客中,讲解了我用python来识别验证码的原理,对于有些人来说,他可能并不想知道验证码识别的原理,只是想寻找方法去识别验证码从而使用脚本登录网站或者爆破网站的密码。 这几天我把我之前的代码重写了一下(之前写的真的很乱,一般人都看不下去),现在只需要改一下配置文件,你就可以定制自己的目标网站的验证码识别。 1. 运行环境为python3 阅读详情

以前写过一个刷校内网的人气的工具,Java的(以后再也不行Java程序了),里面用到了验证码识别,那段代码不是我自己写的:-) 校内的验证是完全单色没有任何干挠的验证码,识别起来比较容易,不过从那段代码中可以看到基本的验证码识别方式。这几天在写一个程序的时候需要识别验证码,因为程序是Python写的自然打算用Python进行验证码的识别。

以前没用Python处理过图像,不太了解PIL(Python Image Library)的用法,这几天看了看PIL,发现它太强大了,简直和ImageMagic,PS可以相比了。(这里有PIL不错的文档)
由于上面的验证码是24位的jpeg图像,并且包含了噪点,所以我们要做的就是去噪和去色,我拿PS找了张验证码试了试,使用PS滤镜中的去噪效果还行,但是没有在PIL找到去噪的函数,后来发现中值过滤后可以去掉大部分的噪点,而且PIL里有现成的函数,接下来我试着直接把图像转换为单色,结果发现还是会有不过的噪点留了下来,因为中值过滤时把不少噪点淡化了,但转换为音色时这些噪点又被强化显示了,于是在中值过滤后对图像亮度进行加强处理,然后再转换为单色,这样验证码图片就变得比较容易识别了:
pic
pic1

上面这些处理使用Python才几行:
PYTHON:

      im = Image.open(image_name)
          im = im.filter(ImageFilter.MedianFilter())
          enhancer = ImageEnhance.Contrast(im)
          im = enhancer.enhance(2)
          im = im.convert('1')
          im.show()

接下来就是提取这些数字的字模,使用shell脚本下载100幅图片,抽出三张图片获取字模:
PYTHON:

      #!/usr/bin/env python
      #encoding=utf-8
      
      import Image,ImageEnhance,ImageFilter
      import sys
      
      image_name = "./images/81.jpeg"
      im = Image.open(image_name)
      im = im.filter(ImageFilter.MedianFilter())
      enhancer = ImageEnhance.Contrast(im)
      im = enhancer.enhance(2)
      im = im.convert('1')
      #im.show()
                      #all by pixel
      s = 12          #start postion of first number
      w = 10          #width of each number
      h = 15          #end postion from top
      t = 2           #start postion of top
      
      im_new = []
      #split four numbers in the picture
      for i in range(4):
          im1 = im.crop((s+w*i+i*2,t,s+w*(i+1)+i*2,h))
          im_new.append(im1)
      
      f = file("data.txt","a")
      for k in range(4):
          l = []
          #im_new[k].show()
          for i in range(13):
              for j in range(10):
                  if (im_new[k].getpixel((j,i)) == 255):
                      l.append(0)
                  else:
                      l.append(1)
      
          f.write("l=[")
            
          n = 0
          for i in l:
              if (n%10==0):
                  f.write("/n")
              f.write(str(i)+",")
              n+=1
          f.write("]/n")

把字模保存为list,用于接下来的匹配;

提取完字模后剩下来的就是对需要处理的图片进行与数据库中的字模进行匹配了,基本的思路就是看相应点的重合率,但是由于噪点的影响在对(6,8)(8,3) (5,9)的匹配时容易出错,俺自己针对已有的100幅图片数据采集进行分析,采用了双向匹配(图片与字模分别作为基点),做了半天的测试终于可以实现 100%的识别率。
PYTHON:

      #!/usr/bin/env python
      #encoding=utf-8
      
      import Image,ImageEnhance,ImageFilter
      import Data
      
      DEBUG = False
      
      def d_print(*msg):
          global DEBUG
          if DEBUG:
              for i in msg:
                  print i,
              print
          else:
              pass
      def Get_Num(l=[]):
          min1 = []
          min2 = []
          for n in Data.N:
              count1=count2=count3=count4=0
              if (len(l) != len(n)):
                  print "Wrong pic"
                  exit()
              for i in range(len(l)):
                  if (l[i] == 1):
                      count1+=1
                      if (n[i] == 1):
                          count2+=1
              for i in range(len(l)):
                  if (n[i] == 1):
                      count3+=1
                      if (l[i] == 1):
                          count4+=1
              d_print(count1,count2,count3,count4)
      
              min1.append(count1-count2)
              min2.append(count3-count4)
          d_print(min1,"/n",min2)
          for i in range(10):
              if (min1[i] <= 2 or min2[i] <= 2):
                  if ((abs(min1[i] - min2[i])) <10):
                      return i
          for i in range(10):           
              if (min1[i] <= 4 or min2[i] <= 4):
                  if (abs(min1[i] - min2[i]) <= 2):
                      return i
      
          for i in range(10):
              flag = False
              if (min1[i] <= 3 or min2[i] <= 3):
                  for j in range(10):
                      if (j != i and (min1[j] <5 or min2[j] &lt;5)):
                          flag = True
                      else:
                          pass
                  if (not flag):
                      return i
          for i in range(10):           
              if (min1[i] <= 5 or min2[i] <= 5):
                  if (abs(min1[i] - min2[i]) <= 10):
                      return i
          for i in range(10):
              if (min1[i] <= 10 or min2[i] <= 10):
                  if (abs(min1[i] - min2[i]) <= 3):
                      return i
      
      #end of function Get_Num
      
      def Pic_Reg(image_name=None):
          im = Image.open(image_name)
          im = im.filter(ImageFilter.MedianFilter())
          enhancer = ImageEnhance.Contrast(im)
          im = enhancer.enhance(2)
          im = im.convert('1')
          im.show()
                          #all by pixel
          s = 12          #start postion of first number
          w = 10          #width of each number
          h = 15          #end postion from top
          t = 2           #start postion of top
          im_new = []
          #split four numbers in the picture
          for i in range(4):
              im1 = im.crop((s+w*i+i*2,t,s+w*(i+1)+i*2,h))
              im_new.append(im1)
      
          s = ""
          for k in range(4):
              l = []
              #im_new[k].show()
              for i in range(13):
                  for j in range(10):
                      if (im_new[k].getpixel((j,i)) == 255):
                          l.append(0)
                      else:
                          l.append(1)                                                           
                                                                        
              s+=str(Get_Num(l))                                                           
          return s                                                           
      print Pic_Reg("./images/22.jpeg")                                                           
                                                           
这里再提一下验证码识别的基本方法:截图,二值化、中值滤波去噪、分割、紧缩重排(让高矮统一)、字库特征匹配识别。                                                           
这里只是针对一般的验证码,高级验证码的识别这里有篇不错的文章,太复杂的话涉及的东西就多了,那俺就没兴趣了,人工智能(好恐怖),俺只喜欢简单的东西。                                                           

转自http://www.zhuaxia.com/item/852269537



<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别 这篇文章主要给大家介绍了关于python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧 前言 写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种: 图像类 滑动类 点击类 语音类 今天先来看看图像类,这类验证码大多是数字、字母的组合,国内也有使用汉字的。在这个基础上增加噪点、... 阅读详情

相关推荐

如何使用 Python 与 OpenCV 构建验证码识别系统,解决爬虫封禁问题

本文介绍了使用Python和OpenCV构建验证码识别系统的技术方案。主要内容包括:验证码类型概述(数字型、混合型、扭曲型等),识别流程(预处理、字符分割、识别),以及具体实现代码。系统采用灰度化、二值化等预处理方法,结合Tesseract OCR进行字符识别。针对复杂验证码,建议采用深度学习模型(如CNN)提升准确率。该技术可有效解决爬虫验证码问题,也可应用于文档扫描等自动化场景。文章提供了完整的代码示例和进阶优化建议。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1211

使用Python基于OpenCV的验证码识别

Blog:https://blog.youkuaiyun.com/qq_40962368/article/details/89312429 步骤: (1)获取批量验证码图片(利用某高校登录页面的验证码图片) (2)为验证码图片做信息标注(手动标记,要确保百分百正确) (3)利用Tesseract-OCR对验证码图片进行识别并测试识别效果 一、爬取某高校页面的验证码图片100张 ...

weixin_30518397的博客 5848

python识别验证码之分离图片验证码颜色通道

代码如下: import requests from PIL import Image import pytesseract import re url3='获取验证码链接' for i in range(0,10): r = requests.get(url3) #保存验证码图片 with open(str(i)+'.bmp', 'wb') as f: for c...

博客 1655

python 验证码识别库_python验证码识别

写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种:图像类滑动类点击类语音类今天先来看看图像类,这类验证码大多是数字、字母的组合,国内也有使用汉字的。在这个基础上增加噪点、干扰线、变形、重叠、不同字体颜色等方法来增加识别难度。相应的,验证码识别大体可以分为下面几个步骤:灰度处理增加对比度(可选)二值化降噪倾斜校正分割字符建立训练库识别由于是实验性质的,文中用到的验证码均为程序生成而不是...

weixin_39866487的博客 1461

基于python简单图像处理,识别验证码

基本识别原理概述:1、每一幅图像在构成上,都是由一个个像素组成的矩阵,每一个像素为单元格。2、 彩色图像的像素的由三原色(红,绿,蓝)构成元组,灰度图像的像素是一个单值,每个像素的值范围为(0,255)。问题来源某系统门户登陆界面如下:现在我们要实现自动的验证码识别。在这里还是要推荐下我自己建的Python开发学习群:483546416,群里都是学Python开发的,如果你正在学习Python ,...

Python达人 1828

超级鹰,字符,点触,滑块验证码识别

https://digi.bib.uni-mannheim.de/tesseract/可自行下载,点击下一步即可;Windows下安装。

Python9724的博客 3633

Python图片验证码自动识别

文章目录一、裁剪图片二、缩放图片三、Base64加密四、字符串截取(1)切片(2)slip()五、强制类型转换六、识别验证码(1)方式一(2)方式二七、整体代码 一、裁剪图片 def verification_code(): driver = webdriver.Firefox() # driver = webdriver.Chrome() # driver.maximiz...

思苑 1万+

图像特征匹配+任意点自动识别

图像特征匹配+任意点自动识别,自动识别两幅图片特征,选取一副图中的点,自动匹配下一幅的点

Python中使用ddddocr进行图片验证码识别

Python中使用ddddocr进行图片验证码识别

qq_36737982的博客 4439

5分钟搞定!用FunASR在本地快速部署达摩院Paraformer语音识别模型

本文提供了一份快速部署指南,教你如何在5分钟内利用FunASR工具包在本地电脑上启动达摩院Paraformer语音识别模型。Paraformer作为一款非自回归端到端模型,以其推理速度快、识别精度高的特点,结合FunASR的一键式模型加载和统一API,让开发者能轻松构建本地语音识别系统,极大降低了前沿AI技术的应用门槛。

q9w8e7r6t5的博客 606

AI开发提效10倍:从需求到部署的全流程实战指南(附Prompt模板)

用AI开发不是“偷懒”,而是把时间花在更有价值的地方——原来花80%时间写重复代码,现在用AI搞定后,能把精力放在“优化用户体验”“提升系统性能”这些核心工作上,这才是AI给开发者的真正红利。如果你还没开始用AI做开发,建议从“写一个简单接口”“补一段注释”开始尝试,先用起来再优化方法。记住:AI是工具,不是对手,学会驾驭它,你会发现开发效率提升的同时,还能告别无效加班。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1532

python验证码识别训练模型_python 基于机器学习识别验证码

1、背景验证码自动识别在模拟登陆上使用的较为广泛,一直有耳闻好多人在使用机器学习来识别验证码,最近因为刚好接触这方面的知识,所以特定研究了一番。发现网上已有很多基于machine learning的验证码识别,本文主要参考几位大牛的研究成果,集合自己的需求,进行改进、学习。2、基本工具开发环境:python 3.5 + pycharm模块:Pillow、sklearn、numpy及其他子模块3、基...

weixin_39842237的博客 2000

AutoCAD矢量数据导出全攻略:GIS4CAD插件一键转shp/mdb/kml(附安装包)

本文详细介绍了GIS4CAD插件如何高效解决AutoCAD矢量数据向GIS格式转换的难题。通过一键操作,用户可将CAD中的规划图、地形图等无损转换为行业标准的shp、mdb、kml等多种格式,并确保属性完整与坐标准确。文章提供了从插件安装、数据准备到实战导出的全流程指南,是城市规划、测绘等领域专业人士提升数据互操作效率的必备攻略。

a2b3c4d5e的博客 286

京东随机变速滑块拼图验证码识别

京东更新了滑块验证码机制,采用随机变速滑动验证码,使传统识别方法失效。文章介绍了随机变速验证码的特点(滑块与拼图移动速度无规律变化),并提供了应对方案:1)通过训练模型实现99%识别准确率;2)基于DrissionPage开发了通用解决方案,通过修改源代码新增变速滑动对齐功能。实战代码展示了如何获取验证码图片、识别真实滑动距离,并实现精准拖动。该方案突破了传统匀速验证码的识别限制,适用于京东新版随机变速验证码场景。

得塔云的博客 3354

日语五十音图速记攻略:从形象联想法到实战训练

语言学习中的记忆编码与条件反射构建是高效掌握基础的关键。其核心原理在于通过将抽象符号与具象图像、故事或已知概念关联,利用大脑对视觉和叙事信息的天然高记忆效率,从而降低认知负荷,加速识别与反应速度。这一方法的技术价值在于将机械重复转化为意义联结,显著提升长期记忆的牢固度与提取速度。在日语学习这一具体应用场景中,五十音图作为表音文字系统,正是实践这一记忆技术的绝佳对象。通过系统化的形象联想、分组对比(如平假名与片假名的对应关系)以及间隔重复的实战训练,学习者可以高效攻克这一入门难关,为后续的词汇、语法学习铺设坚

weixin_29032489的博客 378

Android Profiler实战:如何用CPU分析工具揪出卡顿元凶(附线程状态解读)

本文深入解析Android Profiler中的CPU分析工具,重点聚焦线程活动监控。通过解读线程状态时间轴上的绿、黄、灰三色含义,并结合实战案例,指导开发者精准定位导致界面卡顿的CPU密集型或I/O阻塞代码,有效提升应用性能与用户体验。

weixin_29197699的博客 373

机器学习-基于卷积神经网络验证码的识别(python实现)

机器学习之验证码识别

weixin_53284122的博客 1万+

引入 CloudWeGo 后飞书管理后台平台化改造的演进史

飞书管理后台是飞书套件专为企业管理员提供的信息管理平台,它通过引入 Kitex 泛化调用对飞书管理后台进行平台化改造,成为了企业统一数字化管理平台。本文将从三个方面为大家讲解 Kitex 泛化调用在飞书管理后台平台化改造过程中的落地实践。...

weixin_44186218的博客 1763

python识别复杂验证码2020_python 验证码识别示例(二) 复杂验证码识别

在这篇博文中手把手教你如何去分割验证,然后进行识别。一:下载验证码 验证码分析,图片上有折线,验证码有数字,有英文字母大小写,分类的时候需要更多的样本,验证码的字母是彩色的,图片上有雪花等噪点,因此识别改验证码难度较大二:二值化和降噪: 三: 切割: 四:分类: 五: 测试识别率      六:总结:综合识别率在70%左右,对于这个识别率我觉得还是挺高的,因为这个验证码的识别...

weixin_42299645的博客 707

30天入门 SAP BTP 开发系列之八:动手在 SAP BTP 上开发第一个 ABAP 透明表

ABAP Cloud 环境下创建透明表的方法与数据迁移实践 本文介绍了在 SAP BTP ABAP 环境中创建透明表并迁移数据的完整流程。与传统的 SE11 事务码不同,ABAP Cloud 需通过 ABAP Development Tool 创建数据库表,使用代码定义表结构。作者详细演示了如何: 在开发包中创建名为 Z优快云_TRAVEL 的透明表 使用 ABAP 代码定义表字段和约束 通过 ABAP 类实现数据从标准表/DMO/TRAVEL 到新建表的迁移 验证数据迁移结果 文中还提供了相关技术概念的

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1788

uniapp(全端兼容) - 最新详细实现预览pdf文件功能,uniapp安卓苹果app、H5网页、微信小程序、nvue等端打开本地或在线PDF文档进行预览,uniapp预览pdf教程(详细示例代码)

uni-app,pdf,打开预览PDF,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,uniapp预览PDF,App端 实现pdf文件预览,在app端怎么预览pdf,网页h5怎么预览pdf,pdf下载、上传和预览,H5预览pdf文件,小程序预览pdf,nvue平台怎么打开预览pdf呢,除了uni.opendocument还有什么方法打开,预览pdf的插件,pdf预览组件,uni-app实现PDF预览功能,app查看下载pdf文件,如何做pd

✅ 精选推荐文章 1万+

(二) python爬虫验证码识别(去除干扰线)

(二)python爬虫验证码识别(去除干扰线) 钉钉钉~继完成第一波的任务之后,又来第二波了!!!!!! 1.开发环境与工具 python27:sklearn、pytesser、opencv等 pycharm windows7 2.数据集 欢迎使用Markdown编辑器写博客 本Markdown编辑器使用...

肆小猿的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Python 实现对简单验证码识别

本文参考链接:https://www.cnblogs.com/xuchunlin/p/9415620.html 首先收集原始的验证码图片: 这种验证码的特点是统一都是红色字体的四个字符组成,其中包括大写字母 A-Z,小写字母 a-z 和数字 0-9。我这儿需要的验证码识别对大小写不加以区分,所以大小写识别错误不算作识别错误,比如第一个验证码:DwP6,如果识别成:Dwp6,我们...

Looking的网页备忘录和个人知识库 1961

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

python验证码识别api_python实现验证码识别功能

本文实例为大家分享了python实现验证码识别的具体代码,供大家参考,具体内容如下1.通过二值化处理去掉干扰线2.对黑白图片进行降噪,去掉那些单独的黑色像素点3.消除边框上附着的黑色像素点4.识别图像中的文字,去掉空格与'.'python代码:from PIL import Imagefrom aip import AipOcrfile='1-1-7'# 二值化处理,转化为黑白图片def two_...

weixin_39830175的博客 704

python 训练识别验证码_用Python机器学习搞定验证码

原标题:用Python机器学习搞定验证码写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种:图像类滑动类点击类语音类今天先来看看图像类,这类验证码大多是数字、字母的组合,国内也有使用汉字的。在这个基础上增加噪点、干扰线、变形、重叠、不同字体颜色等方法来增加识别难度。相应的,验证码识别大体可以分为下面几个步骤:灰度处理增加对比度(可选)二值化降噪倾斜校正分割字符建立训练库识别由于是实验性...

weixin_39938269的博客 1145
上一篇: 纯Perl代码生成验证码图片 z
下一篇: [转贴]Perl函数pack/unpack解释 z
KataDoc360
博客等级 码龄18年 65粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值