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实现的检测网站挂马程序
Nov 30 Python
Python线程的两种编程方式
Apr 14 Python
python简单实例训练(21~30)
Nov 15 Python
Python 数据处理库 pandas进阶教程
Apr 21 Python
python 将md5转为16字节的方法
May 29 Python
Python SQL查询并生成json文件操作示例
Aug 17 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
python实现简单五子棋游戏
Jun 18 Python
介绍一款python类型检查工具pyright(推荐)
Jul 03 Python
Python Selenium 之数据驱动测试的实现
Aug 01 Python
django中media媒体路径设置的步骤
Nov 15 Python
Python基于callable函数检测对象是否可被调用
Oct 16 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
第十二节--类的自动加载
2006/11/16 PHP
PHP防注入安全代码
2008/04/09 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
php实现json编码的方法
2015/07/30 PHP
四个PHP非常实用的功能
2015/09/29 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
PHP链表操作简单示例
2016/10/15 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
仿百度输入框智能提示的js代码
2013/08/22 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
2017/01/06 Javascript
canvas时钟效果
2017/02/16 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
对python中dict和json的区别详解
2018/12/18 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
焊接专业毕业生求职信
2013/10/01 职场文书
团代会主持词
2014/04/02 职场文书
初三开学计划书
2014/04/27 职场文书
2014年科技工作总结
2014/11/26 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
2015年英语教研组工作总结
2015/05/23 职场文书
学风建设主题班会
2015/08/17 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
 Python 中 logging 模块使用详情
2022/03/03 Python
redis protocol通信协议及使用详解
2022/07/15 Redis