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交换变量
Sep 06 Python
Python getopt模块处理命令行选项实例
May 13 Python
Python多线程编程(五):死锁的形成
Apr 05 Python
Python面向对象之接口、抽象类与多态详解
Aug 27 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
Feb 13 Python
python递归法解决棋盘分割问题
Jul 17 Python
python pandas 时间日期的处理实现
Jul 30 Python
numpy.ndarray 实现对特定行或列取值
Dec 05 Python
python实现单张图像拼接与批量图片拼接
Mar 23 Python
Python使用graphviz画流程图过程解析
Mar 31 Python
解决Keras使用GPU资源耗尽的问题
Jun 22 Python
python生成word合同的实例方法
Jan 12 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开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
使用php实现快钱支付功能(涉及到接口)
2013/07/01 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
php编程每天必学之验证码
2016/03/03 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
JS库之ParticlesJS使用简介
2017/09/12 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
2017/10/20 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
Python Xml文件添加字节属性的方法
2018/03/31 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
python 定时器,实现每天凌晨3点执行的方法
2019/02/20 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
Python代码注释规范代码实例解析
2020/08/14 Python
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
搞笑获奖感言
2014/01/30 职场文书
财务学生的职业生涯发展
2014/02/11 职场文书
同学会感言
2015/07/30 职场文书
Oracle笔记
2021/04/05 Oracle
详细了解java监听器和过滤器
2021/07/09 Java/Android
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android