用 CaptchaCracker 训练模型识别验证码

新项目需要去一个网站上爬数据,网站上有验证码。以前简单的验证码可以直接用 tesseract 识别,但这次长这样:

Captcha1
Captcha2
Captcha3

有斜线干扰,数字是彩色的,且歪歪扭扭。试了几次 OCR 方案都不成功,计划用 TensorFlow 训练模型,过程中发现了参数已经调好的 Python 库 CaptchaCracker

训练模型

需要调整的参数不多,给定验证码图片的宽度和高度即可:

1
2
3
4
5
6
7
8
9
10
11
import glob
import CaptchaCracker as cc

train_img_path_list = glob.glob("./image/*.png")

img_width = 120
img_height = 50

CM = cc.CreateModel(train_img_path_list, img_width, img_height)
model = CM.train_model(epochs=100)
model.save_weights("./weights.h5")

从网站上获取了 1000 多张验证码图片,用 Excel 逐张标记——过程比较辛苦。标记了 1500 张图后样本基本够了,因为这个验证码范围是 0–8,且只是 4 位数字。

训练环境:Intel Core Ultra 5(16 核)、32G 内存,跑了大概十来分钟,生成了 .h5 模型文件。

应用模型

识别新验证码时,同样需要设置图片尺寸、数字长度和字符范围:

1
2
3
4
5
6
7
8
9
10
11
12
13
import CaptchaCracker as cc

img_width = 120
img_height = 50
max_length = 4
characters = {'0', '1', '2', '3', '4', '5', '6', '7', '8'}

weights_path = "./weights.h5"
AM = cc.ApplyModel(weights_path, img_width, img_height, max_length, characters)

target_img_path = "../img_2.png"
pred = AM.predict(target_img_path)
print(pred)

效果

识别效果非常好,基本能达到 95% 以上的成功率。

Notice: 正常情况下,这里会有一个基于utteranc.es的留言系统,如果看不到,可能要想想办法才能看到。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2012 - 2026 tiaobug.com All Rights Reserved.

鲁ICP备2024124237号-1