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 相关文章推荐
通过mod_python配置运行在Apache上的Django框架
Jul 22 Python
Python实现比较扑克牌大小程序代码示例
Dec 06 Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 Python
Django中使用Celery的教程详解
Aug 24 Python
使用Python进行目录的对比方法
Nov 01 Python
Python中format()格式输出全解
Apr 12 Python
python使用MQTT给硬件传输图片的实现方法
May 05 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
Python基于QQ邮箱实现SSL发送
Apr 26 Python
python和C++共享内存传输图像的示例
Oct 27 Python
python中@property的作用和getter setter的解释
Dec 22 Python
python 下载文件的几种方法汇总
Jan 06 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图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
JS高级笔记
2011/07/13 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
js实现的星星评分功能函数
2015/12/09 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
jquery自定义表单验证插件
2016/10/12 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
2020/05/09 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
Python调用命令行进度条的方法
2015/05/05 Python
python获取mp3文件信息的方法
2015/06/15 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
python获取当前目录路径和上级路径的实例
2018/04/26 Python
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
python3.X 抓取火车票信息【修正版】
2018/06/19 Python
python绘制立方体的方法
2018/07/02 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
django settings.py 配置文件及介绍
2019/07/15 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
Python pip配置国内源的方法
2020/02/14 Python
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
高中生校园生活自我评价
2013/09/19 职场文书
毕业生自荐信的主要内容
2013/10/29 职场文书
大学四年规划书范文
2013/12/27 职场文书
企业文化建设实施方案
2014/03/22 职场文书
一分钟演讲稿
2014/04/30 职场文书
好的促销活动方案
2014/08/21 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
Nginx内网单机反向代理的实现
2021/11/07 Servers