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处理cookie详解
Feb 07 Python
使用Python的Flask框架实现视频的流媒体传输
Mar 31 Python
利用Python实现颜色色值转换的小工具
Oct 27 Python
Flask框架学习笔记之使用Flask实现表单开发详解
Aug 12 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
Jan 06 Python
Pytorch 实现冻结指定卷积层的参数
Jan 06 Python
Selenium常见异常解析及解决方案示范
Apr 10 Python
Python OpenCV读取中文路径图像的方法
Jul 02 Python
浅析Python __name__ 是什么
Jul 07 Python
Pycharm快捷键配置详细整理
Oct 13 Python
python 利用toapi库自动生成api
Oct 19 Python
Python+OpenCV实现图片中的圆形检测
Apr 07 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 图片水印类代码
2012/08/27 PHP
php对数组排序代码分享
2014/02/24 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
2016/06/28 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
2017/11/25 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
如何提高Dom访问速度
2017/01/05 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
python爬取NUS-WIDE数据库图片
2016/10/05 Python
使用python实现生成用户信息
2017/03/20 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
Django框架创建mysql连接与使用示例
2019/07/29 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
2020/05/13 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
Python requests上传文件实现步骤
2020/09/15 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
英国最大的电脑零售连锁店集团:PC World
2016/10/10 全球购物
《赶海》教学反思
2014/04/20 职场文书
2015年六年级班主任工作总结
2015/10/15 职场文书
Python中的 Set 与 dict
2022/03/13 Python
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript