Keras知网验证码识别(上)-python实现
Boblee人工智能硕士毕业,擅长及爱好python,基于python研究人工智能、群体智能、区块链等技术,并使用python开发前后端、爬虫等。
1. 背景
现如今不管登陆啥都要验证码,所谓魔高一尺,道高一丈。既然有验证码,那就破解验证码,本文使用keras构建网络来破解验证码。为此本文选取知网验证码进行破解。
2. 数据获取
人工智能有个特性就是需要大量标注好的样本,本文基于前人使用tesseract的基础上获取数据。识别完后人工修正,在训练数据。
1. 获取图片
找到知网获取图片网址,下载一批图片。
import urllib.request
import pytesseract
from PIL import Image
import numpy as np
import re
def 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)
获取图像如下图所示。
2. 图片预处理
本文基于Tesseract的python版本pytesseract进行数据粗标注,本文的验证码这些点线太干扰了,需要去掉,否则识别不了。
windows下载好后加入环境变量,cmd执行。
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)
预处理后图片。
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构建网络进行验证码识别过程。