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 相关文章推荐
以一段代码为实例快速入门Python2.7
Mar 31 Python
在Python的Flask框架中实现单元测试的教程
Apr 20 Python
Python logging管理不同级别log打印和存储实例
Jan 19 Python
python实现求最长回文子串长度
Jan 22 Python
python调用OpenCV实现人脸识别功能
May 25 Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 Python
python装饰器的特性原理详解
Dec 25 Python
Python3的socket使用方法详解
Feb 18 Python
python+selenium+PhantomJS抓取网页动态加载内容
Feb 25 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 Python
python读取图像矩阵文件并转换为向量实例
Jun 18 Python
python+flask编写一个简单的登录接口
Nov 13 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 is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
微信小程序开发之map地图实现教程
2017/06/08 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
基于Vue实现图书管理功能
2017/10/17 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
JS实现百度搜索框
2021/02/25 Javascript
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
python发送多人邮件没有展示收件人问题的解决方法
2019/06/21 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
Django 框架模型操作入门教程
2019/11/05 Python
pandas-resample按时间聚合实例
2019/12/27 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
英国内衣连锁店:Boux Avenue
2018/01/24 全球购物
以下的初始化有什么区别
2013/12/16 面试题
网络工程专业毕业生推荐信
2013/10/28 职场文书
给同学的道歉信
2014/01/16 职场文书
中学生运动会口号
2014/06/07 职场文书
小学生反邪教心得体会
2016/01/15 职场文书
商业计划书如何写?关键问题有哪些?
2019/07/11 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书