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之不要红头文件(1)
Sep 28 Python
python正则表达式中的括号匹配问题
Dec 14 Python
详解python的数字类型变量与其方法
Nov 20 Python
Python实现将doc转化pdf格式文档的方法
Jan 19 Python
详解django.contirb.auth-认证
Jul 16 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 Python
在linux下实现 python 监控usb设备信号
Jul 03 Python
Python Django 实现简单注册功能过程详解
Jul 29 Python
Python的bit_length函数来二进制的位数方法
Aug 27 Python
基于python连接oracle导并出数据文件
Apr 28 Python
Python pexpect模块及shell脚本except原理解析
Aug 03 Python
Python 可迭代对象 iterable的具体使用
Aug 07 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树形菜单代码
2014/11/19 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
详解PHP文件的自动加载(autoloading)
2018/02/04 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
使用javascript访问XML数据的实例
2006/12/27 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
ionic js 模型 $ionicModal 可以遮住用户主界面的内容框
2016/06/06 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
JS删除数组里的某个元素方法
2018/02/03 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
Python实现自动访问网页的例子
2020/02/21 Python
Python 中如何写注释
2020/08/28 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
请说出你所知道的线程同步的方法
2013/04/19 面试题
销售文员岗位职责
2013/11/29 职场文书
教师自我鉴定
2013/12/13 职场文书
技校毕业生的自我评价
2013/12/27 职场文书
公司道歉信范文
2014/01/09 职场文书
致200米运动员广播稿
2014/02/06 职场文书
新闻编辑求职信
2014/04/09 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
工作经历证明书范文
2014/11/02 职场文书
2014年网络管理员工作总结
2014/12/01 职场文书