python 识别图形验证码_Python验证码识别

v2-136afa280e4456a17e3dcf6d9534bce2_1440w.jpg?source=172ae18b

大致介绍

  在python爬虫爬取某些网站的验证码的时候可能会遇到验证码识别的问题,现在的验证码大多分为四类:

    1、计算验证码

   2、滑块验证码

    3、识图验证码

    4、语音验证码

  这篇博客主要写的就是识图验证码,识别的是简单的验证码,要想让识别率更高,识别的更加准确就需要花很多的精力去训练自己的字体库。

  识别验证码通常是这几个步骤:

    1、灰度处理

    2、二值化

    3、去除边框(如果有的话)

    4、降噪

    5、切割字符或者倾斜度矫正

    6、训练字体库

    7、识别

  这6个步骤中前三个步骤是基本的,4或者5可根据实际情况选择是否需要,并不一定切割验证码,识别率就会上升很多有时候还会下降

  这篇博客不涉及训练字体库的内容,请自行搜索。同样也不讲解基础的语法。

  用到的几个主要的python库: Pillow(python图像处理库)、OpenCV(高级图像处理库)、pytesseract(识别库)

灰度处理&二值化

  灰度处理,就是把彩色的验证码图片转为灰色的图片。

  二值化,是将图片处理为只有黑白两色的图片,利于后面的图像处理和识别

  在OpenCV中有现成的方法可以进行灰度处理和二值化,处理后的效果:

v2-95f5ebc64e541aa38511df4c36210b61_b.jpg

  代码:

# 自适应阀值二值化

def _get_dynamic_binary_image(filedir, img_name):

filename = './out_img/' + img_name.split('.')[0] + '-binary.jpg'

img_name = filedir + '/' + img_name

print('.....' + img_name)

im = cv2.imread(img_name)

im = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) #灰值化

# 二值化

th1 = cv2.adaptiveThreshold(im, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 21, 1)

cv2.imwrite(filename,th1)

return th1

去除边框

  如果验证码有边框,那我们就需要去除边框,去除边框就是遍历像素点,找到四个边框上的所有点,把他们都改为白色,我这里边框是两个像素宽

  注意:在用OpenCV时,图片的矩阵点是反的,就是长和宽是颠倒的

  代码:

# 去除边框
def clear_border(img,img_name):
filename = './out_img/' + img_name.split('.')[0] + '-clearBorder.jpg'
h, w = img.shape[:2]
for y in range(0, w):
for x in range(0, h):
if y < 2 or y > w - 2:
img[x, y] = 255
if x < 2 or x > h -2:
img[x, y] = 255
cv2.imwrite(filename,img)
return img

效果:

v2-5c250ac64a1f37a773e475b72060b73b_b.png
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用一些图像处理库和机器学习算法来识别爬虫中的图形验证码。以下是一个基本的案例示例: 1. 首先,你需要安装需要的库,如OpenCV和Pillow。使用以下命令进行安装: ``` pip install opencv-python pip install Pillow ``` 2. 导入所需的库: ```python import cv2 from PIL import Image from pytesseract import pytesseract ``` 3. 下载并保存验证码图片。 4. 使用OpenCV库加载验证码图片,并将其转换为灰度图像: ```python image = cv2.imread('captcha.png') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) ``` 5. 对图像进行预处理,以便更好地识别验证码。可以尝试使用图像二值化、降噪等技术: ```python ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU) ``` 6. 使用Pillow库创建一个临时图像对象,并将处理后的图像保存到临时文件中: ```python temp_image = Image.fromarray(thresh) temp_image.save('temp.png') ``` 7. 使用Tesseract库对临时文件中的验证码进行识别: ```python captcha_text = pytesseract.image_to_string(Image.open('temp.png')) ``` 8. 最后,可以输出识别出的验证码文本: ```python print('识别结果:', captcha_text) ``` 这只是一个基本的示例,实际的验证码可能会更复杂,需要根据具体情况进行适当的调整和优化。还可以尝试使用其他机器学习算法,如卷积神经网络(CNN),来提高验证码识别的准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值