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模块包中__init__.py文件功能分析
Jun 14 Python
Python正则表达式知识汇总
Sep 22 Python
python线程池threadpool使用篇
Apr 27 Python
在Python中使用gRPC的方法示例
Aug 08 Python
Python多线程原理与用法详解
Aug 20 Python
python版本五子棋的实现代码
Dec 11 Python
python画柱状图--不同颜色并显示数值的方法
Dec 13 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
python sqlite的Row对象操作示例
Sep 11 Python
python获取依赖包和安装依赖包教程
Feb 13 Python
python中PyQuery库用法分享
Jan 15 Python
python re模块常见用法例举
Mar 01 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实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
[01:45]典藏宝瓶2+祈求者身心——这就是DOTA2TI9总奖金突破3000万美元的秘密
2019/07/21 DOTA
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
python查看模块安装位置的方法
2018/10/16 Python
python3 读取Excel表格中的数据
2018/10/16 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
应届毕业生求职信范文
2014/05/08 职场文书
热情服务标语
2014/10/07 职场文书
护理心得体会范文
2016/01/22 职场文书
学习党史心得体会2016
2016/01/23 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
Vue全局事件总线你了解吗
2022/02/24 Vue.js
实战Python爬虫爬取酷我音乐
2022/04/11 Python