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 相关文章推荐
压缩包密码破解示例分享(类似典破解)
Jan 17 Python
Python文件夹与文件的操作实现代码
Jul 13 Python
九步学会Python装饰器
May 09 Python
python中enumerate函数用法实例分析
May 20 Python
Python注释详解
Jun 01 Python
Python多线程实现同步的四种方式
May 02 Python
pycharm运行程序时在Python console窗口中运行的方法
Dec 03 Python
python 实现倒排索引的方法
Dec 25 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
python 处理微信对账单数据的实例代码
Jul 19 Python
Python类中方法getitem和getattr详解
Aug 30 Python
Python字典底层实现原理详解
Dec 18 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&amp;&amp;mysql)六
2006/10/09 PHP
PHP 已经成熟
2006/12/04 PHP
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
python下MySQLdb用法实例分析
2015/06/08 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
python创建n行m列数组示例
2019/12/02 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
STRATHBERRY苏贝瑞包包官网:西班牙高级工匠手工打造
2020/11/10 全球购物
航空大学应届生求职信
2013/11/10 职场文书
工程业务员工作职责
2013/12/07 职场文书
先进个人事迹材料
2014/01/25 职场文书
党的群众路线对照检查材料
2014/08/27 职场文书
保密工作整改报告
2014/11/06 职场文书
优秀班主任先进事迹材料
2014/12/16 职场文书
休假证明书
2015/06/24 职场文书
500字作文之关于爸爸
2019/11/14 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
python中opencv实现图片文本倾斜校正
2021/06/11 Python
MySQL插入数据与查询数据
2022/03/25 MySQL
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis