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操作摄像头截图实现远程监控的例子
Mar 25 Python
Python 将RGB图像转换为Pytho灰度图像的实例
Nov 14 Python
python中pylint使用方法(pylint代码检查)
Apr 06 Python
判断python字典中key是否存在的两种方法
Aug 10 Python
Python爬虫小技巧之伪造随机的User-Agent
Sep 13 Python
Python对象与引用的介绍
Jan 24 Python
python 二维数组90度旋转的方法
Jan 28 Python
详解python数据结构和算法
Apr 18 Python
jupyternotebook 撤销删除的操作方式
Apr 17 Python
python如何快速生成时间戳
Jul 21 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 02 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 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/05/10 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
14款NodeJS Web框架推荐
2014/07/11 NodeJs
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
jQuery实现平滑滚动到指定锚点的方法
2015/03/20 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
详解如何实现一个简单的 vuex
2018/02/10 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python利用matplotlib库绘制饼图的方法示例
2016/12/18 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
mac使用python识别图形验证码功能
2020/01/10 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
HTML5 Canvas鼠标与键盘事件demo示例
2013/07/04 HTML / CSS
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
初中化学教学反思
2014/01/23 职场文书
股权转让意向书
2014/04/01 职场文书
2016年119消防宣传日活动总结
2016/04/05 职场文书