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正则表达式匹配ip地址实例
Oct 09 Python
python 打印出所有的对象/模块的属性(实例代码)
Sep 11 Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 Python
python使用 HTMLTestRunner.py生成测试报告
Oct 20 Python
详解用Python处理HTML转义字符的5种方式
Dec 27 Python
Python爬虫获取图片并下载保存至本地的实例
Jun 01 Python
用python实现将数组元素按从小到大的顺序排列方法
Jul 02 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
python 文本单词提取和词频统计的实例
Dec 22 Python
详解python和matlab的优势与区别
Jun 28 Python
Python简单处理坐标排序问题示例
Jul 11 Python
如何使用scrapy中的ItemLoader提取数据
Sep 30 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 和 MySQL 基础教程(三)
2006/10/09 PHP
用PHP实现递归循环每一个目录
2010/08/08 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
学习php开源项目的源码指南
2014/12/21 PHP
php用xpath解析html的代码实例讲解
2019/02/14 PHP
php使用pecl方式安装扩展操作示例
2019/08/12 PHP
JavaScript中的事件处理
2008/01/16 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
数据结构中的各种排序方法小结(JS实现)
2016/07/23 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
python友情链接检查方法
2015/07/08 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
Python如何解除一个装饰器
2020/08/07 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
一套Delphi的笔试题一
2016/02/14 面试题
医院门卫岗位职责
2013/12/30 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
人民检察院起诉书
2015/05/20 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
python文件目录操作之os模块
2021/05/08 Python
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫