python简单验证码识别的实现过程


Posted in Python onJune 20, 2021
目录
  • 1. 环境准备
    • 1.1 安装pillow 和 pytesseract
    • 1.2 安装Tesseract-OCR.exe
    • 1.3 更改pytesseract.py的ocr路径
  • 2. 测试识别效果
  • 3. 实战案例?实现古诗文网验证码自动识别登录
  • 总结

 

1. 环境准备

 

1.1 安装pillow 和 pytesseract

python模块库需要 pillow 和 pytesseract 这两个库,直接pip install 安装就好了。

pip install pillow
pip install pytesseract

 

1.2 安装Tesseract-OCR.exe

下载地址:ocr下载地址

建议下载最新稳定版本:

tesseract-ocr-w64-setup-v5.0.0.20190623.exe。

安装过程很简单,直接点击下一步就完事了,其间可以默认安装路径,也可以自定义安装路径,装好之后,把它的安装路径添加到环境变量中即可,如我的这样:

我的安装位置:

python简单验证码识别的实现过程

环境变量就这样加:

python简单验证码识别的实现过程

 

1.3 更改pytesseract.py的ocr路径

我们pip install pytesseract 之后,在python解释器安装位置包里可以找到pytesseract.py文件如下:

python简单验证码识别的实现过程

打开之后,更改:

python简单验证码识别的实现过程

至此,环境准备工作算是大功告成了。

 

2. 测试识别效果

ocr一直默认安装,起始就可以支持数字和英文字母识别的,接下来

我们准备一张验证码图片:

python简单验证码识别的实现过程

将图片,命名为captcha.png,放到程序同一目录下

import pytesseract
from PIL import Image
image = Image.open("captcha.png")
print(pytesseract.image_to_string(image))

效果:

python简单验证码识别的实现过程

我们再尝试一下中文识别。

在进行识别之前我们要先下载好中文拓展语言包,
语言包地址

下载需要的的语言包,如下图,红框内为中文简体语言包:

python简单验证码识别的实现过程

下载后将该包直接放在ocr程序安装目录的tessdata文件夹里面即可。

python简单验证码识别的实现过程

找一张图片测试一下:

python简单验证码识别的实现过程

import pytesseract
from PIL import Image
image = Image.open("00.jpg")
print(pytesseract.image_to_string(image,lang='chi_sim'))

效果:

python简单验证码识别的实现过程

有时候文本识别率并不高,建议图像识别前,先对图像进行灰度化和 二值化

代码示例:

import pytesseract
from PIL import Image
file = r"00.jpg"

# 先对图像进行灰度化和 二值化
image = Image.open(file)
Img = image.convert('L')   # 灰度化
#自定义灰度界限,这里可以大于这个值为黑色,小于这个值为白色。threshold可根据实际情况进行调整(最大可为255)。
threshold = 180
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
photo = Img.point(table, '1')  #图片二值化
#保存处理好的图片
photo.save('01.jpg')

image = Image.open('01.jpg')
# 解析图片,lang='chi_sim'表示识别简体中文,默认为English
# 如果是只识别数字,可再加上参数config='--psm 6 --oem 3 -c tessedit_char_whitelist=0123456789'
content = pytesseract.image_to_string(image, lang='chi_sim')
print(content)

 

3. 实战案例?实现古诗文网验证码自动识别登录

import pytesseract
from PIL import Image
from selenium import webdriver


def save_captcha(path):
    driver = webdriver.Chrome()  # 创建浏览器对象
    driver.maximize_window()
    driver.implicitly_wait(10)
    driver.get(url=url)
    image = driver.find_element_by_id('imgCode')
    image.screenshot(path)
    return driver


def recognize_captcha(captcha_path):
    captcha = Image.open(captcha_path)  # 打开图片
    grap = captcha.convert('L')  # 对图片进行灰度化处理
    data = grap.load()  # 将图片对象加载成数据
    w, h = captcha.size  # 获取图片的大小(宽度,高度)
    # 图片二值化处理
    for x in range(w):
        for y in range(h):
            if data[x, y] < 140:
                data[x, y] = 0
            else:
                data[x, y] = 255
    code = pytesseract.image_to_string(grap)  # 对图片进行识别
    return code


def login(driver, code):
    flag = True
    email = '1242931802@qq.com' # 注册的古诗文网账号和密码
    password = 'xxxx'
    try:
        driver.find_element_by_id('email').send_keys(email)
        driver.find_element_by_id('pwd').send_keys(password)
        driver.find_element_by_id('code').send_keys(code)
        driver.implicitly_wait(10)
        driver.find_element_by_id('denglu').click()
    except Exception as ex:
        flag = False
    return flag


if __name__ == '__main__':
    url = 'https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx'
    captcha_path = './captcha.png'
    count = 1
    driver = save_captcha(captcha_path)  # 获取驱动
    code = recognize_captcha(captcha_path)  # 获取验证码
    print('识别验证码为:', code)
    if login(driver, code):
        driver.quit()

效果如下(有时候第一次可能识别失败,可以写个循环逻辑让它多识别几次,一般程序运行1-3次基本会识别成功):

python简单验证码识别的实现过程

 

总结

到此这篇关于python实现简单验证码识别的文章就介绍到这了,更多相关python验证码识别内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python Django使用forms来实现评论功能
Aug 17 Python
简单的python后台管理程序
Apr 13 Python
使用Python检测文章抄袭及去重算法原理解析
Jun 14 Python
Python实现EXCEL表格的排序功能示例
Jun 25 Python
python使用celery实现异步任务执行的例子
Aug 28 Python
Django使用中间件解决前后端同源策略问题
Sep 02 Python
Python数据分析pandas模块用法实例详解
Nov 20 Python
python+gdal+遥感图像拼接(mosaic)的实例
Mar 10 Python
浅谈Python中threading join和setDaemon用法及区别说明
May 02 Python
Python unittest如何生成HTMLTestRunner模块
Sep 08 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
Python实现视频自动打码的示例代码
Apr 08 Python
Python pygame实现中国象棋单机版源码
Python并发编程实例教程之线程的玩法
Jun 20 #Python
python迷宫问题深度优先遍历实例
Jun 20 #Python
Python虚拟环境virtualenv是如何使用的
Python机器学习之底层实现KNN
Jun 20 #Python
利用python进行数据加载
Jun 20 #Python
Python编解码问题及文本文件处理方法详解
You might like
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
JavaScript适配器模式详解
2017/10/19 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
python开发中range()函数用法实例分析
2015/11/12 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
python实现人脸签到系统
2020/04/13 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
美国购车网站:TrueCar
2016/10/19 全球购物
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
美国创意之家:BulbHead
2017/07/12 全球购物
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
《陶罐和铁罐》教学反思
2014/02/19 职场文书
求职自荐信的格式
2014/04/07 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
css 边框添加四个角的实现代码
2021/10/16 HTML / CSS