vlambda博客
学习文章列表

Keras知网验证码识别(上)-python实现

Boblee人工智能硕士毕业,擅长及爱好python,基于python研究人工智能、群体智能、区块链等技术,并使用python开发前后端、爬虫等。


1. 背景

现如今不管登陆啥都要验证码,所谓魔高一尺,道高一丈。既然有验证码,那就破解验证码,本文使用keras构建网络来破解验证码。为此本文选取知网验证码进行破解。

2. 数据获取

人工智能有个特性就是需要大量标注好的样本,本文基于前人使用tesseract的基础上获取数据。识别完后人工修正,在训练数据。

1. 获取图片

   找到知网获取图片网址,下载一批图片。

import urllib.requestimport pytesseractfrom PIL import Imageimport numpy as npimport redef get_data(name): try: response = urllib.request.urlopen('https://login.cnki.net/login/checkcode.aspx?t=0.8343371339687744') # 得到访问的网址 filename = name + '.jpg' with open(filename, "wb") as f: content = response.read() # 获得图片 f.write(content) # 保存图片 response.close() except Exception as e: # HTTP响应异常处理 print(e)

获取图像如下图所示。

Keras知网验证码识别(上)-python实现 

2. 图片预处理

本文基于Tesseractpython版本pytesseract进行数据粗标注,本文的验证码这些点线太干扰了,需要去掉,否则识别不了。

windows下载好后加入环境变量,cmd执行。

Keras知网验证码识别(上)-python实现

python安装 pip install pytesseract pillow。图像处理使用pillow库,实现简单的图像灰度化,选定特定数二值化。

def image_handle(name, save_name): image = Image.open(name) image = np.array(image.convert('L')) image = np.where(image[..., :] < 127, 0, 255) image = Image.fromarray(image) image = image.convert('RGB') image.save(save_name)

预处理后图片。

Keras知网验证码识别(上)-python实现

3. 识别图像

def get_text(name): pytesseract.pytesseract.tesseract_cmd = 'D://software//tesseract//Tesseract-OCR//tesseract.exe' # tessdata_dir_config = '--tessdata-dir "D://software//tesseract//Tesseract-OCR//tessdata//"' text = pytesseract.image_to_string(name) text = ''.join(re.findall('\d+', text)) return text

  识别的结果不理想也就60%,哎也不错了,人眼过滤一遍,最终标注数据如下图所示。


4.总结

本文基于tesseract进行粗数据标注,为后续基于keras构建网络进行验证码识别提供样本,下一期介绍keras构建网络进行验证码识别过程。