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 相关文章推荐
Flask实现跨域请求的处理方法
Sep 27 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
Oct 14 Python
python 文件查找及内容匹配方法
Oct 25 Python
对Python中TKinter模块中的Label组件实例详解
Jun 14 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
Python中remove漏删和索引越界问题的解决
Mar 18 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
使用OpenCV对车道进行实时检测的实现示例代码
Jun 19 Python
详解用Python爬虫获取百度企业信用中企业基本信息
Jul 02 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
Dec 04 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 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
2019十大人气国漫
2020/03/13 国漫
人族 Terran 魔法与科技
2020/03/14 星际争霸
选择PHP作为网站开发语言的原因分享
2012/01/03 PHP
php后门URL的防范
2013/11/12 PHP
通过php修改xml文档内容的方法
2015/01/23 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
php中file_exists函数使用详解
2015/05/08 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
javascript 保存文件到本地实现方法
2012/11/29 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
javascript控制图片播放的实现代码
2020/07/29 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
简单实现python进度条脚本
2017/12/18 Python
python3+PyQt5实现自定义窗口部件Counters
2018/04/20 Python
python基础 range的用法解析
2019/08/23 Python
基于python实现地址和经纬度转换
2020/05/19 Python
详解Flask前后端分离项目案例
2020/07/24 Python
css3实现顶部社会化分享按钮示例
2014/05/06 HTML / CSS
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
中学生班主任评语
2014/01/30 职场文书
联欢晚会主持词
2014/03/25 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
农村党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
2015年仓库工作总结
2015/04/09 职场文书
军训后的感想
2015/08/07 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
python实现自定义日志的具体方法
2021/05/28 Python