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 相关文章推荐
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
Python中使用Boolean操作符做真值测试实例
Jan 30 Python
Django实现全文检索的方法(支持中文)
May 14 Python
python实现合并多个list及合并多个django QuerySet的方法示例
Jun 11 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
将python文件打包exe独立运行程序方法详解
Feb 12 Python
Python接收手机短信的代码整理
Aug 02 Python
python产生模拟数据faker库的使用详解
Nov 04 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 Python
python如何正确使用yield
May 21 Python
pytorch中的 .view()函数的用法介绍
Mar 17 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 删除记录实现代码
2009/03/12 PHP
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
php头像上传预览实例代码
2017/05/02 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
2016/01/28 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
python函数缺省值与引用学习笔记分享
2013/02/10 Python
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
python算法演练_One Rule 算法(详解)
2017/05/17 Python
使用requests库制作Python爬虫
2018/03/25 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
python列表生成器迭代器实例解析
2019/12/19 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
写好自荐信的几个要点
2013/12/26 职场文书
办公室人员先进事迹
2014/01/27 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
新书发布会策划方案
2014/06/09 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server