当前位置:首页 » 编程语言 » python处理验证码

python处理验证码

发布时间: 2022-04-26 06:04:33

python处理滑动验证码,除了调用chrome

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
import PIL.Image as image
import time,re, random
import requests
try:
from StringIO import StringIO
except ImportError:
from io import StringIO

#爬虫模拟的浏览器头部信息
agent = 'Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0'
headers = {
'User-Agent': agent
}

# 根据位置对图片进行合并还原
# filename:图片
# location_list:图片位置
#内部两个图片处理函数的介绍
#crop函数带的参数为(起始点的横坐标,起始点的纵坐标,宽度,高度)
#paste函数的参数为(需要修改的图片,粘贴的起始点的横坐标,粘贴的起始点的纵坐标)
def get_merge_image(filename,location_list):
#打开图片文件
im = image.open(filename)
#创建新的图片,大小为260*116
new_im = image.new('RGB', (260,116))
im_list_upper=[]
im_list_down=[]
# 拷贝图片
for location in location_list:
#上面的图片
if location['y']==-58:
im_list_upper.append(im.crop((abs(location['x']),58,abs(location['x'])+10,166)))
#下面的图片
if location['y']==0:
im_list_down.append(im.crop((abs(location['x']),0,abs(location['x'])+10,58)))
new_im = image.new('RGB', (260,116))
x_offset = 0
#黏贴图片
for im in im_list_upper:
new_im.paste(im, (x_offset,0))
x_offset += im.size[0]
x_offset = 0
for im in im_list_down:
new_im.paste(im, (x_offset,58))
x_offset += im.size[0]
return new_im

#下载并还原图片
# driver:webdriver
# div:图片的div
def get_image(driver,div):
#找到图片所在的div
background_images=driver.find_elements_by_xpath(div)
location_list=[]
imageurl=''
#图片是被CSS按照位移的方式打乱的,我们需要找出这些位移,为后续还原做好准备
for background_image in background_images:
location={}
#在html里面解析出小图片的url地址,还有长高的数值
location['x']=int(re.findall("background-image: url\(\"(.*)\"\); background-position: (.*)px (.*)px;",background_image.get_attribute('style'))[0][1])
location['y']=int(re.findall("background-image: url\(\"(.*)\"\); background-position: (.*)px (.*)px;",background_image.get_attribute('style'))[0][2])
imageurl=re.findall("background-image: url\(\"(.*)\"\); background-position: (.*)px (.*)px;",background_image.get_attribute('style'))[0][0]
location_list.append(location)
#替换图片的后缀,获得图片的URL
imageurl=imageurl.replace("webp","jpg")
#获得图片的名字
imageName = imageurl.split('/')[-1]
#获得图片
session = requests.session()
r = session.get(imageurl, headers = headers, verify = False)
#下载图片
with open(imageName, 'wb') as f:
f.write(r.content)
f.close()
#重新合并还原图片
image=get_merge_image(imageName, location_list)
return image

#对比RGB值
def is_similar(image1,image2,x,y):
pass
#获取指定位置的RGB值
pixel1=image1.getpixel((x,y))
pixel2=image2.getpixel((x,y))
for i in range(0,3):
# 如果相差超过50则就认为找到了缺口的位置
if abs(pixel1[i]-pixel2[i])>=50:
return False
return True

#计算缺口的位置
def get_diff_location(image1,image2):
i=0
# 两张原始图的大小都是相同的260*116
# 那就通过两个for循环依次对比每个像素点的RGB值
# 如果相差超过50则就认为找到了缺口的位置
for i in range(0,260):
for j in range(0,116):
if is_similar(image1,image2,i,j)==False:
return i

#根据缺口的位置模拟x轴移动的轨迹
def get_track(length):
pass
list=[]
#间隔通过随机范围函数来获得,每次移动一步或者两步
x=random.randint(1,3)
#生成轨迹并保存到list内
while length-x>=5:
list.append(x)
length=length-x
x=random.randint(1,3)
#最后五步都是一步步移动
for i in range(length):
list.append(1)
return list

#滑动验证码破解程序
def main():
#打开火狐浏览器
driver = webdriver.Firefox()
#用火狐浏览器打开网页
driver.get("htest.com/exp_embed")
#等待页面的上元素刷新出来
WebDriverWait(driver, 30).until(lambda the_driver: the_driver.find_element_by_xpath("//div[@class='gt_slider_knob gt_show']").is_displayed())
WebDriverWait(driver, 30).until(lambda the_driver: the_driver.find_element_by_xpath("//div[@class='gt_cut_bg gt_show']").is_displayed())
WebDriverWait(driver, 30).until(lambda the_driver: the_driver.find_element_by_xpath("//div[@class='gt_cut_fullbg gt_show']").is_displayed())
#下载图片
image1=get_image(driver, "//div[@class='gt_cut_bg gt_show']/div")
image2=get_image(driver, "//div[@class='gt_cut_fullbg gt_show']/div")
#计算缺口位置
loc=get_diff_location(image1, image2)
#生成x的移动轨迹点
track_list=get_track(loc)
#找到滑动的圆球
element=driver.find_element_by_xpath("//div[@class='gt_slider_knob gt_show']")
location=element.location
#获得滑动圆球的高度
y=location['y']
#鼠标点击元素并按住不放
print ("第一步,点击元素")
ActionChains(driver).click_and_hold(on_element=element).perform()
time.sleep(0.15)
print ("第二步,拖动元素")
track_string = ""
for track in track_list:
#不能移动太快,否则会被认为是程序执行
track_string = track_string + "{%d,%d}," % (track, y - 445)
#xoffset=track+22:这里的移动位置的值是相对于滑动圆球左上角的相对值,而轨迹变量里的是圆球的中心点,所以要加上圆球长度的一半。
#yoffset=y-445:这里也是一样的。不过要注意的是不同的浏览器渲染出来的结果是不一样的,要保证最终的计算后的值是22,也就是圆球高度的一半
ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=track+22, yoffset=y-445).perform()
#间隔时间也通过随机函数来获得,间隔不能太快,否则会被认为是程序执行
time.sleep(random.randint(10,50)/100)
print (track_string)
#xoffset=21,本质就是向后退一格。这里退了5格是因为圆球的位置和滑动条的左边缘有5格的距离
ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=21, yoffset=y-445).perform()
time.sleep(0.1)
ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=21, yoffset=y-445).perform()
time.sleep(0.1)
ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=21, yoffset=y-445).perform()
time.sleep(0.1)
ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=21, yoffset=y-445).perform()
time.sleep(0.1)
ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=21, yoffset=y-445).perform()
print ("第三步,释放鼠标")
#释放鼠标
ActionChains(driver).release(on_element=element).perform()
time.sleep(3)
#点击验证
# submit = driver.find_element_by_xpath("//div[@class='gt_ajax_tip success']")
# print(submit.location)
# time.sleep(5)
#关闭浏览器,为了演示方便,暂时注释掉.
#driver.quit()

#主函数入口
if __name__ == '__main__':
pass
main()

⑵ 如何python爬虫识别验证码

  1. 在用爬虫爬取网站数据时,有些站点的一些关键数据的获取需要使用账号登录,这里可以使用requests发送登录请求,并用Session对象来自动处理相关Cookie。

  2. 另外在登录时,有些网站有时会要求输入验证码,比较简单的验证码可以直接用pytesser来识别,复杂的验证码可以依据相应的特征自己采集数据训练分类器。

  3. 以CSDN网站的登录为例,这里用Python的requests库与pytesser库写了一个登录函数。如果需要输入验证码,函数会首先下载验证码到本地,然后用pytesser识别验证码后登录,对于CSDN登录验证码,pytesser的识别率很高。

⑶ 如何利用Python做简单的验证码识别

最简单的是这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

#!/usr/bin/python3.4
# -*- coding: utf-8 -*-

# 1、pip3 install pyocr
# 2、pip3 install pillow or easy_install Pillow
# 3、安装tesseract-ocr:,安装在C:\Program Files\下
# 4、要求python默认安装在C盘

# 代码:
# !/usr/bin/python3.4
# -*- coding: utf-8 -*-

import pytesseract
from PIL import Image

image = Image.open('../jpg/code.png')
code = pytesseract.image_to_string(image)
print(code)

⑷ 如何用Python+人工识别处理知乎的倒立汉字验证码

这给Python爬虫的模拟登录带来了一定的难度,目前网络上的相关资料针对的都是普通的“英文+数字”验证码,针对“倒立汉字”验证码的文章较少。而且大家普遍采用的是requests库。经过几天的研究,我采用urllib.request实现了模拟登陆知乎,现将代码分享如下:

[python] view plain
# 登录知乎,通过保存验证图片方式
import urllib.request
import urllib.parse
import time
import http.cookiejar

webUrl = "l"#不能写因为不支持重定向

webheader = {
# 'Accept': 'text/html, application/xhtml+xml, */*',
# 'Accept-Language': 'zh-CN',
# 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36',
# 'User-Agent': 'Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5',
# 'DNT': '1',
# 'Connection': 'Keep-Alive'
}

postData = {
'email': '在这里写你的账号',
'captcha_type': 'cn',
'password': '在这里写你的密码',
'_xsrf': '',
'captcha': ''
}
localStorePath = "写你想保存的验证码图片的地址"

if __name__ == '__main__':
#声明一个CookieJar对象实例来保存cookie
cookie = http.cookiejar.CookieJar()
#创建opener
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)#建立opener对象,并添加头信息
urllib.request.install_opener(opener)

captcha_url = '?r=%d&type=login&lang=cn' % (time.time() * 1000)
# captcha_url = '/captcha.gif?r=%d&type=login' % (time.time() * 1000)#这样获得的是“字母+数字验证码”

#这个获取验证码图片的方法是不行的!
# urllib.request.urlretrieve(captcha_url, localStorePath + 'myCaptcha.gif')

#用urlopen函数保存验证图片
req = urllib.request.Request(url=captcha_url,headers=webheader)
content = urllib.request.urlopen(req)
# content = opener.open(req)
captcha_name = 'D:/Python学习/crawler_learning/知乎登录专题研究/知乎验证码图片/myNewCaptcha.gif'
content = content.read()
with open(captcha_name, 'wb') as f:
f.write(content)

postData['captcha'] = input('请输入验证码')
# postData['_xsrf'] = get_xsrf()
postData['_xsrf'] = ''
print(postData['_xsrf'])

#用urlopen函数传送数据给服务器实现登录
postData_encoded = urllib.parse.urlencode(postData).encode('utf-8')
req = urllib.request.Request(url=webUrl,data=postData_encoded,headers=webheader)
webPage = urllib.request.urlopen(req)
# webPage = opener.open(req)
data = webPage.read().decode('utf-8')

print(data)
with open("D:/知乎服务器反馈的内容.txt",mode='w',encoding='utf-8') as dataFile:
dataFile.write(data)

几点思考:
1、首先需要明确如何获得验证码图片的地址,利用Fiddler抓包获得的典型的验证码图片的地址如下:

这个“r”代表的是什么含义呢?经过查看知乎上的js代码可以确定,这个r指的是毫秒级的时间戳。
2、以验证码图片地址cn为例,不同时间访问同一个验证码图片地址,得到的验证码图片是不同的,那么知乎服务器是如何知道你获取的是那张验证码呢?
我认为是通过sessionID,换句话说,知乎把某个验证码图片给了你,同时知乎记录下了你的sessionID和这个验证码的“正确答案”,这样将来你输入验证码给知乎后,知乎就能判断你输入的验证码是否正确了。
由于sessionID保存在cookie之中,所以Python模拟登陆的代码必须使用cookie。
3、获取验证码图片的时候,我用的是content =urllib.request.urlopen (req)函数,经过我的验证,用
urllib.request.urlretrieve函数是不行的,因为urlopen函数可以传递headers参数,而这一个参数必须有。

4、获得了倒立汉字图片以后,如何确定要传递给知乎的captcha是什么呢?经过Fiddler抓包,
传递的参数类似于这样:
{"img_size":[200,44],"input_points":[[43.44,22.44],[115.72,22.44]]}
经过分析和试验确定:200指的是图片长度,44指的是图片高度,后面的input_points指的是打在倒立汉字上的点的坐标。由于每次出现7个汉字,这7个汉字的坐标是固定的,我全部进行捕获:
{"img_size":[200,44],"input_points":[[12.95,14.969999999999998],[36.1,16.009999999999998],[57.16,24.44],[84.52,19.17],[108.72,28.64],[132.95,24.44],[151.89,23.380000000000002]]}
然后,问题就简单了:将图片保存在本地之后,打开图片,确定哪几个汉字倒立,比如说第2个和第6个,那就在上面选取出2和6的坐标输入即可,即
{"img_size":[200,44],"input_points":[[36.1,16.009999999999998],[132.95,24.44]]}。
5、小窍门:以验证码图片地址

⑸ python如何识别验证码

我们首先识别最简单的一种验证码,即图形验证码。这种验证码最早出现,现在也很常见,一般由4位字母或者数字组成。例如,中国知网的注册页面有类似的验证码,页面如下所示:

表单中最后一项就是图形验证码,我们必须完全正确输入图中的字符才可以完成注册。

更多有关验证码的知识,可以参考这些文章:

Python3爬虫进阶:识别图形验证码

Python3爬虫进阶:识别极验滑动验证码

Python3爬虫进阶:识别点触点选验证码

Python3爬虫进阶:识别微博宫格验证码

·本节目标以知网的验证码为例,讲解利用OCR技术识别图形验证码的方法。

·准备工作识别图形验证码需要库tesserocr,以mac安装为例:在mac下,我们首先使用Homebrew安装ImageMagick和tesseract库: brew install imagemagickbrew install tesseract 接下来再安装tesserocr即可:pip3 install tesserocr pillow这样我们就完成了 tesserocr的安装。

·获取验证码为了便于实验,我们先将验证码的图片保存到本地。打开开发者工具,找到验证码元素。验证码元素是一张图片,它的ser属 性是CheckCode.aspk。所以我们直接打开如下链接就可以看到一个验证码,右键保存即可,将其命名为code.jpg:

这样我们就得到一张验证码图片,以供测试识别使用。

相关推荐:《Python教程》

识别测试

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

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

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

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

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

验证码处理

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

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

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

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

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

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

⑹ 如何使用python识别验证码

第一种,将验证码保存本地,然后手动输入。
第二种,外包给验证码识别公司
第三种,学习算法识别

⑺ python抓取网页时是如何处理验证码的

python抓取网页时是如何处理验证码的?下面给大家介绍几种方法:

1、输入式验证码

这种验证码主要是通过用户输入图片中的字母、数字、汉字等进行验证。如下图:

解决思路:这种是最简单的一种,只要识别出里面的内容,然后填入到输入框中即可。这种识别技术叫OCR,这里我们推荐使用Python的第三方库,tesserocr。对于没有什么背影影响的验证码如图2,直接通过这个库来识别就可以。但是对于有嘈杂的背景的验证码这种,直接识别识别率会很低,遇到这种我们就得需要先处理一下图片,先对图片进行灰度化,然后再进行二值化,再去识别,这样识别率会大大提高。

相关推荐:《Python入门教程》

2、滑动式验证码

这种是将备选碎片直线滑动到正确的位置,如下图:

解决思路:对于这种验证码就比较复杂一点,但也是有相应的办法。我们直接想到的就是模拟人去拖动验证码的行为,点击按钮,然后看到了缺口的位置,最后把拼图拖到缺口位置处完成验证。

第一步:点击按钮。然后我们发现,在你没有点击按钮的时候那个缺口和拼图是没有出现的,点击后才出现,这为我们找到缺口的位置提供了灵感。

第二步:拖到缺口位置。

我们知道拼图应该拖到缺口处,但是这个距离如果用数值来表示?

通过我们第一步观察到的现象,我们可以找到缺口的位置。这里我们可以比较两张图的像素,设置一个基准值,如果某个位置的差值超过了基准值,那我们就找到了这两张图片不一样的位置,当然我们是从那块拼图的右侧开始并且从左到右,找到第一个不一样的位置时就结束,这是的位置应该是缺口的left,所以我们使用selenium拖到这个位置即可。

这里还有个疑问就是如何能自动的保存这两张图?

这里我们可以先找到这个标签,然后获取它的location和size,然后 top,bottom,left,right = location['y'] ,location['y']+size['height']+ location['x'] + size['width'] ,然后截图,最后抠图填入这四个位置就行。

具体的使用可以查看selenium文档,点击按钮前抠张图,点击后再抠张图。最后拖动的时候要需要模拟人的行为,先加速然后减速。因为这种验证码有行为特征检测,人是不可能做到一直匀速的,否则它就判定为是机器在拖动,这样就无法通过验证了。

3、点击式的图文验证和图标选择

图文验证:通过文字提醒用户点击图中相同字的位置进行验证。

图标选择: 给出一组图片,按要求点击其中一张或者多张。借用万物识别的难度阻挡机器。

这两种原理相似,只不过是一个是给出文字,点击图片中的文字,一个是给出图片,点出内容相同的图片。

这两种没有特别好的方法,只能借助第三方识别接口来识别出相同的内容,推荐一个超级鹰,把验证码发过去,会返回相应的点击坐标。

然后再使用selenium模拟点击即可。具体怎么获取图片和上面方法一样。

4、宫格验证码

这种就很棘手,每一次出现的都不一样,但是也会出现一样的。而且拖动顺序都不一样。

但是我们发现不一样的验证码个数是有限的,这里采用模版匹配的方法。我觉得就好像暴力枚举,把所有出现的验证码保存下来,然后挑出不一样的验证码,按照拖动顺序命名,我们从左到右上下到下,设为1,2,3,4。上图的滑动顺序为4,3,2,1,所以我们命名4_3_2_1.png,这里得手动搞。当验证码出现的时候,用我们保存的图片一一枚举,与出现这种比较像素,方法见上面。如果匹配上了,拖动顺序就为4,3,2,1。然后使用selenium模拟即可。

⑻ python爬验证码

1.找地址

首先,我们要找到这个网站生成验证码的地址,这个地址我们可以通过查看他的源代码来实现。

1.找地址

首先,我们要找到这个网站生成验证码的地址,这个地址我们可以通过查看他的源代码来实现。

就以某大学教务网为例,这个教务网的模板很多学校都在采用:

我就截取表单的验证码部分即可。

<tdalign="center"rowspan="3">
<imgid="imgCode"src="../sys/ValidateCode.aspx"
onclick="changeValidateCode(this)"alt="单击可更换图片!"
style="CURSOR:pointer;">
<br>看不清,则单击图片!
</td>123456123456

这里就可以知道,地址就是../sys/ValidateCode.aspx

组合一下地址就是http://jwmis.lmu.cn/sys/ValidateCode.aspx

也就是我们等一下要用到的地址了。

我们可以查看一下那个网页。

2.处理图片

去查看了一下那个地址

果不其然,都是乱码,因为验证码分为两种。

1)直接处理成JPG/GIF/PNG或者其他格式,然后直接读取到一个图片地址。

2)接收用户触发,然后生成,再直接处理成图像,不读取到一个图片地址。

我们这里是第二种,我们要自己来读取他,到本地,再手动输入验证码。

#-*-coding:utf-8-*-
importurllib2
#验证码的处理#
#验证码生成页面的地址#
im_url='http://jwmis.lmu.cn/sys/ValidateCode.aspx'
#读取验证码图片#
im_data=urllib2.urlopen(im_url).read()
#打开一个Code.PNG文件在D盘,没有的话自动生成#
f=open('d:\Code.png','wb')
#写入图片内容#
f.write(im_data)
#关闭文件#
f.close()

这里包括两个部分:

1)打开那个生成验证码图片的页面,读取

2)将读取到的内容,保存成图片,下载到本地

我们这里的地址是可以随便写的,保存在你想保存的地方。

到这里我们就完成了验证码的一小部分。

by–LoDog

希望能帮到你!

⑼ 如何利用Python 做验证码识别

用python加“验证码”为关键词在里搜一下,可以找到很多关于验证码识别的文章。我大体看了一下,主要方法有几类:一类是通过对图片进行处理,然后利用字库特征匹配的方法,一类是图片处理后建立字符对应字典,还有一类是直接利用ocr模块进行识别。不管是用什么方法,都需要首先对图片进行处理,于是试着对下面的验证码进行分析。
一、图片处理
这个验证码中主要的影响因素是中间的曲线,首先考虑去掉图片中的曲线。考虑了两种算法:
第一种是首先取到曲线头的位置,即x=0时,黑点的位置。然后向后移动x的取值,观察每个x下黑点的位置,判断前后两个相邻黑点之间的距离,如果距离在一定范围内,可以基本判断该点是曲线上的点,最后将曲线上的点全部绘成白色。试了一下这种方法,结果得到的图片效果很一般,曲线不能完全去除,而且容量将字符的线条去除。
第二种考虑用单位面积内点的密度来进行计算。于是首先计算单位面积内点的个数,将单位面积内点个数少于某一指定数的面积去除,剩余的部分基本上就是验证码字符的部分。本例中,为了便于操作,取了5*5做为单位范围,并调整单位面积内点的标准密度为11。处理后的效果:
二、字符验证
这里我使用的方法是利用pytesser进行ocr识别,但由于这类验证码字符的不规则性,使得验证结果的准确性并不是很高。具体哪位大牛,有什么好的办法,希望能给指点一下。
三、准备工作与代码实例
1、PIL、pytesser、tesseract
(1)安装PIL:下载地址:http:// www. pythonware. com/procts/pil/(2)pytesser:下载地址:http :/ /code. google. com/p/pytesser/,下载解压后直接放在代码相同的文件夹下,即可使用。
(3)Tesseract OCR engine下载:http: / / code.google. com/p/tesseract-ocr/,下载后解压,找到tessdata文件夹,用其替换掉pytesser解压后的tessdata文件夹即可。
2、具体代码
复制代码
#encoding=utf-8
###利用点的密度计算
import Image,ImageEnhance,ImageFilter,ImageDrawimport sys
from pytesser import *
#计算范围内点的个数
def numpoint(im):
w,h = im.size
data = list( im.getdata() )
mumpoint=0
for x in range(w):
for y in range(h):
if data[ y*w + x ] !=255:#255是白色
mumpoint+=1
return mumpoint
#计算5*5范围内点的密度
def pointmi(im):
w,h = im.size
p=[]
for y in range(0,h,5):
for x in range(0,w,5):
box = (x,y, x+5,y+5)
im1=im.crop(box)
a=numpoint(im1)
if a<11:##如果5*5范围内小于11个点,那么将该部分全部换为白色。
for i in range(x,x+5):
for j in range(y,y+5):
im.putpixel((i,j), 255)
im.save(r'img.jpg')
def ocrend():##识别
image_name = "img.jpg"
im = Image.open(image_name)
im = im.filter(ImageFilter.MedianFilter())enhancer = ImageEnhance.Contrast(im)
im = enhancer.enhance(2)
im = im.convert('1')
im.save("1.tif")
print image_file_to_string('1.tif')
if __name__=='__main__':
image_name = "1.png"
im = Image.open(image_name)
im = im.filter(ImageFilter.DETAIL)
im = im.filter(ImageFilter.MedianFilter())enhancer = ImageEnhance.Contrast(im)
im = enhancer.enhance(2)
im = im.convert('1')
##a=remove_point(im)
pointmi(im)
ocrend()

⑽ Python有什么好的库可以识别验证码

要安装pytesseract库,必须先安装其依赖的PIL及tesseract-ocr,其中PIL为图像处理库,而后面的tesseract-ocr则为google的ocr识别引擎。

pytesseract安装
直接使用pip install pytesseract安装即可,或者使用easy_install pytesseract

Python验证码识别代码:

import pytesseract
from PIL import Image
image = Image.open('vcode.png')
vcode = pytesseract.image_to_string(image)
print (vcode)

热点内容
游程编码c语言 发布:2025-05-16 21:26:51 浏览:586
帝来哪个配置值得购买 发布:2025-05-16 21:12:29 浏览:462
什么是nodejs前端服务器 发布:2025-05-16 21:12:17 浏览:405
编译选项立即绑定未定义符号 发布:2025-05-16 20:55:13 浏览:906
linuxmysql慢日志 发布:2025-05-16 20:47:58 浏览:271
村两委有哪些配置 发布:2025-05-16 20:34:47 浏览:293
我的世界有什么服务器好玩的 发布:2025-05-16 20:28:57 浏览:484
c语言按位与运算 发布:2025-05-16 20:24:10 浏览:755
苹果手机如何修改密码安全 发布:2025-05-16 20:23:34 浏览:194
图片文字识别算法 发布:2025-05-16 20:21:54 浏览:47