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实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 Python
Windows下Python的Django框架环境部署及应用编写入门
Mar 10 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
Mar 19 Python
Python网络编程使用select实现socket全双工异步通信功能示例
Apr 09 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
Python 中@property的用法详解
Jan 15 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
Jun 05 Python
Django+RestFramework API接口及接口文档并返回json数据操作
Jul 12 Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 Python
python 如何区分return和yield
Sep 22 Python
python基于OpenCV模板匹配识别图片中的数字
Mar 31 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中,文件上传
2006/12/06 PHP
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
自己写了一个php检测文件编码的函数
2014/04/21 PHP
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
js实现文本框中焦点在最后位置
2014/03/04 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
npm的lock机制解析
2019/06/20 Javascript
VUE.js实现动态设置输入框disabled属性
2019/10/28 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
python 布尔操作实现代码
2013/03/23 Python
Python绘制3D图形
2018/05/03 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
2019/12/26 Python
Bootstrap 学习分享
2012/11/12 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
优秀研究生自我鉴定
2013/12/04 职场文书
电气个人求职信范文
2014/02/04 职场文书
开门红主持词
2014/04/02 职场文书
答谢会策划方案
2014/05/12 职场文书
2014年实习期工作总结
2014/11/27 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python
python基于turtle绘制几何图形
2021/06/15 Python
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL
Redis实现订单过期删除的方法步骤
2022/06/05 Redis