12306验证码为什么那么变态?都是这项深度学习应用给逼的

article/2025/9/10 16:08:25


导读:12306为什么要设置那么复杂的验证码机制呢?就是因为OCR。

今天聊OCR。

OCR是人工智能、机器学习特别是深度学习,在图像识别方向最为重要的应用之一。OCR全称Optical Chararcter Recogition,中文翻译为光学字符识别,通常简写为OCR。

作者:莫凡

来源:大数据DT(ID:hzdashuju)

如果之前没有接触过OCR,光看名字上又光学又识别的,容易产生“听起好像很高端很复杂”的距离感,但实际上,计算机科学的每一项技术都是为了机器具备多一项技能,而OCR要机器具备的,是一项对于我们人来说属于最最基本的技能——“看图识字”。

我们可能对这个能力习以为常了,以至于不会觉得这算是一项能力,但仔细想一想就知道,看图识字虽然最最基本,不过同样也最最基础,很多工作都需要首先具备看图识字这项技能才能开展。同样的道理,OCR现在也已经是我们日常生活中应用最为广泛的智能技术之一。

如果一时没想起来,不妨从咱们中国人都很熟悉的春运说起。12306大家应该都知道,是订火车票的官方网站,2015年12306出了一个轰动全国的“大新闻”,12306改变“验证码机制”了。买火车票之前,用户先得要做几道颇为棘手的智力题,譬如要求在几张图片中找出某位名人,据说有些用户因为知识面比较窄最后选择放弃了购买火车票。

这事大家都知道,不过有没有想过一个最基本的问题:12306为什么要改变验证码机制呢?

就是因为OCR。

▲网友恶搞的12306验证码

验证码之所以叫验证“码”,是因为最开始验证码大都是一串保存在图片里的四位数字。验证码的作用自然是区别真人和机器,听起来很厉害,其实原理异常简单:机器擅长处理结构化数据,而对于图像、文本和音频这些生活中很常见但属于非结构化的数据,对机器来说,用传统的算法处理难度非常大。

为什么呢?不妨想象一个最最传统的验证码,白底黑字,上面一共四个阿拉伯数字,我们人自然看一眼就知道是哪四个数字。但是在机器看起来,这张图片是由一个挨一个的像素数值构成的数据矩阵,这就产生一个问题,我们人看起来是“空白”的地方,在机器看起来同样也存在着数字,并没有什么不同,自然无法区分到底上面写了什么。

OCR的研究人员当然也没有偷懒,努力尝试了很多办法,有一种思路是提取图片特征,也研究出两种传统的提取方法,分别是基于结构形态的特征提取,和基于几何分布的特征提取,也取得一些成果。

但总的来说,要求机器准确识别图片中的数字仍然很困难,只要图片中存在一点点杂质干扰,识别的正确率就大幅度下降,这就是为什么后来验证码都会选择采用一些随机线条,对于OCR来说,这都是低成本高收益的防破解手段。但对人来说却轻而易举,只需要看一眼就能识别。

正是因为人和机器在处理非结构化数据存在能力鸿沟,在验证码这里,就是人和机器在识别图片中字符上的能力存在显著差异,因此,只要简单使用验证码,就能相当准确地辨别正在输入的究竟是人还是机器。

那为什么12306在2015年就非得换了很好用的验证码机制呢?是因为就在2012年,发生了一件轰动整个研究界的事件,这个事件影响深远,推动OCR技术发生飞跃,从此机器也能很轻易就准确识别图片上的数字了。

OCR并不是新出现的概念,起步非常早。根据《深度实践OCR:基于深度学习的文字识别》一书介绍,早在1929年,德国科学家就已经提出了OCR的想法,后续又有一些科学家加入进行这方面研究,不过,直接计算机出现以后,想法才慢慢落地。

相比之下,中国对OCR的研究起步稍晚,起步于70年代,算起来也有近50年的历史了。

但是,虽然早就开始了对OCR的研究,科学家们也从各个方面贡献了很有颇有益处的奇思妙想,为后续研究奠定了坚实基础,但总的来说,OCR技术的应用发展迟缓,直到前些年仍然处于学术研究的领域。不过,每一项科研领域的僵局都最终会被一项划时代的技术打破,打破OCR领域僵局的就是鼎鼎大名的深度学习技术。

2012年发生了什么事呢?发生了这么一件事,基于深度学习的卷积网络模型AlexNet,在ImageNet图像分类比赛中拔得头筹。拔得头筹这事本身不算什么,毕竟只要有比赛就一定会有人拔得头筹,问题是在以往的比赛,不同模型之间的差距很小,第一名都是“险胜”,第二名都是“惜败”。

而到了2012年,AlexNet不但赢了第一名,而且在识别准确率方面超过第二名10%,相当于百米短跑我第一名冲线,而且我不但冲线了,我还在终点吃了顿饭,然后第二名才刚刚跑完全程。这种碾压式的胜利让业界对这场赛事的评论纷纷变成了B站的弹幕,概括来说就一句话:大人,时代变了。

当然了,前面这段讲得很戏剧化,也有很多人喜欢用“石破天惊”之类的词来形容,但应该说,深度学习并不是什么凭空出现的新技术,它是由机器学习下面的神经网络模型发展而来的。

人工智能、机器学习和深度学习三者之间千丝万缕的关系,我们在前面的文章已经进行了细致的介绍,不再赘述,但深度学习的崛起,确实给OCR的应用注入了全新的活力。

深度学习很快火遍全球,有意思的是,很多面向初学者的深度学习教程不约而同选择了将使用深度学习模型识别MNIST手写数据集作为深度学习领域的“Hello World”,从前极为困难的验证码识别,在深度学习时代居然变成了初学者的第一堂功课,这是深度学习与OCR结合最为成功的案例。从此,OCR展翅飞出象牙塔,飞入寻常百姓家。

不过,我还是想特别说明一下,OCR是一项通用性非常强的技术,OCR与深度学习的结合逼得12306改验证码机制,这只是OCR技术的能力展示,OCR活跃的天地远比验证码广阔得多,我们的机器距离我们的生活差的最后一公里,可能就有赖OCR来打通。

你可能会问,机器和生活还差最后一公里,我怎么没感觉到,这是什么意思?

回想一下,我们现在的生活其实是有两套并行记录体系,就拿最常见的去银行办理业务来说吧,我们先得用笔手工填写一份纸质的表格,上面包含了各项信息,这是一套记录体系。然后我们给银行柜台的工作人员提交表格,工作人员会让我们先等一会,等什么呢,就是等工作人员通过电脑终端把信息转录到另一套记录体系。

现代银行基本都依靠各类信息系统进行管理,但这些信息系统是不能直接读取纸质表格的信息,那怎么办呢,只好通过人来转录,这个转录的过程免不了需要消耗人的时间和精力,增加了办理业务的成本,甚至成为限制提升业务办理效率的瓶颈之一。

两套并行记录体系对我们的影响当然远不止于银行,从更为宏观的视角来看,消耗了人类社会大量的人力物力,以及对于人来说更为宝贵的时间。

你可能又要说了,这些都是窗口业务,和日常生活关系并不紧密。其实不然,举一个我们很熟悉例子,二维码。

就拿春晚的观众互动来说吧,过去主持人是说想要和春晚互动的观众朋友,可以把信息发到屏幕下方公布的号码。那么,观众如果真要互动,就必须得把再屏幕上看到的这串长长的数字逐个逐个敲进手机,光是想就觉得麻烦,再加上有时候看错或者敲错,感觉就更费劲了。

现在有了二维码,主持人说想要和春晚互动的观众朋友,扫描屏幕下方的二维码就可以了,操作起来就简单太多了。所以,现在满大街都是二维码,就是因为二维码更为便捷。

不过,二维码只能解决两套记录体系并行问题的很小一部分,其它手段譬如内置芯片也只能治标不治本,毕竟我们人类社会几千年来都以纸作为信息的记录介质,已经产生了太多不可能符合机器读取要求的信息,要从根本上解决两套记录体系并行的问题,还是需要机器具备和人一样的“看图识字”的能力,也就是最终还得依靠OCR。

那么,现在的OCR技术发展到什么水平,又解决了什么实际问题了呢?

我认为,一项应用技术最重要的不是听起来有多前沿多高端,而是能解决什么实实在在的问题。我们说OCR突飞猛进,是因为OCR和深度学习结合以后,只需要简单拍照,就可以直接从图片中提取相应的文字,在很多应用场景已经有点“扫码即可”的意思了。

很多纸质的表格,譬如前面说的银行各类业务的表格,现在只需要简单地拍照就可以一下完成信息录入。以前我们拿到纸质名片,还需要手工敲字记录,现在很多APP都提供一项功能,只要对名片进行拍照,就能自动提取上面的文字。

同时,OCR带来的不仅仅是简化录入,很多传统的软件功能,也因为OCR技术的发展,而带来了全新的使用体验。就说我印象最深的翻译软件,翻译软件当然不是什么新产品,大家应该都用过。

但一直以来使用翻译软件都有一个限制,那就是不管软件本身的翻译能力有多强,你得先录入原文然后才能看到译文,这有一个什么问题呢?有一些外语的原文我不知道怎么通过英文键盘输入,譬如日文、德文、法文,相信不是专门学这些语言的朋友都有和我同样的困扰。

现在有了OCR就方便多了,只需要直拍照就能提取文字,不但解决了输入问题,效率还要高得多,有些翻译软件干脆就在原图上P上译文,更加直接明了,让我对翻软件有一种耳目一新的感觉。

除了翻译软件,OCR给我们熟悉的产品带来的改变还有很多,毕竟只要可以从图片中准确提取文字,就有太多的地方等待着我们发挥广阔的想象力。譬如说,通过OCR技术,即使是扫描生成的PDF也支持文本搜索了。

如果觉得这个例子太小,那就说搜素引擎,现在的搜索引擎还笨得很,输入文字只能搜到文字,输入图片只能搜到图片,文字和图片是泾渭分明,如果你想用文字搜带有这段文字的图片呢?对不起不行。

不过使用了OCR,以后也可以以文搜图了。譬如你翻老照片时找到一张你光着屁股坐在一块写着一段文字的石头上,你想知道这张照片在哪拍的。可是现在你去搜这段文字,很可能要么就什么都找不到,要么就找到一大堆无关的内容。

未来如果搜索引擎支持搜索图中文字的功能,你就能马上找到带有这段文字的其它照片,没准其中就有你想要找的内容。

OCR就介绍到这里,相信大家对于OCR是什么,能做什么,未来会有怎样的发展已经有了初步的了解。可是,OCR技术的原理是什么,传统的做法是什么,现在和深度学习又是怎样结合在一起?

我推荐大家阅读前面提过的这本专门介绍这些问题的书,《深度实践OCR:基于深度学习的文字识别》。这本书对OCR的介绍很全面,先从OCR的发展历程和经典的技术原理说起,然后介绍了深度学习的主要技术,最后再仔细介绍OCR和深度学术如何结合,而且还对如何通过代码实现进行了详细说明。看完这本书,对OCR的全貌、原理和应用,应该就能有比较清晰的了解。

作者简介:莫凡,网名木羊同学。娱乐向机器学习解说选手,《机器学习算法的数学解析与Python实现》作者,前沿技术发展观潮者,擅长高冷技术的“白菜化”解说,微信公众号“睡前机器学习”,个人知乎号“木羊”。

延伸阅读《深度实践OCR》

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:阿里巴巴本地生活研究院算法团队联合知名场景文本算法作者撰写,产业应用和学术前沿的一次思想碰撞!从组件、算法、实现、工程应用等维度系统讲解基于深度学习的OCR技术的原理和落地,提供大量案例。

划重点????

干货直达????

  • 什么是数字孪生?已有哪些应用?终于有人讲明白了

  • 从Hadoop到ClickHouse,现代BI系统有哪些问题?如何解决?

  • 父亲节,来认识一下这几位“爸爸”

  • 手把手教你用直方图、饼图和条形图做数据分析(Python代码)

更多精彩????

在公众号对话框输入以下关键词

查看更多优质内容!

PPT | 读书 | 书单 | 硬核 | 干货 讲明白

大数据 | 云计算 | 数据库 | Python | 可视化 | 神操作

AI | 人工智能 | 机器学习 | 深度学习 | 神经网络

5G | 中台 | 用户画像 1024 | 大神 | 数学 | 揭秘

据统计,99%的大咖都完成了这个神操作

????


http://chatgpt.dhexx.cn/article/QXgRUlXK.shtml

相关文章

12306验证码的一些思考

12306的验证码长这个样子: 让选择图片.看起来非常完美的图片验证码.比那些简单又没有实用的字母数字验证码组合强太多了.那些字母数字组合直接获取图片光学识别然后填进表单就可以攻破. 我也想实现这样的. 怎么去实现呢? 设计一个简单点的吧. 1.我先收集图片.收集200张.分…

12306 验证码代码分析

验证码是一个很有趣的问题,其目的是谁是一个人或机器输入来区分,这个问题的实质是一个图灵测试(推荐电影《模仿游戏》),验证码是一种简单而有效的验证方法,由CMU在教授2000在有关创建。后来这头牛谁又将收集…

Python——12306图片验证码

本次爬虫,我们来模拟一下12306的验证码验证 本次练习用到的模块: requestsrebase64urllib3 第一步,按F12查看验证码图片的信息: 提取URL:https://kyfw.12306.cn/passport/captcha/captch…

debian安装docker(通用方法)

本教程源于官网教程进行解释官网教程 docker容器是一个可以同时跑青龙(用于挂机脚本)与宝塔(用于便携式部署网站)之类的工具 我安装时在网络上搜索的教程来在部分电脑或者是主机上有时会出错尤其是32位系统的 于是我在疯狂百度总…

Debian安装mysql

Debian 10系统中默认使用了MariaDB,在APT的软件源中并没有mysql。所以,Debian 10 如果要安装mysql,需要下载安装Mysql APT Repository,更新APT Repository 后再使用 apt-get 安装。 设置软件源 点击mysql下载地址,下载…

linux Deploy 安装debian

一 准备工作 1、一台root的魅蓝note6手机,手机root教程需要自己根据机型搜索 2、去 https://github.com/meefik/linuxdeploy/releases下载linux deploy 3、去https://github.com/meefik/busybox/releases 下载BusyBox (安卓平台虚拟机(chroot运行linux的…

Debian10安装

Debian 10.7(buster) 使用bt文件下载 下载链接:https://cdimage.debian.org/debian-cd/current/amd64/bt-dvd/ 这次是在VMware Workstation上安装的,如果是想在实体机上安装的话,需要做个启动盘,就是把ISO文件刻录到USB或DVD上。…

debian安装和基本使用

debian安装和基本使用 由于centos停止更新,改用debian debian下载,官网去下载DVD版本,4g多的体量,包含的软件比较全。 虚拟机安装,如果进入安装界面直接黑屏卡死,要注意是否镜像ISO文件未加挂。手动在虚拟…

Debian10: 系统安装

若非虚拟机安装,需要制作启动U盘,备份好U盘的数据后,使用UltraISO工具或Rufus(http://rufus.ie/)将 debian-10.6.0-amd64-DVD-1.iso文件写入U盘,将此U盘插入服务器,设置服务器从U盘启动即可。 第一步:选择…

安装debian11系统

镜像下载地址:https://gemmei.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-11.6.0-amd64-netinst.iso 一、选择图形化安装(这里说一下,这里的图形化安装是安装过程是图形化的,并非是选择系统带图形化界面,…

Debian 系统安装,小白教程

大家好,我是橘子。在工作过程中呢遇到了很多问题,踩了很多坑。网上很多都有教程但总是缺胳膊少腿,说了大概但坑似乎依旧存在。从今天开始,我会将自己碰到的一些坑和如何解决的分享给大家。如果你是个大佬,那我的内容对…

最新发布 Debian 系统的详细安装过程

前言 Debian 究竟是什么?有官方详细介绍说明,在此就不过多介绍说明了,只告知官网,可点击查看官网介绍。 管网连接 :Debian -- About Debian https://www.debian.org/intro/about 平台准备 使用 VMware 平台搭建&…

Debian 11 安装,超详细!

安装装备 华为源中下载镜像 https://repo.huaweicloud.com/debian-cd/11.0.0/amd64/iso-cd/ 3A服务器的虚拟机 开始安装 配置虚拟机 直接回车即可,第一次安装的小伙伴可以选择中文版安装,这样方便易懂, 一路继续,配置网络&a…

如何轻松安装 Debian Linux 系统

安装 Debian 的轻松程度依赖于选择什么镜像。 如果你使用 Debain 官网的默认 ISO 镜像,安装 Debian 就比较费劲。你会卡在这种界面,让你从外部可移动介质上安装网络驱动。 对于新用户来说,从默认的 ISO 中安装 Debian 是有问题的 当然你可以…

IOC 是什么

Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键…

什么是 IoC 容器?

什么是 IoC 容器? 这个问题我觉得可以拆分为 3 小问: IoC 是什么意思?容器 指什么?IoC 容器是什么? 首先对于 IoC Inversion Of Control 翻译过来即 控制反转。理解 ”控制反转“ ,我觉得首先是要明白&a…

Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?

这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能,本篇分享的是: 【 Spring中的IOC是什么意思,为什么…

什么是IOC容器

1.IOC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合,更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试&#x…

java ioc是什么意思_Java技术面试题解析:举例说明什么是IoC

原标题:Java技术面试题解析:举例说明什么是IoC IoC是什么呢?有些人可能会有疑问? IoC便是Inversion of Control,操控回转。在Java开发中,IoC意味着将你规划好的类交给系统去操控,而不是在你的类…

JAVA的是什么ioc_spring中ioc是什么

IoC——Inversion of Control,控制反转 在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则。 DI——…