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操作MongoDB基础知识
Nov 01 Python
Python格式化压缩后的JS文件的方法
Mar 05 Python
详解Python的Django框架中manage命令的使用与扩展
Apr 11 Python
Python实现的多进程和多线程功能示例
May 29 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
Apr 23 Python
Python 连接 MySQL 的几种方法
Sep 09 Python
python编写实现抽奖器
Sep 10 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
Jan 15 Python
python基础之模块的导入
Oct 24 Python
对象析构函数__del__在Python中何时使用
Mar 22 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
php后退一页表单内容保存实现方法
2012/06/17 PHP
zf框架的校验器InArray使用示例
2014/03/13 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
jquery $.ajax入门应用二
2008/11/19 Javascript
JavaScript经典效果集锦
2010/07/06 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
jquery remove方法应用详解
2012/11/22 Javascript
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
vue开发心得和技巧分享
2016/10/27 Javascript
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
Python3字符串学习教程
2015/08/20 Python
解析Python中while true的使用
2015/10/13 Python
python实现自动发送邮件发送多人、群发、多附件的示例
2018/01/23 Python
Python os.access()用法实例
2019/02/18 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
Python递归实现打印多重列表代码
2020/02/27 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
详解HTML5常用的语义化标签
2019/09/27 HTML / CSS
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
商务英语本科生的自我评价分享
2013/11/15 职场文书
战友聚会策划方案
2014/06/13 职场文书
新文化运动的口号
2014/06/21 职场文书
2015入党自荐书范文
2015/03/05 职场文书
2016春季运动会前导词
2015/11/25 职场文书
电力安全学习心得体会
2016/01/18 职场文书
《追风筝的人》:人心中的成见是座大山,但请不忘初心
2019/11/15 职场文书