概述

简介

坑!

安装 Tesseract-OCR

使用 pytesseract 识别验证码

高级玩法 - 除线

简介

首先呢,简单的验证码是这样的:

code.jpg

不是这样的:

image.png

这里使用了 pytesseract 来进行验证码识别,它是基于 Google 的 Tesseract-OCR ,所以在使用之前需要先安装 Tesseract-OCR。使用 PIL 来进行图像处理。pytesseract 默认支持 tiff、bmp 图片格式,使用 PIL 库之后,能够支持 jpeg、gif、png 等其他图片格式;

坑!

PIL(Python Imaging Library) 库只支持 32 位的系统,如果要在 64 位系统中使用,请安装 pillow。嗯,这个真是坑死我了,为了安装这个倒腾了很久。希望能帮到你。

pillow 的缘由:由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性。

32 位系统

pip install PIL

64 位系统

pip install pillow

安装 Tesseract-OCR

在使用 pytesseract 之前,必须安装 tesseract-ocr ,因为 pytesserat 依赖于 tesseract-ocr ,否则无法使用

Mac

brew install tesseract

centos7

yum-config-manager --add-repohttps://download.opensuse.org/repositories/home:/Alexander_Pozdnyakov/CentOS_7/yum updateyum install tesseract yum install tesseract-langpack-deu

windows

使用 pytesseract 识别验证码

首先将图像灰度化

#使用路径导入图片im = Image.open(imgimgName)#使用 byte 流导入图片# im = Image.open(io.BytesIO(b))# 转化到灰度图imgry = im.convert('L')# 保存图像imgry.save('gray-'+ imgName)

灰度化的图像是这个样子的:

gray-code.jpg

然后将图像二值化

# 二值化,采用阈值分割法,threshold为分割点threshold =140table = []forjinrange(256):ifj < threshold:            table.append(0)else:            table.append(1)out= imgry.point(table,'1')out.save('b'+ imgName)关于怎么快速学Python,可以加下小编的Python学习qun:699+749+852,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,欢迎初学和进阶中的小伙伴。每天晚上20:00都会开直播给大家分享Python知识和路线方法,qun里会不定期更新最新的教程

二值化的图像是这个样子的:

two-code.jpg

最后进行识别

#  识别text = pytesseract.image_to_string(out)print("识别结果:"+text)

识别结果是这样的:

image.png

高级玩法 - 除线

上面的知识简单的处理,在日常网络冲浪中,我们还会遇到这样的验证码:

logo3.gif

这个给我们的识别增加了难度,我们要做的就是将这条线去掉。详细代码如下:

defremoveLine(imgName):(img, pixdata) = open_img(imgName)forxinrange(img.size[0]):# x坐标foryinrange(img.size[1]):# y坐标ifpixdata[x, y][0] <8orpixdata[x, y][1] <6orpixdata[x, y][2] <8or(                    pixdata[x, y][0] + pixdata[x, y][1] + pixdata[x, y][2]) <=30:# 确定颜色阈值ify ==0:                    pixdata[x, y] = (255,255,255)ify >0:ifpixdata[x, y -1][0] >120orpixdata[x, y -1][1] >136orpixdata[x, y -1][2] >120:                        pixdata[x, y] = (255,255,255)# ?# 二值化处理foryinrange(img.size[1]):# 二值化处理,这个阈值为R=95,G=95,B=95forxinrange(img.size[0]):ifpixdata[x, y][0] <160andpixdata[x, y][1] <160andpixdata[x, y][2] <160:                pixdata[x, y] = (0,0,0)else:                pixdata[x, y] = (255,255,255)    img.filter(ImageFilter.EDGE_ENHANCE_MORE)# 深度边缘增强滤波,会使得图像中边缘部分更加明显(阈值更大),相当于锐化滤波img.resize(((img.size[0]) *2, (img.size[1]) *2), Image.BILINEAR)# Image.BILINEAR指定采用双线性法对像素点插值#?img.save('remove-'+ imgName)    print("除线成功!")    recognize('remove-'+ imgName)

那么我们的运行结果是这样的:

bremove-logo3.gif

总结

经过这么一些折腾,我们总算是看到了我们想要的结果,但是我很遗憾地告诉你,pytesseract 还是无法识别处理过的图片,他的识别结果是这样的:

image.png

结果有点令人痛心,不过我们也算是为我们的目标踏进了一小步。你以为这篇文章就这样完了吗?嗯,是的,这篇文章就这样完了。不过好在 pytesseract 提供了自定义训练功能,来提高识别能力(也可以自建神经网络进行识别)

python识别花草_Python识别验证码的另一种花样玩法相关推荐

  1. python验证码识别算法_Python网站验证码识别

    0x00 识别涉及技术 验证码识别涉及很多方面的内容.入手难度大,但是入手后,可拓展性又非常广泛,可玩性极强,成就感也很足. 验证码图像处理 验证码图像识别技术主要是操作图片内的像素点,通过对图片的像 ...

  2. python dict遍历_python 字典(dict)遍历的四种方法性能测试报告

    python中,遍历dict的方法有四种.但这四种遍历的性能如何呢?我做了如下的测试 l = [(x,x) for x in xrange(10000)] d = dict(l) from time ...

  3. python发票识别代码_python 发票验证码自动生成

    有的时候我们使用一些自动化脚本需要自动登录到一些网站做一些操作,提高工作的效率.但验证码是一个拦路虎,面对各种复杂的甚至连人都可能搞错的验证码,机器的自动识别往往变得异常艰难,与验证码的斗争使我们头疼 ...

  4. python条形码识别系统_Python识别处理照片中的条形码

    最近一直在玩数独,突发奇想实现图像识别求解数独,输入到输出平均需要0.5s. 整体思路大概就是识别出图中数字生成list,然后求解. 输入输出demo 数独采用的是微软自带的Microsoft sud ...

  5. python图片识别论文_Python识别文字,实现看图说话 | CSDN博文精选

    原标题:Python识别文字,实现看图说话 | CSDN博文精选 作者 | 张小腿 来源 | CSDN博客 现在写文件很多网站都不让复制了,所以每次都是截图然后发到QQ上然后用手机QQ的文字识别再发回 ...

  6. python图像识别代码_python图像识别--验证码

    1.pip3 install pyocr 2.pip3 install pillow or easy_install Pillow 4.要求python默认安装在C盘 5.找到 pytesseract ...

  7. 手写体识别代码_Python识别图片中的文字

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

  8. python花式编码_Python——花式打印对象的若干种方法

    今天是Python专题的第10篇文章,我们来聊聊Python当中的类. 打印实例 我们先从类和对象当中最简单的打印输出开始讲起,打印一个实例是一个非常不起眼的应用,但是在实际的编程当中却非常重要.原因 ...

  9. 电脑python安装库_Python安装第三方库的3种方法 -电脑资料

    这篇文章主要介绍了Python安装第三方库的3种方法,本文讲解了通过setuptools来安装python模块.通过pip来安装python模块.直接从网上下载下可执行文件来安装三种方法,需要的朋友可 ...

最新文章

  1. org manual翻译--3.5.8 更新表格
  2. Octave相关学习资源整理出
  3. jdk LocalDateTime mybatis 空指针解决办法
  4. php 正则分隔_探讨PHP函数split()如何使用正则表达式切割字符串
  5. get clone 出现 fatal: the remote end hung up unexpectedly5 MiB | 892.00 KiB/s 报错信息
  6. 今晚直播丨有关Oracle 19c认证体系的一些变化及备考技巧
  7. 据说,80%的人没有真正理解了Spring的依赖注入
  8. 关于java中 get提交方式的乱码问题。
  9. LoadRunner函数中文翻译
  10. .NET(C#)代码性能优化
  11. javascript 小白学习指南专题 this
  12. 多尺度图像增强Retinex相关算法学习及实现
  13. 软件实施工程师是一个什么样的工作?他的具体工作内容是什么?发展前景怎样?...
  14. 什么软件可以编辑PDF文件
  15. android打开系统文件怎么打开方式,Android调用系统应用打开任意文件
  16. 微博SDK第三方授权登陆
  17. 面对一直在房价洼地的长沙,我不后悔十几年前逃离长沙
  18. 俄罗斯方块的设计思路
  19. 如何快速高效的刷Leetcode
  20. docker: error pulling image configuration:timeout

热门文章

  1. [生存志] 第40节 管仲经济纵横
  2. Windows组策略屏蔽U盘有妙法(图)
  3. 无电无网手机远程监控器,你值得拥有
  4. 【Android】23、如何知晓当前是在哪一个活动
  5. ios 让debugserver可以调试任意app
  6. ConvNeXt理论讲解
  7. Code Jam - Store Credit for Python
  8. Excel怎么一次性制作多张二维码图片?
  9. 信息学奥赛出局?教育部:若提出申请,会认真研究
  10. 2020江苏省小学生计算机比赛,2020年“领航杯”江苏省中小学电脑制作活动暨首届人工智能大赛在苏州开幕...