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 import自定义模块方法
Feb 12 Python
python 二分查找和快速排序实例详解
Oct 13 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
python取数作为临时极大值(极小值)的方法
Oct 15 Python
Python实现分段线性插值
Dec 17 Python
Python实现Singleton模式的方式详解
Aug 08 Python
Python selenium文件上传下载功能代码实例
Apr 13 Python
python中if及if-else如何使用
Jun 02 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
python区块链实现简版工作量证明
May 25 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 MsSql server时遇到的中文编码问题
2009/06/11 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
一个简单的JavaScript 日期计算算法
2009/09/11 Javascript
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
在JavaScript中调用Java类和接口的方法
2016/09/07 Javascript
jquery radio的取值_radio的选中_radio的重置方法
2016/09/20 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
Nodejs之http的表单提交
2017/07/07 NodeJs
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
Python自动化部署工具Fabric的简单上手指南
2016/04/19 Python
TensorFlow神经网络优化策略学习
2018/03/09 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
python 实现UTC时间加减的方法
2018/12/31 Python
python字典一键多值实例代码分享
2019/06/14 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
设备管理实施方案
2014/05/31 职场文书
财务部岗位职责范本
2015/04/14 职场文书
2015年学校总务处工作总结
2015/05/19 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android