zoukankan      html  css  js  c++  java
  • python验证码

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

        1、计算验证码

            2、滑块验证码

        3、识图验证码

        4、语音验证码

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

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

        1、灰度处理

        2、二值化

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

        4、降噪

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

        6、训练字体库

        7、识别

    # 自适应阀值二值化
    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
    

      

  • 相关阅读:
    0.Mysql优化框架
    [C]extern char **environ
    [C]Armstrong Number
    [C]struct, union的结合
    [C]enum类型
    [C]fibonacci series, recursion, time.h
    [C/JAVA]二维数组
    [C] char**, swich-case, refactoring, stdbool.h
    hardly/scarcely ... goes by without ...
    [C]随机数生成
  • 原文地址:https://www.cnblogs.com/huaobin/p/15692198.html
Copyright © 2011-2022 走看看