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求crc32值的方法
Oct 05 Python
Python实现登录人人网并抓取新鲜事的方法
May 11 Python
python魔法方法-属性转换和类的表示详解
Jul 22 Python
Python中操作mysql的pymysql模块详解
Sep 13 Python
详解python发送各类邮件的主要方法
Dec 22 Python
Python基于回溯法子集树模板解决取物搭配问题实例
Sep 02 Python
Python3实现发送QQ邮件功能(文本)
Dec 15 Python
Python+OpenCV人脸检测原理及示例详解
Oct 19 Python
python将每个单词按空格分开并保存到文件中
Mar 19 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 Python
浅谈Selenium+Webdriver 常用的元素定位方式
Jan 13 Python
Python中递归以及递归遍历目录详解
Oct 24 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中soap的用法实例
2014/10/24 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
js滚动条多种样式,推荐
2007/02/05 Javascript
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
将Datatable转化成json发送前台实现思路
2013/09/06 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
JavaScript节点及列表操作实例小结
2015/08/05 Javascript
js window对象属性和方法相关资料整理
2015/11/11 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
js 定义对象数组(结合)多维数组方法
2016/07/27 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
JS实现无缝循环marquee滚动效果
2017/05/22 Javascript
深入理解Promise.all
2018/08/08 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
Python生成pdf文件的方法
2014/08/04 Python
Python实现身份证号码解析
2015/09/01 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
举例讲解Python中的迭代器、生成器与列表解析用法
2016/03/20 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
python常用数据重复项处理方法
2019/11/22 Python
python为什么会环境变量设置不成功
2020/06/23 Python
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
实习生个人的自我评价
2013/12/08 职场文书
超市理货员岗位职责
2014/07/04 职场文书
群众路线领导对照材料
2014/08/23 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
锅炉工岗位职责
2015/02/13 职场文书
工作自我评价范文
2015/03/05 职场文书
湘江北去观后感
2015/06/15 职场文书
详解JS ES6编码规范
2021/05/07 Javascript
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js