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代码真的很爽
Aug 26 Python
Cpy和Python的效率对比
Mar 20 Python
分享几道你可能遇到的python面试题
Jul 24 Python
Python面向对象编程基础解析(二)
Oct 26 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
Oct 21 Python
PyCharm代码回滚,恢复历史版本的解决方法
Oct 22 Python
利用python脚本如何简化jar操作命令
Feb 24 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
linux系统下pip升级报错的解决方法
Jan 31 Python
python中os.remove()用法及注意事项
Jan 31 Python
python实现简单倒计时功能
Apr 21 Python
详解python网络进程
Jun 15 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中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
YII中assets的使用示例
2014/07/31 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
php+MySQL实现登录时验证登录名和密码是否正确
2016/05/10 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
使用Python中PDB模块中的命令来调试Python代码的教程
2015/03/30 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
工厂实习感言
2014/01/14 职场文书
平民服装店创业计划书
2014/01/17 职场文书
元旦晚会邀请函
2014/01/27 职场文书
入学申请自荐信范文
2014/02/26 职场文书
安全协议书
2014/04/23 职场文书
教师党的群众路线学习心得体会
2014/11/04 职场文书
离婚起诉书范本
2015/05/18 职场文书
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python