python opencv+pytesseract 验证码识别

简介: 人总要呆在一种什么东西里,沉溺其中,苟有所得,才能证明自己的存在,切实地活出自己的价值 ——汪曾祺

一、环境配置


  • 需要 pillow 和 pytesseract 这两个依赖库,pip install安装上就好了。
pipinstallpillow-ihttp://pypi.douban.com/simple--trusted-hostpypi.douban.compipinstallpytesseract-ihttp://pypi.douban.com/simple--trusted-hostpypi.douban.com



  • 安装好Tesseract-OCR.exe
  • pytesseract库的配置:搜索找到pytesseract.py,打开该.py文件,找到tesseract_cmd,改变它的值为刚才安装 tesseract.exe 的路径。


二、验证码识别


识别验证码,需要先对图像进行预处理,去除会影响识别准确度的线条或噪点,提高识别准确度。


实例1


# -*- coding: UTF-8 -*-"""@公众号      : AI庭云君@Author     : 叶庭云@CSDN       : https://yetingyun.blog.csdn.net/"""importcv2ascvimportpytesseractfromPILimportImagedefrecognize_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()


运行效果如下:


识别结果:3n3DProcessfinishedwithexitcode0


实例2


"""@公众号      : AI庭云君@Author     : 叶庭云@CSDN       : https://yetingyun.blog.csdn.net/"""importcv2ascvimportpytesseractfromPILimportImagedefrecognize_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识别结果:8A62N1Processfinishedwithexitcode0



实例3


"""@公众号      : AI庭云君@Author     : 叶庭云@CSDN       : https://yetingyun.blog.csdn.net/"""importcv2ascvimportpytesseractfromPILimportImagedefrecognize_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识别结果:7364Processfinishedwithexitcode0

目录
相关文章
|
7月前
|
机器学习/深度学习 数据采集 API
Python自动化解决滑块验证码的最佳实践
Python自动化解决滑块验证码的最佳实践
|
7月前
|
数据采集 Web App开发 文字识别
Python爬虫多次请求后被要求验证码的应对策略
Python爬虫多次请求后被要求验证码的应对策略
|
8月前
|
人工智能 算法 数据安全/隐私保护
[oeasy]python080如何生成验证码_随机数字密码_真随机
本文介绍了如何生成随机验证码的过程,从简单的随机数字生成到包含数字、大小写字母及符号的复杂验证码。通过 Python 的 `random` 和 `string` 模块,逐步扩展字符集并确保结果满足特定要求(如包含各类字符)。同时探讨了随机数生成的本质,指出计算机中的“随机”实际上是基于算法和种子值的伪随机,并非真正的物理随机。最后总结了验证码的生成原理及其在实际应用中的意义,为读者揭开日常生活中验证码背后的编程逻辑。
334 8
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
1584 1
|
8月前
|
缓存 安全 Android开发
Python实战:搭建短信转发器,实现验证码自动接收与处理
在移动互联网时代,短信验证码是重要的安全手段,但手动输入效率低且易出错。本文介绍如何用Python搭建短信转发器,实现验证码自动接收、识别与转发。通过ADB工具监听短信、正则表达式或ddddocr库提取验证码,并利用Flask框架转发数据。系统支持多设备运行,具备安全性与性能优化功能,适合自动化需求场景。未来可扩展更多功能,提升智能化水平。
1088 1
|
10月前
|
XML 机器学习/深度学习 人工智能
使用 OpenCV 和 Python 轻松实现人脸检测
本文介绍如何使用OpenCV和Python实现人脸检测。首先,确保安装了OpenCV库并加载预训练的Haar特征模型。接着,通过读取图像或视频帧,将其转换为灰度图并使用`detectMultiScale`方法进行人脸检测。检测到的人脸用矩形框标出并显示。优化方法包括调整参数、多尺度检测及使用更先进模型。人脸检测是计算机视觉的基础技术,具有广泛应用前景。
478 10
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
390 7
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
计算机视觉 Python
python利用pyqt5和opencv打开电脑摄像头并进行拍照
本项目使用Python的PyQt5和OpenCV库实现了一个简单的摄像头应用。用户可以通过界面按钮打开或关闭摄像头,并实时预览视频流。点击“拍照”按钮可以捕捉当前画面并保存为图片文件。该应用适用于简单的图像采集和处理任务。
809 0
python利用pyqt5和opencv打开电脑摄像头并进行拍照
|
数据采集 自然语言处理 API
Python反爬案例——验证码的识别
Python反爬案例——验证码的识别
376 2

推荐镜像

更多