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中一些自然语言工具的使用的入门教程
Apr 13 Python
Python类属性与实例属性用法分析
May 09 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 Python
Python查找文件中包含中文的行方法
Dec 19 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
Aug 09 Python
Django获取该数据的上一条和下一条方法
Aug 12 Python
python使用sessions模拟登录淘宝的方式
Aug 16 Python
django中使用POST方法获取POST数据
Aug 20 Python
python中单下划线(_)和双下划线(__)的特殊用法
Aug 29 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
Oct 28 Python
python实现扫雷小游戏
Apr 24 Python
python多次执行绘制条形图
Apr 20 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 has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
php代码审计比较有意思的例子
2014/05/07 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
Prototype ObjectRange对象学习
2009/07/19 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
js实现批量删除功能
2020/08/27 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
python中ConfigParse模块的用法
2014/09/29 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
2015/04/28 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
python使用Geany编辑器配置方法
2020/02/21 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
遮罩层 + Iframe实现界面自动显示的示例代码
2020/04/26 HTML / CSS
七匹狼男装广告词
2014/03/21 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
高校教师个人总结
2015/02/10 职场文书
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis