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中使用第三方库xlrd来读取Excel示例
Apr 05 Python
举例详解Python中yield生成器的用法
Aug 05 Python
Python中将变量按行写入txt文本中的方法
Apr 03 Python
解决python写入带有中文的字符到文件错误的问题
Jan 31 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 Python
Python二维码生成识别实例详解
Jul 16 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
Aug 27 Python
python numpy 反转 reverse示例
Dec 04 Python
django模型动态修改参数,增加 filter 字段的方式
Mar 16 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
Pycharm Plugins加载失败问题解决方案
Nov 28 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 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
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
2012/03/01 Javascript
JavaScript对象创建及继承原理实例解剖
2013/02/28 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
bootstrap改变按钮加载状态
2014/12/01 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
JQuery遍历DOM节点的方法
2015/06/11 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
微信小程序如何获取手机验证码
2018/11/04 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
Python生成随机数的方法
2014/01/14 Python
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
Python使用type动态创建类操作示例
2020/02/29 Python
Python 合并拼接字符串的方法
2020/07/28 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
会计专业自我评价
2014/02/12 职场文书
《钱学森》听课反思
2014/03/01 职场文书
党员创先争优活动总结
2014/05/04 职场文书
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL