VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Python验证码自动识别

介绍

在python爬虫爬取某些网站的验证码的时候可能会遇到验证码识别的问题,今天就来看下如何让机器自动识别验证码。

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

1、灰度处理

2、二值化

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

4、降噪

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

6、训练字体库

7、识别

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

今天讲的不涉及训练字体库的内容,感兴趣的同学请自行搜索相关文章。

几个主要的验证码识别相关的python库: Pillow(python图像处理库)、OpenCV(高级图像处理库)、pytesseract(识别库)

灰度处理&二值化

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

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

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

代码:

1
2
3
4
5
6
7
8
9
10
11
# 自适应阀值二值化
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, 211)
  cv2.imwrite(filename,th1)
  return th1

去除边框

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

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

代码:

1
2
3
4
5
6
7
8
9
10
11
12
# 去除边框
def clear_border(img,img_name):
  filename = './out_img/' + img_name.split('.')[0+ '-clearBorder.jpg'
  h, w = img.shape[:2]
  for in range(0, w):
    for in range(0, h):
      if y  w - 2:
        img[x, y] = 255
      if x  h -2:
        img[x, y] = 255
  cv2.imwrite(filename,img)
  return img

相关教程