V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
timedivision
V2EX  ›  程序员

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

  •  
  •   timedivision · 2023-12-07 20:32:13 +08:00 · 1718 次点击
    这是一个创建于 377 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    目标网站的验证码长这样

    yjt9j6.png 3hsehp.png

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

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

    16 条回复    2023-12-12 22:06:00 +08:00
    simonmao
        1
    simonmao  
       2023-12-07 22:31:02 +08:00   ❤️ 1
    可以看看这个项目对你是否有帮助: https://github.com/sml2h3/ddddocr
    churchill
        2
    churchill  
       2023-12-07 22:52:52 +08:00
    找个能识图的 LLM 帮你标注试试
    比如这个 https://github.com/THUDM/CogVLM
    timedivision
        3
    timedivision  
    OP
       2023-12-08 01:10:12 +08:00
    @simonmao 谢谢 不过我想要的不是这个
    timedivision
        4
    timedivision  
    OP
       2023-12-08 01:11:08 +08:00
    @churchill 谢谢 试了他的 demo ,还可以,但是我这大量的数据集估计不好搞
    JNian
        5
    JNian  
       2023-12-08 11:07:38 +08:00
    https://www.kaggle.com/datasets/bhh258/train-num2-var 比如这个,可以去这个网站找一找数据集
    huangcjmail
        6
    huangcjmail  
       2023-12-09 10:33:51 +08:00
    哈哈,正好我做过,其实自己写个代码打标很快的,一下午就能打 3000+张,你这样的估计 3000 张就能训练的差不多了。
    huangcjmail
        7
    huangcjmail  
       2023-12-09 10:43:35 +08:00
    我自己那个窗口程序,上面是图片,下面是一个文本框,输好了标签按下回车,就把标签当成文件名保存下来,然后刷下一张。文件名后面记得加个随机数或者时间戳之类的东西。
    timedivision
        8
    timedivision  
    OP
       2023-12-09 14:21:30 +08:00 via iPhone
    @JNian 谢谢 不过我试过自己生成样本,然后训练完去识别目标网站的图片 效果很差,所以还得是用目标网站的样本训练
    timedivision
        9
    timedivision  
    OP
       2023-12-09 14:23:08 +08:00 via iPhone
    @huangcjmail 昨天让老婆人工打码了 6000 张😂,也想过写个程序展示图片加输入框加快打码,想想还是算了
    aoguai
        10
    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
        11
    tangtang369  
       2023-12-11 11:57:33 +08:00
    给你说下我一般的思路,不停的去调用你需要的那个网站的验证码生成接口,先用 https://github.com/sml2h3/ddddocr 这个库识别,提交成功和提交失败的分开存储,再自己标记提交失败的图片
    timedivision
        12
    timedivision  
    OP
       2023-12-11 12:28:07 +08:00 via iPhone
    @tangtang369 那我怎么判定这个库识别出来的是正确的还是不正确呢
    tangtang369
        13
    tangtang369  
       2023-12-11 13:32:27 +08:00
    @timedivision 找网站的验证接口 把结果 post 给它 会返回正确还是错误的
    timedivision
        14
    timedivision  
    OP
       2023-12-12 00:14:45 +08:00
    @aoguai 这个生成的验证码有图片示例吗?主要是我这边自己生成相似的验证码做训练,然后去识别目标网站的码,成功率基本为 0 ,不知道为什么
    aoguai
        15
    aoguai  
       2023-12-12 20:50:55 +08:00 via Android
    @timedivision 图片就跟你的差不多。示例你搜一搜这个类生成验证码的例子就有了。
    正确性的问题感觉是你标注有问题或者模型没选对,训练没训好等。你可以到 b 站视频教程学一学如果真感兴趣。
    以我个人经验有可能是你数量还是不够,一般四位验证码无大小写需要大几万张图片训练 100 轮左右。
    timedivision
        16
    timedivision  
    OP
       2023-12-12 22:06:00 +08:00 via iPhone
    @aoguai 谢谢,我自己生成的验证码训练有个几万张,但是识别网站的根本不行,也不知道是啥问题,后来把网站上的验证码搞了 6000 张,5000 训练,1000 张预测,正确率 89%
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5387 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:36 · PVG 15:36 · LAX 23:36 · JFK 02:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.