python opencv pytesseract 验证码识别的实现


Posted in Python onAugust 28, 2020

一、环境配置

需要 pillow 和 pytesseract 这两个库,pip install 安装就好了。

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 opencv 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 opencv 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 opencv 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 opencv pytesseract 验证码识别的实现

到此这篇关于python opencv pytesseract 验证码识别的实现的文章就介绍到这了,更多相关opencv pytesseract 验证码识别内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中实现三目运算的方法
Jun 21 Python
Python字符串特性及常用字符串方法的简单笔记
Jan 04 Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 Python
浅谈编码,解码,乱码的问题
Dec 30 Python
Python找出最小的K个数实例代码
Jan 04 Python
利用Python如何批量更新服务器文件
Jul 29 Python
python中正则表达式 re.findall 用法
Oct 23 Python
python爬虫获取小区经纬度以及结构化地址
Dec 30 Python
python广度优先搜索得到两点间最短路径
Jan 17 Python
Python对接六大主流数据库(只需三步)
Jul 31 Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 Python
vue学习笔记之动态组件和v-once指令简单示例
Feb 29 Python
简单的命令查看安装的python版本号
Aug 28 #Python
python进行OpenCV实战之画图(直线、矩形、圆形)
Aug 27 #Python
python opencv实现简易画图板
Aug 27 #Python
python实现画图工具
Aug 27 #Python
20行Python代码实现一款永久免费PDF编辑工具的实现
Aug 27 #Python
基于python实现操作redis及消息队列
Aug 27 #Python
Python3如何在服务器打印资产信息
Aug 27 #Python
You might like
php 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
CCPry JS类库 代码
2009/10/30 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
详解JavaScript 中的 replace 方法
2016/01/01 Javascript
BootStrap selectpicker
2016/06/20 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
python中requests和https使用简单示例
2018/01/18 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
详解python 爬取12306验证码
2019/05/10 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
python自动点赞功能的实现思路
2020/02/26 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
如何理解Python中包的引入
2020/05/29 Python
Python 使用office365邮箱的示例
2020/10/29 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
自荐信范文
2013/12/10 职场文书
公司新员工的演讲稿注意事项
2014/01/01 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
学校四风对照检查材料
2014/08/28 职场文书
女性励志书籍推荐
2019/08/19 职场文书
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技