有如下验证码,是某个游戏的。这个验证码有点阴间,人眼辨别也不简单。于是想走识别。
收集了大几千张,统计出来,大约有 500 个字的选项。然后上面的条纹背景的字自动生成的。
自己主业是写 Java 后端的,然后尝试现学 Python 先用 OpenCV 搞了一下。先做轮廓检测,再二值化,抠字。发现部分能抠出来,但是部分背景和字不太能区分,或者把字当做了背景。字可以走 ocr 问题不大。
由于自己是垃圾本科,没有研究生的机器学习、深度学习的前置知识,所以这块还得重新学。
然后这个图是一张样图。
下面是已经有标注 ABCD 答案的样本,有大几千张,正确率在 90-95%。
现在需要处理的思路,就是,具体需要学习哪些方面的知识,样本大致的处理方向,和识别的方式,还有样本最好的数量规模是多少。
1
LuffyGu 2022-07-13 11:37:57 +08:00
第一行第一个字是什么?
|
2
raycool 2022-07-13 11:43:22 +08:00
直接神经网络一把梭
不过肉眼看着都费劲,标注数据能准确吗。 |
3
cutepig 2022-07-13 11:46:44 +08:00 via Android
我猜这种验证码 ai 做得比人都好
|
4
sleepybear1113 OP @LuffyGu 第一个字的确我也不知道是啥
|
5
sleepybear1113 OP @raycool 标注正确率差不多是有 90-95 ,也是花钱了的。可惜这方面没学过
|
6
rming 2022-07-13 11:54:31 +08:00
对整张图片进行 ABCD 分类的话,准确率不太确定能做到多少,不过可以尝试下,先搜集所有图片子元素,然后做数据增强,好处是分类少。
或者对中间文字区域的文字分割出来,就变成了三部分 OCR ,其实也是分类,会增加一部分预处理和业务逻辑,不过应该准确率可以搞上去 |
7
newaccount 2022-07-13 11:59:49 +08:00
总有一天这验证码会变成:
人一定识别不出来,你能识别出来一定不是人 |
8
BeautifulSoup 2022-07-13 12:07:53 +08:00 3
问题和选项部分都是很规整的宋体字,直接 ocr 就行。验证码核心部分我的思路是目标检测+分类;目标检测主要是确定哪个部分是字,哪个部分是背景,以及框选出来第几行第几列的那个目标字。如果用 yolo3 这样的框架去实现,大概训练集在 500 张左右就可以做的很好了。
考虑到图中的字都是华文舒体,因此分类部分可以设计一个多层卷积+前馈网络,输入为选项的华文舒体图像(颜色及大小有待进一步考虑)以及框选出来的目标字,输出为标签( 0-不匹配; 1-匹配)这个部分优化的关键是对图中目标字如何处理,使得文字和背景能有效分离,如果得到二值化图像则最好。参考收集的数据,文字部分随机性较大,个人估计训练集规模可能得上万。 我主要做 nlp ,上面这个思路可能比较粗浅的,供大家参考。 |
9
Juszoe 2022-07-13 15:17:38 +08:00
关于数据,我建议你也可以按照他的逻辑生成,看起来还是挺有规律的,背景是各种彩色条纹线性渐变,字体扭曲一下,这类规律的图像手动标费时费力。
|
10
Juszoe 2022-07-13 15:20:42 +08:00
@BeautifulSoup #8 输入图像预测是否匹配的设计训练难度比较大,也不方便推理,OP 已知只有 500 个字的话直接做五百类的分类就可以了
|
11
sakujo 2022-07-13 15:21:43 +08:00
第一行第一个好像是起或者超
|
12
BeautifulSoup 2022-07-13 15:36:53 +08:00
@Juszoe 也有道理,上面说的思路我解决过一个只包含英语字母+数字的验证码。我又仔细看了一下图片,随机变换的形态差异比较大,匹配训练的难度确实不小。
|
13
Saxton 2022-07-13 16:35:40 +08:00
这验证码,别说机器了,我一个人都识别不了
|
14
cherryas 2022-07-13 17:57:55 +08:00
确实有用,但是过于阴间,
一般正规的大网站应该不会用的. |
15
ldyisbest 2022-07-13 21:39:27 +08:00
我的思路是首先明确题目问的是什么,然后找到对应的图像块,然后和答案的图像计算相似度。可以参考下 siamesenet
|
16
SoarSoga 2022-07-15 14:45:14 +08:00
顶起。。。。好帖需要讨论
|