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和shell变量互相传递的几种方法
Nov 20 Python
python解析html开发库pyquery使用方法
Feb 07 Python
Python使用zip合并相邻列表项的方法示例
Mar 17 Python
pandas分别写入excel的不同sheet方法
Dec 11 Python
Python实现操纵控制windows注册表的方法分析
May 24 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
十行代码使用Python写一个USB病毒
Jun 21 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
Python Numpy数组扩展repeat和tile使用实例解析
Dec 09 Python
Python叠加矩形框图层2种方法及效果
Jun 18 Python
python 下划线的多种应用场景总结
May 12 Python
Python 恐龙跑跑小游戏实现流程
Feb 15 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
基于文本的搜索
2006/10/09 PHP
php inc文件使用的风险和注意事项
2013/11/12 PHP
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
onbeforeunload与onunload事件异同点总结
2013/06/24 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
js常用DOM方法详解
2017/02/04 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
详解Vue中过度动画效果应用
2017/05/25 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
[36:20]KG vs SECRET 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
python 删除列表里所有空格项的方法总结
2018/04/18 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
优秀应届生推荐信
2013/11/09 职场文书
大学生如何写自荐信
2014/01/08 职场文书
黄河象教学反思
2014/02/10 职场文书
个人四风问题对照检查材料
2014/10/01 职场文书
centos7安装mysql5.7经验记录
2022/05/02 Servers
Windows7下FTP搭建图文教程
2022/08/05 Servers