用 Python 处理这种验证码有没好的点子?

2018-11-18 18:29:14 +08:00
 snoopy1024

验证码

验证码字符只有 英文加数字; 我的思路:转为灰度,二值化处理,除去干扰横线(正在做),然后用 pytesseract 识别。干扰线除去有点儿复杂 正在做还不知道识别率有多大...

干掉干扰线 你们有没有啥头绪? 干扰线纵向都是 3 个像素,我目前的想法就是:纵向检测 3 像素的黑线

这是简单处理后的 还没有解决干扰线

7133 次点击
所在节点    Python
31 条回复
loadingimg
2018-11-18 19:52:10 +08:00
用 CNN
hitrust
2018-11-18 19:55:51 +08:00
直接用 OCR 呢
Nick2VIPUser
2018-11-18 21:07:45 +08:00
安利一下简单粗暴的卷积神经网络脚本: https://github.com/nickliqian/cnn_captcha
crystom
2018-11-18 22:16:09 +08:00
这个是用谷歌开源的 kaptcha 生成的,可以使用机器学习进行训练
crystom
2018-11-18 22:17:09 +08:00
似乎不是,但方法是一样的
crystom
2018-11-18 22:22:54 +08:00
不用机器学习的话,看上去字比线粗,可以使用一个像素周围一定范围不是黑就去掉的办法,结果是线没了,字变细
wdc63
2018-11-18 22:45:37 +08:00
这种样本量少的话真不好做,建议使用收费的打码平台 api。
Procumbens
2018-11-18 22:49:57 +08:00
pytesseract 暑假里面用的时候发现其对手写文本的识别率极差,这种倾斜变形的字体可能识别效果也不会很好。
Northxw
2018-11-18 23:48:52 +08:00
如果没有图像处理的知识,建议还是打码吧! 简单粗暴效率超高!
kanex
2018-11-19 00:50:49 +08:00
图像处理里有一个操作叫 erosion,你可以试试看
szxczyc
2018-11-19 01:27:26 +08:00
一楼说的对,cnn 比较好。
glacer
2018-11-19 02:32:01 +08:00
这种类型的验证码用传统的图像算法和 tesseract 效果应该都不会好。会算法技术就试下训练网络,不行的话找打码平台吧
martyartrt1
2018-11-19 09:08:09 +08:00
看了以后,我还是选择第三方的接口吧
SeaRecluse
2018-11-19 09:11:40 +08:00
只有数字和字母?? CNN100 张就够,在线训练的网址也有
kuangwinnie
2018-11-19 09:19:35 +08:00
打码平台挺便宜的,可以考虑一下,30 块可以打 1000 张。。。
snoopy1024
2018-11-19 09:39:58 +08:00
@kuangwinnie 不行的 老哥,项目上线了远不止 1000 张 而且只是个 个人项目,没有收入来源。
snoopy1024
2018-11-19 09:46:55 +08:00
@crystom 我了解一下
hubqin
2018-11-19 09:48:14 +08:00
之前写爬虫用过 pytesseract,用各种常规方法处理验证码图片,最后效果反而不好,我最终的解决方案是不处理图片,直接识别,识别失败则重新请求验证码,再识别,无限循环。一般十几次之内能识别出来。
hakono
2018-11-19 09:50:55 +08:00
@snoopy1024 个人项目的话如果不是后台跑着帮用户 24 小时收集数据的项目的话,就直接把验证码扔给用户让用户填啊。

剩下打码平台用不起的话,那就只能自己学图像处理了。或者简单粗暴上 cnn
snoopy1024
2018-11-19 09:56:27 +08:00
@hubqin 这有干扰线的 根本识别不出来。有干扰线的 肯定要解决干扰线

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

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

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

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

© 2021 V2EX