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深入学习之装饰器
Aug 31 Python
python实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
Python之列表的插入&替换修改方法
Jun 28 Python
python使用Matplotlib画条形图
Mar 25 Python
python使用turtle绘制国际象棋棋盘
May 23 Python
python的一些加密方法及python 加密模块
Jul 11 Python
Python配置文件处理的方法教程
Aug 29 Python
TensorFlow tensor的拼接实例
Jan 19 Python
Python实现病毒仿真器的方法示例(附demo)
Feb 19 Python
在python中list作函数形参,防止被实参修改的实现方法
Jun 05 Python
使用anaconda安装pytorch的实现步骤
Sep 03 Python
Python解析微信dat文件的方法
Nov 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中路径问题的解决方案
2006/10/09 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
PHP生成随机字符串实例代码(字母+数字)
2019/09/11 PHP
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
js实现随机点名器精简版
2020/06/29 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
python的id()函数介绍
2013/02/10 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
python简单实现基于SSL的IRC bot实例
2015/06/15 Python
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
德国运动营养和健身网上商店:Myprotein.de
2018/07/18 全球购物
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
程序员机试试题汇总
2012/03/07 面试题
如何执行一个shell程序
2012/11/23 面试题
优乐美广告词
2014/03/14 职场文书
股权转让协议书范本
2014/04/12 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
组织鉴定材料
2014/06/02 职场文书
党风廉正建设责任书
2015/01/29 职场文书
岳麓书院导游词
2015/02/03 职场文书
求职简历自我评价范文
2015/03/10 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
pandas取dataframe特定行列的实现方法
2021/05/24 Python