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中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
python基础教程之python消息摘要算法使用示例
Feb 10 Python
零基础写python爬虫之爬虫编写全记录
Nov 06 Python
详解Python验证码识别
Jan 25 Python
说一说Python logging
Apr 15 Python
对python Tkinter Text的用法详解
Oct 11 Python
Python异常处理知识点总结
Feb 18 Python
学习Django知识点分享
Sep 11 Python
Python Sphinx使用实例及问题解决
Jan 17 Python
10个python爬虫入门实例(小结)
Nov 01 Python
Python max函数中key的用法及原理解析
Jun 26 Python
你需要掌握的20个Python常用技巧
Feb 28 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/06/25 PHP
php mysql_real_escape_string函数用法与实例教程
2013/09/30 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
jquery.cvtooltip.js 基于jquery的气泡提示插件
2010/11/19 Javascript
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
JS 获取select(多选下拉)中所选值的示例代码
2013/08/02 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
详解javascript高级定时器
2015/12/31 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
解决iview table组件里的 固定列 表格不自适应的问题
2020/11/13 Javascript
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
python命令行参数用法实例分析
2019/06/25 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
python中time库的实例使用方法
2019/10/31 Python
python实现tail -f 功能
2020/01/17 Python
html5 canvas实现圆形时钟代码分享
2013/12/25 HTML / CSS
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
学校端午节活动方案
2014/08/23 职场文书
2015年党员个人工作总结
2015/05/13 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书