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实现保存网页到本地示例
Mar 16 Python
python实现猜数字游戏(无重复数字)示例分享
Mar 29 Python
Python psutil模块简单使用实例
Apr 28 Python
python如何通过protobuf实现rpc
Mar 06 Python
Python实现的桶排序算法示例
Nov 29 Python
python版本单链表实现代码
Sep 28 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
在Python中使用MongoEngine操作数据库教程实例
Dec 03 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
Python中os模块的简单使用及重命名操作
Apr 17 Python
Python 恐龙跑跑小游戏实现流程
Feb 15 Python
Python中Matplotlib的点、线形状、颜色以及绘制散点图
Apr 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中ADODB类详解
2008/03/25 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
jscript读写二进制文件的方法
2015/04/22 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
python实现每次处理一个字符的三种方法
2014/10/09 Python
Django实现自定义404,500页面教程
2017/03/26 Python
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
python脚本作为Windows服务启动代码详解
2018/02/11 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
Python流程控制语句的深入讲解
2020/06/15 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
如何写一份好的自荐信
2014/01/02 职场文书
团日活动总结
2014/04/28 职场文书
英语专业求职信
2014/07/08 职场文书
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
中小学生学籍证明
2014/10/25 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
家长会主持词开场白
2015/05/29 职场文书