使用Tesseract OCR识别简单的验证码

使用Tesseract OCR识别简单的验证码

在爬虫模拟登陆时,会遇到验证码这个障碍,如果网站使用的是很简单的验证码,可以使用OCR(Optical Character Recording,光学字符识别)从图像中抽取文本。

1.环境搭建

1.下载Tesseract

https://github.com/tesseract-ocr/tesseract

2.安装Python支持的OCR库

pip install pytesseract
pip install pillow

pytesseract是Tesseract的识别库;pillow是pytesseract的依赖库(PIL的分支版本)

3.关联tesseract-OCR

打开pytesseract.py源文件,一般目录在./lib/site-packages/pytesseract,找到如下代码

tesseract_cmd = 'tesseract'

将其指向到Tesseract OCR的tesseract.exe,我这里是

tesseract_cmd = r'D:\tesseract-OCR\tesseract.exe'

2.OCR识别图片

1.简单图片

对于只有文本的图片来说,直接使用tesseract的图像字符串转化函数。如:

在这里插入图片描述

from PIL import Image
import pytesseract
img =   Image.open("1234.png")
print(pytesseract.image_to_string(img))

输出如下:

在这里插入图片描述
可以看到成功抽取。

2.较复杂的验证码图片

含有较少的背景噪点或干扰文本的图片,如下图
在这里插入图片描述

使用上文代码抽取文本时,返回空字符串,说明抽取文本失败,这是因为图像中的背景对文本产生了干扰,此时需要去除背景的干扰,只保留文本部分。从上图看出,背景颜色比文本颜色明亮许多,只有验证码文本是黑色的,所以可以通过检测像素是否为黑色将文本分离出来,这里通过pillow实现该过程。

from PIL import Image
import pytesseract
img =   Image.open("1234.png")
gray = img.convert("L")#转换图像模式,L表示灰色图像,可以设置0~255之间的值,0表示黑,255表示白
gray.save('gray.png')

在这里插入图片描述

text = gray.point(lambda x:0 if x<1 else 255,"1")#将阈值小于1的像素都设为0.其余设为255
text.save("text.png")
print(pytesseract.image_to_string(text))#就可以正确提取验证码了

在这里插入图片描述
在这里插入图片描述

使用OCR抽取简单的数字很容易,但是对于更加复杂的验证码图片,比如文本倾斜或者噪点很多的验证码,OCR的识别准确率很低,此时可以选择第三方平台或者使用其他方法绕过验证码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值