cnn_captcha:用 CNN 把验证码识别变成一件简单的事

验证码识别是很多做爬虫或数据采集的人会碰到的问题。传统做法要经历图像灰度化、二值化、分割、滤波降噪,再套个机器学习模型,步骤多、调参累,换个验证码格式可能就得重来。

cnn_captcha 这个项目走了另一条路:直接用卷积神经网络端到端识别字符型验证码,把校验、训练、验证、识别、API 全封装好了,拿过来配几个参数就能跑。项目在 GitHub 上拿了 2,880 个 Star,对一个小众工具来说,说明确实帮到了不少人。

正文顶部截图

核心思路:CNN 一步到位

传统图像处理加机器学习的方法,涉及灰度化、分割、裁剪、滤波、KNN、SVM 等多个环节。图片变化类型一多,处理流程就不够通用,经常要花时间调整算法参数。

cnn_captcha 的做法是只做简单的前处理,剩下的交给 CNN。卷积神经网络自动从图片中提取特征,不需要手工设计复杂的图像处理流水线,对大多数静态字符型验证码都适用。

项目支持的验证码类型覆盖了市面上常见的 Java 和 Python 生成库,包括 JCaptcha、kaptcha、SimpleCaptcha、Python captcha 等。

模块设计比较完整

项目把识别流程拆成了几个独立模块:

数据准备层

verify_and_split_data.py 负责校验原始图片并拆分为训练集和测试集,比例默认 19:1。如果后续有新样本,放到指定目录再跑一遍脚本就行,会自动合并。

训练层

train_model.py 是主训练脚本。训练过程中会同时输出训练集和验证集的字符准确率、图片准确率以及 loss。支持按训练次数或准确率自动停止,也支持定时保存模型。

模型结构是标准的三层卷积加池化,接全连接和 softmax 输出。配置都在 JSON 文件里,改图片尺寸、字符集、训练批次大小都不需要动代码。

服务层

webserver_recognize_api.py 提供 HTTP 接口,上传图片返回识别结果。项目还带了压力测试脚本,两万次请求测下来,单次识别平均 12ms,API 总耗时平均 27ms。

README区域截图

训练数据有参考价值

项目作者用 GTX 950M 显卡做了一组训练统计,条件是两万张数字加小写字母的验证码:

  • 5000 次,约 25 分钟,训练集字符准确率 84%
  • 9190 次,约 46 分钟,训练集字符准确率 100%、图片准确率 100%
  • 12000 次后,测试集准确率基本稳定

这个数据表明,在常规字符型验证码场景下,用一块普通笔记本显卡训练不到一小时就能达到可用水平。对于想快速验证想法的人来说,这个门槛不算高。

谁适合用

如果你是做爬虫或数据采集,需要处理字符型验证码,又不想花太多时间在图像处理算法上,这个项目可以直接上手。

如果你想入门深度学习图像识别,验证码是个不错的练手场景。数据可以自己生成,标注自带,反馈周期短,调参效果一目了然。

项目也支持多模型部署,不同验证码类型可以加载不同模型,通过路由区分调用。

一点提醒

项目基于 TensorFlow 1.x era 的代码,如果你现在用的是较新环境,可能需要做些兼容性调整。另外项目主要处理字符型验证码,点选、拖拽这类需要目标检测的场景,作者推荐用另一个基于 darknet 的项目。

cnn_captcha 把 CNN 验证码识别这件事工程化得比较到位,代码结构清晰,文档覆盖了从训练到部署的完整流程,适合拿来直接用,也适合作为学习参考。

验证码识别这件事工程化得比较到位,代码结构清晰,文档覆盖了从训练到部署的完整流程,适合拿来直接用,也适合作为学习参考。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐