利用图像边缘检测算子破解滑动拼图验证码

在之前用神经网络的方法搞了一把前公司的验证码以后,前同事们也快速作出响应,迅速把普通验证码换成了滑动拼图验证码,然后还说: 我觉得我可能是和验证码杠上了。 滑动验证码拼图的定位问题只是破解过程中的一个环节,我的方案主要采用 opencv 提供的函数对图片进行处理后来实现定位,在这里只提供一个思路,抛砖引玉了。 最终的实现效果可以通过 这个Demo 简单感受一下。相比之前用神经网络训练来破解普通验证码,这次的实现方式可能更具通用性,因为不用再依赖训练数据。 关于滑动验证码 演示项目所用到的滑动验证码实现相对简单,整个交互过程主要包含以下步骤: 服务端将背景图片和拼图图片合并为一张图片,并记录下拼图在背景图中的x坐标,然后将拼好图片和单独的拼图图片返回给客户端 客户端实现单片拼图在背景图上拖动的动画效果,并在用户完成拖动动作后,将当前拼图所处位置的坐标数据加密后返回给服务端 服务端解密数据并比较客户端返回的x坐标数据并与之前保存的x坐标数据进行比较,允许小范围内的误差 实现原理 基于以上的验证码实现,本例子通过以下方式实现对验证码拼图在背景图中的定位(其他步骤较为简单,不做考虑): 利用opencv库中提供的边界查找函数(cv2.findContours)提取单片拼图边缘轨迹并构造成一个二维矩阵(算子),具体代码如下: shape = cv2.resize(cv2.imread('shape.png'), (shape_height, shape_width)…

用卷积神经网络识别普通验证码

最近在学习神经网络的相关知识,也谈谈自己目前对神经网络一些浅薄的认识。 实际生产生活中的很多问题都可以理解成如何建立从一个集合到另一个集合的映射关系的问题,也可以说成是,如何设计一个函数的问题。这个函数有一组权重参数,输入集合的数据经过权重参数的处理对应到不同的输出数据。而所谓的神经网络正是由一层一层这样的函数堆叠组成,所以神经网络也叫深度学习。深度学习中最重要一个环节就是通过大量的数据对各层函数的权重参数进行训练,所谓学习(训练)便是通过不断地修正,使权重参数慢慢趋于准确,尽量让所有训练数据的输入在经过权重参数的处理后都能映射到正确的输出,这样的学习(训练)过程往往需要将训练数据一轮一轮的输入我们设计的神经网络模型中,经过长时间反复拟合来实现。 神经网络中的 误差函数 即是一个能表示当前输入数据经过权重参数处理后得到的实际输出和预期输出之间误差大小的函数。我们的目的则可以表述为求取误差函数值最小时对应权重参数的值,当把误差函数用权重参数来表达时,这个问题又可以理解成求误差函数的极小值(一定区间内的最小值),即误差函数对于权重参数导数为0的那一个点。在计算机的数学优化方法中,一般采用梯度下降法来解决这个问题,而所谓梯度下降法,即从误差函数上的一点开始,沿着梯度(导数)下降的方向一点一点地逼近,最终得到一个近似的误差极小的点。梯度下降法是神经网络理论中最基础的知识。而其他如随机梯度下降、批量梯度下降和小批量梯度下降都是对上面提到的梯度下降法的优化,而其本质思想是相同的。而其他的一些相关知识也大都围绕着这一基本思想展开。如学习速度(learning rate)是对在梯度下降的过程中每一步移动大小的表述,而各种各样的优化器则是针对如何让程序自动地选取最合适的学习速率所设计的算法。 常见的神经网络模型大概分为:全连接神经网络、卷积神经网络、循环神经网络等几个大类。本文所提及的卷积神经网络借鉴了数字图像处理中使用算子对图片特征进行提取的方法,…

终端登录VPS延迟太高?试试Mosh

把服务器迁到日本后,比较坑的一个问题出现了,虽然日本离中国这么近,ping的延迟还是有好几百毫秒,HTTP访问机器上的服务倒是没什么影响,但是 ssh 登录到终端问题就来了, ssh 采用 TCP 方式建立连接,并且每输入一个字符,都需要等待其服务端返回确认后才能发送下一个字符,再加上网络可能会有丢包什么的情况,造成的后果就是,输入任何一条命令,都会一卡...一卡...一卡...... Mosh 可以认为是高延迟网络环境下 ssh 的一个替代选择,Github上star 6K 多还是挺屌的,Mosh采用UDP的方式进行通信。好了,我一共就知道这么多。 Mosh除了不会再卡了,Mosh还有一个显著的优点,是即使断网Mosh的也不会断开,因为毕竟是通过UDP进行数据传输,并没有建立实际上的连接。 来看看具体怎么使用吧。 在服务器上启动 mosh-server, 在自己的设备上用 mosh 去连,和 ssh 看起来是一样的。 mosh [user@]host 使用起来总体感受还是很顺畅的,起码输命令不会卡了。 更多的细节,…

Shadowsocks Manager:分享VPS的闲置流量

最近把自己服务器从阿里云迁到了Vultr, 不比不知道,差不多的配置价格便宜了差不多一半,而且还有各种新用户充值活动,的确划算。 还有常年有效的个人邀请码,http://www.vultr.com/?ref=7157325,新用户下单后各奖励10$,还是很不错哦。 我选择的是日本机房的节点,每月5$,提供1000G流量,日本距离中国也比较近,速度还是相当不错的。感觉博客打开的速度比以前用阿里云还要更快一些呢,哈哈。 说到正题,我在之前的一篇博客里分享过一个用shadowsocks搭建翻墙服务的方法,这次的主角 shadowsocks manager 正是一个开源的shadowsocks管理系统,通过它能实现帐号管理、流量控制、订单管理等功能。由于中国大陆目前的特殊国情,市场上存在大量提供翻墙服务的商家,其中很大一部分都采用了通过shadowsocks来实现翻墙的方式,我想这其中又有很大一部分还是基于shadowsocks manager 做的二次开发。 shadowsocks manager 项目地址: https://github.com/shadowsocks/shadowsocks-manager 如果觉得觉得部署麻烦的话,当然,还可以用这个现成的 Docker 镜像,虽然我稍微改了一点点界面:…

Docker + PHPStorm 搭建虚拟化开发环境

从 PHPStorm 2016.3 版本起, PHPStorm 对 Docker 提供了更友好的支持. 在之前的版本中, 想在 PHPStorm 中使用 Docker 容器内的 PHP 解释器(interpreter)来调试代码是比较麻烦的, 我们需要在 Docker 容器内安装并启动 sshd 服务(由于一个 Docker 只能服务单个进程, 还需要借助 supervisord 等进程管理工具来实现), 再配置 PHPStorm 通过 ssh 的方式访问容器内的 PHP 解释器. 不过现在, Docker 已成为了 PHPStorm 的一等公民. 那么是时候和 Vagrant 说再见, 投入 Docker 的怀抱啦. 当然, 如果你还是更喜欢…

用Elasticsearch搭建一个全文搜索服务

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。 (百度百科) 准备工作 在Docker容器中运行 Elasticsearch 并安装 elasticsearch-head 管理工具, 注意将 Elasticsearch 的 9200 9300 端口映射到宿主机, 并将 config 及 plugins 目录挂载到宿主机. docker-compose.yml 配置: version: '2' services: elasticsearch: image: elasticsearch:5.2.0 container_name: med-news-es-dev ports: - "9200:9200"…