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 MySQLdb模块连接操作mysql数据库实例
Apr 08 Python
Python Pandas分组聚合的实现方法
Jul 02 Python
django创建简单的页面响应实例教程
Sep 06 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
Python Tensor FLow简单使用方法实例详解
Jan 14 Python
Pytorch转onnx、torchscript方式
May 25 Python
python如何写try语句
Jul 14 Python
Lombok插件安装(IDEA)及配置jar包使用详解
Nov 04 Python
如何利用python正则表达式匹配版本信息
Dec 09 Python
新手必备Python开发环境搭建教程
May 28 Python
python实现会员管理系统
Mar 18 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 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
MVC模式的PHP实现
2006/10/09 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
JS 文件大小判断的实现代码
2010/04/07 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
浅谈js中调用函数时加不加括号的问题
2016/07/28 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
webpack使用 babel-loader 转换 ES6代码示例
2017/08/21 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
2018/12/10 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
Jquery异步上传文件代码实例
2019/11/13 jQuery
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
深入理解Django的中间件middleware
2018/03/14 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
python实现决策树分类
2018/08/30 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
Python如何在windows环境安装pip及rarfile
2020/06/15 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
golang判断key是否在map中的代码
2021/04/24 Golang
Python实现打乒乓小游戏
2021/09/25 Python