当前位置: 首页 > news >正文

python爬虫-反爬-验证码

文章目录


交互式验证码越来越多,如极验滑动验证码需要滑动拼合滑块才可以完成验证,点触验证码需要完全点击正确结果才可以完成验证,另外还有滑动宫格验证码、计算题验证码等。
图形验证码的识别
图形验证码,是最简单的一种验证码,这种验证码最早出现,现在也很常见,一般由 4 位字母或者数字组成。
在这里插入图片描述
将图片翻译成文字的技术。将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition),简写为OCR。
利用 OCR 技术识别图形验证码。
识别图形验证码需要库 tesserocr 。因此需要提前进行安装。
识别测试
接下来新建一个项目,将验证码图片放到项目根目录下,使用 tesserocr 库识别验证码,代码如下:

import tesserocr
from PIL import Image

image = Image.open('code.jpg')
result = tesserocr.image_to_text(image)
prin(result)

这里我们新建了一个 Image 对象,然后调用 tesserocr 的 image_to_text() 方法。传入该 Image 对象即可完成识别。结果如下所示:

另外,tesserocr 还有一个更加简单的方法,这个方法可以直接将图片文件转为字符串,代码如下:

import tesserocr

print(tesserocr.file_to_text('code.jpg'))

不过,此种方法的识别效果不如上一种好。

验证码处理
接下来我们换一个验证码,将其命名为 code2.jpg,如下图:

重新使用之前的代码来测试:

import tesserocr
from PIL import Image

image = Image.open('code2.jpg')
result = tesserocr.image_to_text(image)
print(result)

可以看到如下输出结果:

这次识别和实际结果有偏差,这是因为验证码内的多余线条干扰了图片的识别。对于这种情况,我们还需要做一下额外的处理,如转灰度、二值化等操作。

我们可以使用Image对象的convert()方法传入’L’参数,将图片转化为灰度图像

image = image.convert('L')
image.show()

传入‘1’即可将图片进行二值化处理

image = image.convert('1')
image.show()

我们还可以指定二值化的阈值。上面的方法采用的阈值默认是127。不过我们不能直接转化原图,要将原图转化为灰度图,然后指定二值化阈值,进行二值化处理。代码如下:

image = image.convert('L')
threshold = 80
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
image = image.point(table, '1')
image.show()

在这里,变量 threshold 代表二值化阈值,阈值设置为80。然后通过 point() 方法将其做二值化处理。结果如下:

我们发现原来验证码中的线条已经去除,整个验证码变得黑白分明。这时重新识别验证码,代码如下:

import tesserocr
from PIL import Image

image = Image.open('code2.jpg')
image = image.convert('1')
result = tesserocr.image_to_text(image)
print(result)

运行结果如下:

那么,针对一些有干扰的图片,我们可以做一些灰度和二值化处理,这样会提高图片识别的正确率。

相关文章:

  • 做视频网站服务器要求/网站开发的步骤
  • 网站制作新手教程/做手机关键词快速排名软件
  • php服装商城网站建设/信息推广平台
  • 深圳学校网站建设哪家好/宁波关键词优化品牌
  • 北京地铁建设的网站/抖音关键词排名查询
  • 海南网站建设哪家专业/怎么在线上推广自己的产品
  • Python Tkinter Gui 常用组件介绍 基本使用
  • 1.3.5 手写数字识别之资源配置
  • While 与 do while 的区别
  • 基于Lua框架下的合宙ESP32C3+1.5‘’Eink墨水屏天气时钟+OLED开源项目分享
  • Python学习笔记(八)——递归函数和匿名函数
  • 这C语言代码,会让你发疯
  • IT部门全被裁?不懂业务,花了几百万开发的报表系统,根本没人看
  • JAVAEE中的线程安全的集合类(包括HashtableConcurrentHashMap)
  • Intel汇编-传送大量字符串
  • 服务发现、注册-搭建Nacos服务
  • python(5) softmax回归实例
  • python3-算法刷题-链表-更新中