YOLOV5识别成语点选验证码

如题,直接上图,看看数据集
YOLOV5识别成语点选验证码_第1张图片
YOLOV5识别成语点选验证码_第2张图片
YOLOV5识别成语点选验证码_第3张图片
YOLOV5识别成语点选验证码_第4张图片
成语点选和一般的点选验证码其实差别不大,一般的点选验证码是告诉你要点哪些文字了,这个用yolov5做目标检测识别匹配到就可以了,成语点选无非就是没有告诉你是哪几个字,从上面的数据集可以得知,需要填充的是四字成语,会空缺两个字,有左右括号代替,然后请填充成语也是在图片的最上方,这里其实思路就有了。

1、yolov5进行目标检测,识别出所有的文字与括号
2、将目标检测结果进行筛选,将最上方的目标筛选出来,这里还可以在进行筛选,将最上方的目标结果进行x排序,在通过识别出来的冒号进行筛选,最后会得到两个文字,与两个左括号和两个右括号
3、将文字与括号排序,然后得出成语的类型,例如AB, *号代表括号的位置,然后利用正则依次匹配成语库,得出m个成语(最后的成语匹配结果不一定只有一个成语)
4、得出空缺的m个成语后,循环m个成语,然后将 图上其他的检测结果的字与空缺的字匹配,如果都能匹配上,那么就确定为该成语,例如**发图强, 成语库就会匹配出三个(奋发图强,愤发图强,忿发图强),但是最后图中只会有一个字与之匹配。

思路步骤是有了,下面看流程

1、制作数据集

中华汉字多达三千多种,也是一个超级多的分类任务,所以准备的数据集绝对不能少,我这边准备了10万张,最后的效果还可以,如果还觉得不够,可以先用小数据集训练,然后在用训练好的模型训练全部的数据集,来微调模型。

当然了,准备数据集最困难的地方就是标注,先看下我的标注形式,依然是一个txt对应一个image,标注的内容就是全部的汉字与括号的归一化的位置
YOLOV5识别成语点选验证码_第5张图片
YOLOV5识别成语点选验证码_第6张图片
具体是怎么快速10万张的呢,这里标注分为两种类型,一是标注文字的位置,这里就要用到ddddocr了,这个库不做过多介绍,想知道的去看一下github或问一下度娘,ddddoc提供文字位置的功能,但是不知道具体的文字位置,想知道具体是什么文字的话,如果你们有文字分类的模型的话,可以直接调用模型获取,如果没有,也可以通过超级鹰去识别文字,二是标注括号,这里没有什么太灵活的方法,我是通过裁减获取括号的位置,然后标记的,这个位置是死的,因为我发现括号的位置大概就那么几种,所以括号的标注定死就行,当然了,如果你要问我是怎么知道成语的空缺的括号的位置的话,只需要用刚刚的方法识别出文字的位置,大概就知道了,如果我讲的不是很清楚,欢迎私信留言

当然还要有成语库,我这里已经收集好了,地址是:https://www.chengyucidian.net/letter/,这个通过爬虫获取即可
YOLOV5识别成语点选验证码_第7张图片

2、使用yolov5训练

使用yolov5训练其实没啥,大家要是都会用,也不用多讲,这里就分享,我使用yolov5用的超参数吧

1、模型:yolov5s.pt

2、优化器:SGD

3、初始学习率:0.05

4、img-size: 640

3、查看训练结果

因为数据集比较大,所以用比较大的学习率就可以了,收敛的很快,训练到最后也有90以上的准确率了
YOLOV5识别成语点选验证码_第8张图片

4、查看最终成果


大体思路就是这样,也比较简单,如果有更好的方法欢迎私信我,谢谢!

你可能感兴趣的:(目标检测,opencv,pytorch,深度学习,python,计算机视觉)