Python+Pillow+Pytesseract实现验证码识别


Posted in Python onMay 11, 2022

利用pillow和pytesseract来实现验证码的识别

一、环境配置

需要 pillow 和 pytesseract 这两个库,pip install 安装就好了。

pip install pillow -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip install pytesseract -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

安装好Tesseract-OCR.exe

pytesseract 库的配置:搜索找到pytesseract.py,打开该.py文件,找到 tesseract_cmd,改变它的值为刚才安装 tesseract.exe 的路径。

Python+Pillow+Pytesseract实现验证码识别

二、验证码识别

识别验证码,需要先对图像进行预处理,去除会影响识别准确度的线条或噪点,提高识别准确度。

实例1

import cv2 as cv
import pytesseract
from PIL import Image

def recognize_text(image):
    # 边缘保留滤波  去噪
    dst = cv.pyrMeanShiftFiltering(image, sp=10, sr=150)
    # 灰度图像
    gray = cv.cvtColor(dst, cv.COLOR_BGR2GRAY)
    # 二值化
    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
    # 形态学操作   腐蚀  膨胀
    erode = cv.erode(binary, None, iterations=2)
    dilate = cv.dilate(erode, None, iterations=1)
    cv.imshow('dilate', dilate)
    # 逻辑运算  让背景为白色  字体为黑  便于识别
    cv.bitwise_not(dilate, dilate)
    cv.imshow('binary-image', dilate)
    # 识别
    test_message = Image.fromarray(dilate)
    text = pytesseract.image_to_string(test_message)
    print(f'识别结果:{text}')


src = cv.imread(r'./test/044.png')
cv.imshow('input image', src)
recognize_text(src)
cv.waitKey(0)
cv.destroyAllWindows()

运行效果如下:

识别结果:3n3D
Process finished with exit code 0

Python+Pillow+Pytesseract实现验证码识别

实例2

import cv2 as cv
import pytesseract
from PIL import Image

def recognize_text(image):
    # 边缘保留滤波  去噪
    blur =cv.pyrMeanShiftFiltering(image, sp=8, sr=60)
    cv.imshow('dst', blur)
    # 灰度图像
    gray = cv.cvtColor(blur, cv.COLOR_BGR2GRAY)
    # 二值化
    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
    print(f'二值化自适应阈值:{ret}')
    cv.imshow('binary', binary)
    # 形态学操作  获取结构元素  开操作
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 2))
    bin1 = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel)
    cv.imshow('bin1', bin1)
    kernel = cv.getStructuringElement(cv.MORPH_OPEN, (2, 3))
    bin2 = cv.morphologyEx(bin1, cv.MORPH_OPEN, kernel)
    cv.imshow('bin2', bin2)
    # 逻辑运算  让背景为白色  字体为黑  便于识别
    cv.bitwise_not(bin2, bin2)
    cv.imshow('binary-image', bin2)
    # 识别
    test_message = Image.fromarray(bin2)
    text = pytesseract.image_to_string(test_message)
    print(f'识别结果:{text}')


src = cv.imread(r'./test/045.png')
cv.imshow('input image', src)
recognize_text(src)
cv.waitKey(0)
cv.destroyAllWindows()

运行效果如下:

二值化自适应阈值:181.0
识别结果:8A62N1
Process finished with exit code 0

Python+Pillow+Pytesseract实现验证码识别

实例3

import cv2 as cv
import pytesseract
from PIL import Image

def recognize_text(image):
    # 边缘保留滤波  去噪
    blur = cv.pyrMeanShiftFiltering(image, sp=8, sr=60)
    cv.imshow('dst', blur)
    # 灰度图像
    gray = cv.cvtColor(blur, cv.COLOR_BGR2GRAY)
    # 二值化  设置阈值  自适应阈值的话 黄色的4会提取不出来
    ret, binary = cv.threshold(gray, 185, 255, cv.THRESH_BINARY_INV)
    print(f'二值化设置的阈值:{ret}')
    cv.imshow('binary', binary)
    # 逻辑运算  让背景为白色  字体为黑  便于识别
    cv.bitwise_not(binary, binary)
    cv.imshow('bg_image', binary)
    # 识别
    test_message = Image.fromarray(binary)
    text = pytesseract.image_to_string(test_message)
    print(f'识别结果:{text}')


src = cv.imread(r'./test/045.jpg')
cv.imshow('input image', src)
recognize_text(src)
cv.waitKey(0)
cv.destroyAllWindows()

运行效果如下:

二值化设置的阈值:185.0
识别结果:7364
Process finished with exit code 0

Python+Pillow+Pytesseract实现验证码识别

到此这篇关于Python+Pillow+Pytesseract实现验证码识别的文章就介绍到这了!


Tags in this post...

Python 相关文章推荐
python连接mysql并提交mysql事务示例
Mar 05 Python
python实现发送和获取手机短信验证码
Jan 15 Python
windows下ipython的安装与使用详解
Oct 20 Python
Python中scatter函数参数及用法详解
Nov 08 Python
python实现csv格式文件转为asc格式文件的方法
Mar 23 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
Jun 14 Python
python实现爬山算法的思路详解
Apr 09 Python
简单了解python反射机制的一些知识
Jul 13 Python
在python中实现同行输入/接收多个数据的示例
Jul 20 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
matplotlib对象拾取事件处理的实现
Jan 14 Python
python中print格式化输出的问题
Apr 16 Python
Python 绘制多因子柱状图
PyCharm 配置SSH和SFTP连接远程服务器
May 11 #Python
Python 文字识别
May 11 #Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
May 11 #Python
Python 匹配文本并在其上一行追加文本
May 11 #Python
Python 一键获取电脑浏览器的账号密码
May 11 #Python
图神经网络GNN算法
May 11 #Python
You might like
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
用函数式编程技术编写优美的 JavaScript
2006/11/25 Javascript
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
通过Javascript将数据导出到外部Excel文档的函数代码
2012/06/15 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
详解Vue2.x-directive的学习笔记
2017/07/17 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
Python的Django框架中的表单处理示例
2015/07/17 Python
Django基础之Model操作步骤(介绍)
2017/05/27 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
python三引号如何输入
2020/07/06 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
销售所有的狗狗产品:Dog.com
2016/10/13 全球购物
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
师范大学毕业自我鉴定
2013/11/21 职场文书
个人充满哲理的自我评价
2014/02/20 职场文书
工程部部长岗位职责
2015/02/12 职场文书
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android
利用Redis实现点赞功能的示例代码
2022/06/28 Redis