前言
CAPTCHA全称Completely Automated Public Turing Test to Tell Computers and Humans Apart,即全自动区分人机的图灵测试。这也是验证码诞生的主要任务。但是随着近年来大数据运算和机器视觉的发展,用机器视觉识别图像已经变得非常容易,过去用于区分人机的验证码也开始变得不再安全。
接下来就让我们从零开始,深入图像处理和算法构建,来看看使用机器视觉来识别过时的验证码( 如下所示 )究竟可以有多简单。
载入需要的程序包 & 设置全局变量
import requests
import time
from io import BytesIO
from PIL import Image
import os
import numpy as np
CAPT_URL = "http://xxxxxxxxxxxx.cn/servlet/ImageServlet"
CAPT_PATH = "capt/"
if not os.path.exists(CAPT_PATH):
os.mkdir(CAPT_PATH)
THRESHOLD = 165
LUT = [0 ]*THRESHOLD + [1 ]*(256 - THRESHOLD)
从网站获取验证码
capt_fetch()
方法非常简单,我们直接从网站获取验证码,将其转换为Image对象,等待被训练和测试等环节调用。
def capt_fetch () :
"""
从网站获取验证码,将验证码转为Image对象
:require requests: import requests
:require time: import time
:require BytesIO: from io import BytesIO
:require Image: from PIL import Image
:param:
:return capt: 一个Image对象
"""
capt_raw = requests.get(CAPT_URL)
f = BytesIO(capt_raw.content)
capt = Image.open(f)
return capt
保存验证码到本地
一个强大的机器学习模型,是离不开强大的训练集作支持的。这里我们也必须先有一个预先打好标签(预分类)