CaptchaCracker训练模型识别验证码

新的项目需要去一个网站上获取一些数据,做一个爬虫,网站上有验证码,以前的时候简单的验证码可以直接使用tesseract直接识别,但是这次的验证码长这个样子:
Captcha1
Captcha2
Captcha3
尝试了几次OCR的解决方案,发现不能成功,这里面有斜线干扰,数字是彩色的,且歪歪扭扭的。

所以计划使用tensorflow训练个模型,在尝试的过程中发现了一个参数都已经调好的python lib, CaptchaCracker

训练的时候,需要调整的参数不是很多,只需要给定验证码的图片宽度高度就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import glob
import CaptchaCracker as cc

# Training image data path
train_img_path_list = glob.glob("./image/*.png")

# Training image data size
img_width = 120
img_height = 50

# Creating an instance that creates a model
CM = cc.CreateModel(train_img_path_list, img_width, img_height)

# Performing model training
model = CM.train_model(epochs=100)

# Saving the weights learned by the model to a file
model.save_weights("./weights.h5")

利用脚本从网站上获取了1000多的验证码图片,批量命令后,利用excel记录标记的结果,这个过程比较辛苦,需要一点一点的标记所有的图片。
标记了1500张图,基本上样本就够了,因为这个验证码的范围是0-8,且只是4位数字。
开始运行训练代码后,我的电脑ntel(R) Core(TM) Ultra 5 (16核), 32G内存,跑了大概十来分钟,生成了一个.h5的模型文件。

下面的代码是使用模型识别新的验证码图片,同样也是需要设置一下验证码图片的高度宽度,数字长度,字符的识别范围。
应用模型后,就可以识别出来结果了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import os

import CaptchaCracker as cc

# Target image data size
img_width = 120
img_height = 50
# Target image label length
max_length = 4
# Target image label component
characters = {'0', '1', '2', '3', '4', '5', '6', '7', '8'}

# Model weight file path
weights_path = "./weights.h5"
# Creating a model application instance
AM = cc.ApplyModel(weights_path, img_width, img_height, max_length, characters)


# Target image path
target_img_path = "../img_2.png"

# Predicted value
pred = AM.predict(target_img_path)
print(pred)

最后的识别效果还是非常棒的,基本能到95%以上的成功率。

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

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2024 Tiaobug All Rights Reserved.

本站总访问量    次