V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sleepybear1113
V2EX  ›  程序员

请教识别这样子的验证码的思路

  •  
  •   sleepybear1113 · 2022-07-13 11:22:12 +08:00 · 2562 次点击
    这是一个创建于 849 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有如下验证码,是某个游戏的。这个验证码有点阴间,人眼辨别也不简单。于是想走识别。

    收集了大几千张,统计出来,大约有 500 个字的选项。然后上面的条纹背景的字自动生成的。

    自己主业是写 Java 后端的,然后尝试现学 Python 先用 OpenCV 搞了一下。先做轮廓检测,再二值化,抠字。发现部分能抠出来,但是部分背景和字不太能区分,或者把字当做了背景。字可以走 ocr 问题不大。

    由于自己是垃圾本科,没有研究生的机器学习、深度学习的前置知识,所以这块还得重新学。

    然后这个图是一张样图。

    验证码-dt

    下面是已经有标注 ABCD 答案的样本,有大几千张,正确率在 90-95%。

    现在需要处理的思路,就是,具体需要学习哪些方面的知识,样本大致的处理方向,和识别的方式,还有样本最好的数量规模是多少。

    验证码-all

    16 条回复    2022-07-15 14:45:14 +08:00
    LuffyGu
        1
    LuffyGu  
       2022-07-13 11:37:57 +08:00
    第一行第一个字是什么?
    raycool
        2
    raycool  
       2022-07-13 11:43:22 +08:00
    直接神经网络一把梭
    不过肉眼看着都费劲,标注数据能准确吗。
    cutepig
        3
    cutepig  
       2022-07-13 11:46:44 +08:00 via Android
    我猜这种验证码 ai 做得比人都好
    sleepybear1113
        4
    sleepybear1113  
    OP
       2022-07-13 11:51:06 +08:00
    @LuffyGu 第一个字的确我也不知道是啥
    sleepybear1113
        5
    sleepybear1113  
    OP
       2022-07-13 11:52:29 +08:00
    @raycool 标注正确率差不多是有 90-95 ,也是花钱了的。可惜这方面没学过
    rming
        6
    rming  
       2022-07-13 11:54:31 +08:00
    对整张图片进行 ABCD 分类的话,准确率不太确定能做到多少,不过可以尝试下,先搜集所有图片子元素,然后做数据增强,好处是分类少。

    或者对中间文字区域的文字分割出来,就变成了三部分 OCR ,其实也是分类,会增加一部分预处理和业务逻辑,不过应该准确率可以搞上去
    newaccount
        7
    newaccount  
       2022-07-13 11:59:49 +08:00
    总有一天这验证码会变成:
    人一定识别不出来,你能识别出来一定不是人
    BeautifulSoup
        8
    BeautifulSoup  
       2022-07-13 12:07:53 +08:00   ❤️ 3
    问题和选项部分都是很规整的宋体字,直接 ocr 就行。验证码核心部分我的思路是目标检测+分类;目标检测主要是确定哪个部分是字,哪个部分是背景,以及框选出来第几行第几列的那个目标字。如果用 yolo3 这样的框架去实现,大概训练集在 500 张左右就可以做的很好了。
    考虑到图中的字都是华文舒体,因此分类部分可以设计一个多层卷积+前馈网络,输入为选项的华文舒体图像(颜色及大小有待进一步考虑)以及框选出来的目标字,输出为标签( 0-不匹配; 1-匹配)这个部分优化的关键是对图中目标字如何处理,使得文字和背景能有效分离,如果得到二值化图像则最好。参考收集的数据,文字部分随机性较大,个人估计训练集规模可能得上万。
    我主要做 nlp ,上面这个思路可能比较粗浅的,供大家参考。
    Juszoe
        9
    Juszoe  
       2022-07-13 15:17:38 +08:00
    关于数据,我建议你也可以按照他的逻辑生成,看起来还是挺有规律的,背景是各种彩色条纹线性渐变,字体扭曲一下,这类规律的图像手动标费时费力。
    Juszoe
        10
    Juszoe  
       2022-07-13 15:20:42 +08:00
    @BeautifulSoup #8 输入图像预测是否匹配的设计训练难度比较大,也不方便推理,OP 已知只有 500 个字的话直接做五百类的分类就可以了
    sakujo
        11
    sakujo  
       2022-07-13 15:21:43 +08:00
    第一行第一个好像是起或者超
    BeautifulSoup
        12
    BeautifulSoup  
       2022-07-13 15:36:53 +08:00
    @Juszoe 也有道理,上面说的思路我解决过一个只包含英语字母+数字的验证码。我又仔细看了一下图片,随机变换的形态差异比较大,匹配训练的难度确实不小。
    Saxton
        13
    Saxton  
       2022-07-13 16:35:40 +08:00
    这验证码,别说机器了,我一个人都识别不了
    cherryas
        14
    cherryas  
       2022-07-13 17:57:55 +08:00
    确实有用,但是过于阴间,

    一般正规的大网站应该不会用的.
    ldyisbest
        15
    ldyisbest  
       2022-07-13 21:39:27 +08:00
    我的思路是首先明确题目问的是什么,然后找到对应的图像块,然后和答案的图像计算相似度。可以参考下 siamesenet
    SoarSoga
        16
    SoarSoga  
       2022-07-15 14:45:14 +08:00
    顶起。。。。好帖需要讨论
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2731 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:38 · PVG 20:38 · LAX 04:38 · JFK 07:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.