基于 TensorFlow 创建的验证码识别 cnn 模型

2023-12-07 20:32:13 +08:00
 timedivision

现在模型有了,数据集碰到难题了

目标网站的验证码长这样

我自己本地生成类似的验证码去做训练识别,还是有差异,如果直接从网站获取验证码的话,标记验证码就是个大工程

有没有后端老哥眼熟这种验证码的,这是哪个库生成的,还是自己写代码生成的?

1718 次点击
所在节点    程序员
16 条回复
simonmao
2023-12-07 22:31:02 +08:00
可以看看这个项目对你是否有帮助: https://github.com/sml2h3/ddddocr
churchill
2023-12-07 22:52:52 +08:00
找个能识图的 LLM 帮你标注试试
比如这个 https://github.com/THUDM/CogVLM
timedivision
2023-12-08 01:10:12 +08:00
@simonmao 谢谢 不过我想要的不是这个
timedivision
2023-12-08 01:11:08 +08:00
@churchill 谢谢 试了他的 demo ,还可以,但是我这大量的数据集估计不好搞
JNian
2023-12-08 11:07:38 +08:00
https://www.kaggle.com/datasets/bhh258/train-num2-var 比如这个,可以去这个网站找一找数据集
huangcjmail
2023-12-09 10:33:51 +08:00
哈哈,正好我做过,其实自己写个代码打标很快的,一下午就能打 3000+张,你这样的估计 3000 张就能训练的差不多了。
huangcjmail
2023-12-09 10:43:35 +08:00
我自己那个窗口程序,上面是图片,下面是一个文本框,输好了标签按下回车,就把标签当成文件名保存下来,然后刷下一张。文件名后面记得加个随机数或者时间戳之类的东西。
timedivision
2023-12-09 14:21:30 +08:00
@JNian 谢谢 不过我试过自己生成样本,然后训练完去识别目标网站的图片 效果很差,所以还得是用目标网站的样本训练
timedivision
2023-12-09 14:23:08 +08:00
@huangcjmail 昨天让老婆人工打码了 6000 张😂,也想过写个程序展示图片加输入框加快打码,想想还是算了
aoguai
2023-12-09 15:38:16 +08:00
这种基本验证码不是 java Web 很常见的自动生成的验证码么?
以 验证码 控件 为关键词能查出很多封装好的吧
举个例子 [Hutool]( https://hutool.cn/) 工具类,就支持验证码生成和校验。
简单写个例子,就能批量生成了。

下面是 gpt 给出的简单例子(未实测
---
当你需要生成大量验证码图片并将它们保存到文件中时,可以使用循环结合 Hutool 的验证码生成功能来实现。你可以按照以下步骤编写 Java 代码:
首先,确保你已经添加了 Hutool 的依赖到你的项目中。然后,创建一个 Java 类并编写生成验证码图片并保存的代码:
```java
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.ICaptcha;
import cn.hutool.captcha.generator.MathGenerator;
import cn.hutool.captcha.generator.RandomGenerator;
import java.io.File;
public class CaptchaGenerator {
public static void main(String[] args) {
int numberOfCaptchas = 10; // 设定要生成的验证码数量
// 循环生成验证码图片并保存
for (int i = 1; i <= numberOfCaptchas; i++) {
// 这里可以选择不同类型的验证码,比如 LineCaptcha 、CircleCaptcha 、ShearCaptcha 等
ICaptcha captcha = CaptchaUtil.createLineCaptcha(200, 100); // 生成一个线段干扰的验证码
// 自定义验证码内容为四则运算方式
captcha.setGenerator(new MathGenerator());
// 重新生成验证码
captcha.createCode();
String code = captcha.getCode(); // 获取生成的验证码内容
// 构建文件名,以验证码内容命名图片文件
String fileName = code + ".png"; // 可以根据需要修改文件格式,比如".jpg"等
// 图片保存路径
String savePath = "your/save/directory/" + fileName; // 替换为你想要保存的文件夹路径
// 将验证码图片写出到文件
captcha.write(new File(savePath));
System.out.println("验证码 " + code + " 已保存为 " + fileName);
}
}
}
```
这段代码中,`numberOfCaptchas` 变量表示要生成的验证码数量。循环将生成验证码并以验证码内容命名的形式保存在指定文件夹中。
确保替换代码中的 `"your/save/directory/"` 为你想要保存验证码图片的目标文件夹路径。这段代码可以在你的 Java 项目中执行,生成并保存验证码图片。
---
tangtang369
2023-12-11 11:57:33 +08:00
给你说下我一般的思路,不停的去调用你需要的那个网站的验证码生成接口,先用 https://github.com/sml2h3/ddddocr 这个库识别,提交成功和提交失败的分开存储,再自己标记提交失败的图片
timedivision
2023-12-11 12:28:07 +08:00
@tangtang369 那我怎么判定这个库识别出来的是正确的还是不正确呢
tangtang369
2023-12-11 13:32:27 +08:00
@timedivision 找网站的验证接口 把结果 post 给它 会返回正确还是错误的
timedivision
2023-12-12 00:14:45 +08:00
@aoguai 这个生成的验证码有图片示例吗?主要是我这边自己生成相似的验证码做训练,然后去识别目标网站的码,成功率基本为 0 ,不知道为什么
aoguai
2023-12-12 20:50:55 +08:00
@timedivision 图片就跟你的差不多。示例你搜一搜这个类生成验证码的例子就有了。
正确性的问题感觉是你标注有问题或者模型没选对,训练没训好等。你可以到 b 站视频教程学一学如果真感兴趣。
以我个人经验有可能是你数量还是不够,一般四位验证码无大小写需要大几万张图片训练 100 轮左右。
timedivision
2023-12-12 22:06:00 +08:00
@aoguai 谢谢,我自己生成的验证码训练有个几万张,但是识别网站的根本不行,也不知道是啥问题,后来把网站上的验证码搞了 6000 张,5000 训练,1000 张预测,正确率 89%

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/998473

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX