python爬虫验证码的识别_Python爬虫识别验证码

Python爬虫识别验证码

安装tesserocr

pip3 install tesserocr pillow

识别测试

将验证码图片放到项目根目录下,用tesserocr库识别该验证码,代码如下所示:

import locale

locale.setlocale(locale.LC_ALL, 'C')

import tesserocr

from PIL import Image

image = Image.open('code.jpg')

result = tesserocr.image_to_text(image)

print(result)

0

1

2

3

4

5

6

7

importlocale

locale.setlocale(locale.LC_ALL,'C')

importtesserocr

fromPILimportImage

image=Image.open('code.jpg')

result=tesserocr.image_to_text(image)

print(result)

新建了一个Image对象,调用了tesserocr的image_to_text( )方法。传入该Image对象即可完成识别,实现过程非常简单,结果如下:

识别的结果和实际结果有偏差,这是因为验证码内的多余线条干扰了图片的识别。

另外,tesserocr还有一个更加简单的方法,这个方法可以直接将图片文件转为字符串,代码如下:

import locale

locale.setlocale(locale.LC_ALL, 'C')

import tesserocr

from PIL import Image

print(tesserocr.image_to_text('code.jpg'))

0

1

2

3

4

5

importlocale

locale.setlocale(locale.LC_ALL,'C')

importtesserocr

fromPILimportImage

print(tesserocr.image_to_text('code.jpg'))

不过这种方法的识别效果不如上一种的好。

对于上面的图片,我们可以看到其实并没有完全识别正确,所以我们需要对图像作进一步的处理,如灰度转换、二值化等操作。

我们可以利用Image对象的convert( )方法参数传入L,即可将图片转化为灰度图像,代码如下:

image = Image.convert('L')

image.show()

0

1

image=Image.convert('L')

image.show()

传入1即可将图片进行二值化处理,如下所示:

image = Image.convert('1')

image.show()

0

1

image=Image.convert('1')

image.show()

我们还可以指定二值化的阈值。上面的方法采用的是默认阈值127。不过我们不能直接转化原图,要将原图先转化为灰度图像,然后再指定二值化阈值,代码如下:

import locale

locale.setlocale(locale.LC_ALL, 'C')

import tesserocr

from PIL import Image

image = Image.open('code.jpg')

image = image.convert('L')

threshold = 160

table = []

for i in range(256):

if i < threshold:

table.append(0)

else:

table.append(1)

image = image.point(table, '1')

image.show()

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

importlocale

locale.setlocale(locale.LC_ALL,'C')

importtesserocr

fromPILimportImage

image=Image.open('code.jpg')

image=image.convert('L')

threshold=160

table=[]

foriinrange(256):

ifi

table.append(0)

else:

table.append(1)

image=image.point(table,'1')

image.show()

在这里,变量threshold代表二值化阈值,阈值设置为160,之后我们来看看我们的结果:

我们可以看到现在的二维码就比较方便我们进行识别了;那么对于一些有干扰的图片,我们做一些灰度和二值化处理,这会提高图片识别的正确率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python对象属性赋值_关于python对象 中dict属性赋值的疑问

下面这段代码 很奇怪把两个对象放在一个 list中然后循环操作两个对象 中 一个dict key的数值但是循环操作输出的时候发现两个对象的 值会叠加#!/usr/bin/env pythonclass test:base {score : 100}def setBase(self, score):self.base[score] scoredef addScore(self):self.se…

java mysql jsp分页代码_JSP实现数据库分页显示源代码例

JSP实现数据库分页显示源代码例2018-11-25分页显示数据库信息分页显示数据库记录用户名性别电话E-Mailtry{//驱动程序名String driverName"sun.jdbc.odbc.JdbcOdbcDriver";//连接字符串String url"jdbc:odbc:userdata";//加载驱动程序Class.forName(driver…

java解压zip异常_java解压zip文件示例

若是使用Java自带的压缩工具包来实现解压缩文件到指定文件夹的功能&#xff0c;因为jdk提供的zip只能按UTF-8格式处理&#xff0c;而Windows系统中文件名是以GBK方式编码的&#xff0c;所以如果是解压一个包含中文文件名的zip包&#xff0c;会报非法参数异常&#xff0c;所以要…

ensp删除所有命令_HCIA学习笔记——eNSP配置NAT技术

今天用华为的eNSP做了关于NAT的实验&#xff0c;我把它发了出来&#xff0c;有需要的小伙伴可以收藏一下。分别配置了静态的NAT&#xff0c;NAT Outbound配置&#xff0c;Easy IP配置&#xff0c;NAT server配置。接口配置如图所示。在网关路由器上配置访问外网的默认路由。配置…

java怎么设置背景_如何在Java中设置背景图片?

小编典典根据应用程序或小程序是使用AWT还是Swing&#xff0c;答案会略有不同。(基本上&#xff0c;以J诸如JApplet和JFrame为开头的类是Swing和Appletand Frame是AWT。)无论哪种情况&#xff0c;基本步骤都是&#xff1a;将图像绘制或加载到Image对象中。在要绘制背景的绘画事…

python调用selenium的get_Python – selenium webdriver在循环中停留在.get()

我有一个Python代码片段,它使用Selenium Webdriver来循环一些历史性的棒球赔率.代码的第一部分旨在从调度表(包含大约57个需要循环的页面)中获取所有单独的游戏URL,并将它们存储在列表中.我第一次测试它它工作得很好 – 现在,无论出于何种原因,driver.get()函数似乎无法正常工作…

java什么叫元素_什么是Java做什么 - 每个元素使它们成为对象类型?

这个问题关于如何处理Java for-each循环中的元素。我有一个哈希表&#xff0c;它是一个LinkedLists数组。 LinkedList节点的数据部分包含TableEntry&#xff0c;其中K和V是键和值类型。我写了一个for循环来查看LinkedList中的每个TableEntry&#xff0c;检查一个键是否等于Tabl…

python读取dicom文件的包_python 读取DICOM头文件的实例

用dicompyler软件打开dicom图像&#xff0c;头文件如图所示&#xff1a;当然也可以直接读取&#xff1a;ds dicom.read_file(H:Datadata216622.16.840.1.113662.2.0.105002416.1489146183.701CTCT#0#21662#E7AB693D.dcm)print ds>>(0008, 0008) Image Type CS: [ORIGINA…

java程序员用代码写的情书_用代码写的三行情诗,你懂得程序员的浪漫吗?

原标题&#xff1a;用代码写的三行情诗&#xff0c;你懂得程序员的浪漫吗&#xff1f;在一般人眼里&#xff0c;程序员是一群古板&#xff0c;技术宅&#xff0c;不懂得浪漫的屌丝&#xff0c;但其实这些大神们浪漫起来也是相当可以的&#xff01;下面让我们来看一下程序员们用…

对比四大企业级linux版本_Linux家族族谱

大体上来讲&#xff0c;Linux分为两个生态体系&#xff0c;红帽和debian。商业版本以Redhat为代表&#xff0c;开源社区版本则以debian为代表。红帽家族redhat &#xff1a;红帽自家服务器centos &#xff1a;基于红帽重新封装的去掉版权信息的免费版本fedora &#xff1a;基于…

java编写静态工具类_Java编程中静态内部类与同步类的写法示例

java静态内部类将某个内部类定义为静态类&#xff0c;跟将其他类定义为静态类的方法基本相同&#xff0c;引用规则也基本一致。不过其细节方面仍然有很大的不同。具体来说&#xff0c;主要有如下几个地方要引起各位程序开发人员的注意。(一)一般情况下&#xff0c;如果一个内部…

python流量实时统计_Python实现获取nginx服务器ip及流量统计信息功能示例

本文实例讲述了Python实现获取nginx服务器ip及流量统计信息功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;#!/usr/bin/python#codingutf8log_file "/usr/local/nginx/logs/access.log"with open(log_file) as f:contexts f.readlines()# define ip d…

java实验1机动车实验目的_《Java程序设计》实验指导书.doc

《Java程序设计》实验指导书实验一、熟悉JDK环境及主要命令一、实验目的1) 熟悉JDK的环境配置2) 掌握JDK的命令3) 掌握Java Application程序的开发过程&#xff0c;并编写一个Java Application程序二、实验内容1&#xff0e;按照上课所学知识&#xff0c;为自己的机器配置环境变…

python selenium 下载文件_Python Selenium —— 文件上传、下载,其实很简单

很多selenium学习者被浏览器弹出的文件上传、下载框折磨的痛不欲生&#xff0c;今天博主就带你们轻松搞定上传和下载问题。上传上传弹框文件上传是所有UI自动化测试都要面对的一个头疼问题&#xff0c;要处理这个问题&#xff0c;我们需要&#xff1a;首先&#xff0c;要区分出…

mysql vim 命令_Vim基本命令必知必会

光标移动定位方式hjkl (强例推荐使用其移动光标&#xff0c;但不必需) →你也可以使用光标键 (←↓↑→). 注: j 就像下箭头0 → 数字零&#xff0c;到行首^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格&#xff0c;tab&#xff0c;换行&#xff0c;回车等)$ →…

python执行语句转换成str_python3.x,_python3.4.3如何转换str字符串?,python3.x - phpStudy...

python3.4.3如何转换str字符串&#xff1f;#codingutf8import pymssqlclass MSSQL:def __init__(self,host,user,pwd,db):self.host hostself.user userself.pwd pwdself.db dbdef __getConnect(self):"""得到连接信息返回&#xff1a; conn.cursor()"…

java中strictfp么意思_什么时候应该在java中使用“strictfp”关键字?

Strictfp确保您从每个平台上的浮点计算获得完全相同的结果。如果不使用strictfp&#xff0c;JVM实现可以在可用的地方使用额外的精度。Within an FP-strict expression, allintermediate values must be elementsof the float value set or the doublevalue set, implying that…

python导入包的输入法_python 模块和包的导入

http://www.cnblogs.com/linhaifeng/articles/6379069.html1,模块开源模块https://pypi.python.org/pypipip/ easy_install安装python setup.py buildpython setup.py installpip install xxxx添加环境变量import os,sysprint (os.path.dirname(os.path.dirname(os.path.dirnam…

java 包权限 子包_Java 包和访问权限

一开始学Java&#xff0c;就用的eclipse。对包的印象就是右键新建而已。至于导入包&#xff0c;等报错了再导。被IDE奴役的傻孩子。现在就清晰地梳理一遍吧~本文基于Mars老师的Java4Android视频。包的作用软件包为Java类提供了命名空间。根据包名&#xff0c;会生成相应的文件夹…

python动态表情包下载_Python从eif中导出qq表情的gif图片

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#!/usr/bin/pythonTestfrom sys import stdoutfrom time import sleepffile(t.eif,rb)resultDirresultreadBytesreadingBytetempArr3[,,]tempArr8[,,,,,,,]#End Of Gif In EifstartFlag[\x47,\x49,\x46]endFlag1list(49454E44AE426…