- CNN
- tensorflow
- python 3.5
- 由于本程序使用模拟方式生成验证码数据集,最终所得预测准确率不会很高(取决于验证码的模拟程度)。
- 本项目的模型识别准确率大概能达到
80%
。 - 本项目例子训练总用时不到一个小时。(GPU - GT940M)
/model/*
: 经过训练的模型,其中包含两个模型。/dataset/*
: 训练集存放目录。arialbd.ttf
: 模拟训练集所用字体。target-captcha.gif
: 目标验证码。generate_dataset.py
: 生成模拟验证码训练集,并转存到TFRecord。img_process.py
: 简单图像处理函数。batching.py
: batch数据并输出作为训练数据。train.py
: 训练和增强训练的操作。inference.py
: 卷积神经网络的结构。constant.py
: 共用常量(方便调整)。
tensorflow
: pip install tensorflowmatplotlib
: pip install matplotlibnumpy
: pip install numpyPIL
: pip install pillowwheezy
: pip install wheezy.captcha
为了实现更准确的功能,而对
wheezy.captcha.image
模块的text
函数进行了简单的修改
def text(fonts, font_sizes=None, drawings=None, color='#5C87B2',
squeeze_factor=0.8):
改成
def text(fonts, font_sizes=None, drawings=None, color='#5C87B2',
squeeze_factor=0.8, start_x=0, start_y=0):
offset = int((width - sum(int(i.size[0] * squeeze_factor)
for i in char_images[:-1]) -
char_images[-1].size[0]) / 2)
for char_image in char_images:
c_width, c_height = char_image.size
mask = char_image.convert('L').point(lambda i: i * 1.97)
image.paste(char_image,
(offset, int((height - c_height) / 2)),
mask)
改成
offset = start_x + random.randint(0, 15)
# offset = int((width - sum(int(i.size[0] * squeeze_factor)
# for i in char_images[:-1]) -
# char_images[-1].size[0]) / 2)
offset_y = start_x + random.randint(0, 8)
for char_image in char_images:
c_width, c_height = char_image.size
mask = char_image.convert('L').point(lambda i: i * 1.97)
image.paste(char_image,
(offset, offset_y),
mask)
无
- 人工标记一定数量的训练集,然后再稍稍提高学习率进行训练(不要训练过猛,避免过拟合)。
- 适当增加神经网路的复杂度,并适当修改验证码生成参数。
Apache-2.0