基于计算机视觉盲点的视错觉验证码算法
作者:路昊天 指导老师:陈军
摘要:验证码是(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,人们有时称CAPTCHA是一种反向图灵测试,1现在其他作用是防止恶意破解密码、刷票、论坛灌水、刷页。2 我设计了一款视错觉验证码系统,使普通机器无法识别验证码,拥有成本低,安全性高,应用性强,安全可靠并实验成功。

目录
1 关于计算机视觉
1.1 计算机视觉是什么
1.2 计算机视觉的范围
1.3 计算机视觉盲点
1.4 验证码的作用
1.5 常用的验证码干扰方式
2 视错觉验证码算法设计
2.1 普通验证码的构成
2.2 识别普通验证码
2.3 灵感来源
2.4 视错觉的原理
2.5 人工智能识别视错觉的原理
3 视错觉验证码与普通验证码对比试验
3.1 普通识别
3.2 人工识别
3.3 数据对比
4 最后总结

一、 关于计算机视觉

  1. 计算机视觉是什么3

    计算机视觉是指用摄像机和电脑及其他相关设备,对生物视觉的一种模拟。它的主要任务是通过对采集的图片或视频进行处理以获得相应场景的三维信息,就像人类和许多其他类生物每天所做的那样。
    计算机视觉的最终目标是使计算机能像人那样通过视觉观察和理解世界,具有自主适应环境的能力。但能真正实现计算机能够通过摄像机感知这个世界却是非常之难,因为虽然摄像机拍摄的图像我们平时所见一样,但对于计算机来说,任何图像都只是如上图右半边所示的像素值排列,是一堆死板的数字。如何让计算机从这些死板的数字里面读取到有意义的视觉线索,是计算机视觉应该解决的问题
    然而,计算机视觉发展多年,却依然存在着一系列难以解决的难题。目前人们掌握的具体计算机视觉任务的方法,也仅仅适用于狭隘的人脸识别、指纹识别等简单任务,无法广泛的应用于不同场合。不过,也有学者认为,随着机器学习方法的日渐普及以及大数据科技的应用,计算机视觉实现质的突破也是指日可待的。

  2. 计算机视觉的范围4
    计算机视觉设计到的范围极为广泛,现在实际应用到现实中的有:
    人脸识别: Snapchat 和 Facebook 使用人脸检测算法来识别人脸。
    图像检索:Google Images 与各种浏览器引擎使用基于内容的查询来搜索相关图片,算法分析查询图像中的内容并根据最佳匹配内容返回结果。
    游戏和控制:使用立体视觉较为成功的游戏应用产品是:微软Kinect。
    监测:用于监测可疑行为的监视摄像头遍布于各大公共场所中。
    生物识别技术:指纹、虹膜和人脸匹配仍然是生物识别领域的一些常用方法。
    智能汽车:计算机视觉仍然是检测交通标志、灯光和其他视觉特征的主要信息来源

    种类繁多,大致可以分为以下几类:
    (1) 图像分类
    给定一组各自被标记为单一类别的图像,我们对一组新的测试图像的类别进行预测,并测量预测的准确性结果,这就是图像分类问题。
    (2) 对象检测
    识别图像中的对象这一任务,通常会涉及到为各个对象输出边界框和标签。这不同于分类/定位任务——对很多对象进行分类和定位,而不仅仅是对个主体对象进行分类和定位。在对象检测中,你只有 2 个对象分类类别,即对象边界框和非对象边界框。
    (3) 目标跟踪
    目标跟踪,是指在特定场景跟踪某一个或多个特定感兴趣对象的过程。传统的应用就是视频和真实世界的交互,在检测到初始对象之后进行观察。
    (4) 语义分割
    计算机视觉的核心是分割,它将整个图像分成一个个像素组,然后对其进行标记和分类。特别地,语义分割试图在语义上理解图像中每个像素的角色(比如,识别它是汽车、摩托车还是其他的类别)。
    (5) 示例分割
    除了语义分割之外,实例分割将不同类型的实例进行分类,比如用 5 种不同颜色来标记 5 辆汽车。分类任务通常来说就是识别出包含单个对象的图像是什么,但在分割实例时,我们需要执行更复杂的任务。我们会看到多个重叠物体和不同背景的复杂景象,我们不仅需要将这些不同的对象进行分类,而且还要确定对象的边界、差异和彼此之间的关系。

  3. 计算机视觉盲点5
    如今,计算机视觉可以像人一样准确地追踪车辆、人脸以及生产过程。当有大量的数据需要筛选时,计算机视觉模型是比人工更好的选择。
    然而,其仍然存在局限性。在识别人物和动作方面,计算机的效率落后于人工。计算机无法在多个摄像机之间追踪同一个人或物,无法自行定义看到的东西,也很容易被欺骗。想要摄像头在制造业和智慧城市中发挥更大的作用,工程师们必须打破这些局限。
    摄像头还需具备防范“对手攻击”的能力,这涉及一个全新的研究领域。正如人类会被视错觉欺骗一样,各种伎俩也能扭曲正常的图像,从而误导计算机视觉。
    而验证码正是利用了这一特点,使其发挥了作用。

  4. 验证码的作用

验证码是(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,人们有时称CAPTCHA是一种反向图灵测试,现在其他作用是防止恶意破解密码、刷票、论坛灌水、刷页。

  1. 常用的验证码干扰方式
    在生活中,常用的验证码的生成方式有:
    ·干扰线
    ·噪点
    ·扭曲符号
    ·混乱颜色
    ·联合字符
    等等,但这些基本上都能被现在的计算机识别轻松解决,安全性很低,也使得网上各个平台:例如微博等等中出现了所谓的“僵尸”。
    而我,设计了给予计算机不能识别视错觉这一方面设计出了一种全新的视错觉验证码。

二、视错觉验证码算法设计

  1. 普通验证码的构成:
    利用随机生成数字(或字符)并对其进行噪点处理,添加干扰线,扭曲图像并改变随机大小,有些还会添加不同的颜色来增加难度。
    许多网站的验证码都是这样构成的,实际安全性偏低。
    更高级的网站一般会选择使用行为验证吗,让机器无法回答,但是有时候重复性高,可能会被枚举出来,
  2. 识别普通验证码

(图1)
识别像图1这样的验证码时,一般会先经过如下操作:
(1) 处理颜色
(2)去除噪点
(3)去除干扰线
(4)区块划分
(5)识别图像
所以我们可以用Python所写的普通验证码验证代码来尝试验证这中类型的验证码6:
import re # 用于正则
from PIL import Image # 用于打开图片和对图片处理
import pytesseract # 用于图片转文字
from selenium import webdriver # 用于打开网站
import time # 代码运行停顿

class VerificationCode:
def init(self):
self.driver = webdriver.Firefox()
self.find_element = self.driver.find_element_by_css_selector

def get_pictures(self):self.driver.get('http://123.255.123.3')  # 打开登陆页面self.driver.save_screenshot('pictures.png')  # 全屏截图page_snap_obj = Image.open('pictures.png')img = self.find_element('#pic')  # 验证码元素位置time.sleep(1)location = img.locationsize = img.size  # 获取验证码的大小参数left = location['x']top = location['y']right = left + size['width']bottom = top + size['height']image_obj = page_snap_obj.crop((left, top, right, bottom))  # 按照验证码的长宽,切割验证码image_obj.show()  # 打开切割后的完整验证码self.driver.close()  # 处理完验证码后关闭浏览器return image_objdef processing_image(self):image_obj = self.get_pictures()  # 获取验证码img = image_obj.convert("L")  # 转灰度pixdata = img.load()w, h = img.sizethreshold = 160# 遍历所有像素,大于阈值的为黑色for y in range(h):for x in range(w):if pixdata[x, y] < threshold:pixdata[x, y] = 0else:pixdata[x, y] = 255return imgdef delete_spot(self):images = self.processing_image()data = images.getdata()w, h = images.sizeblack_point = 0for x in range(1, w - 1):for y in range(1, h - 1):mid_pixel = data[w * y + x]  # 中央像素点像素值if mid_pixel < 50:  # 找出上下左右四个方向像素点像素值top_pixel = data[w * (y - 1) + x]left_pixel = data[w * y + (x - 1)]down_pixel = data[w * (y + 1) + x]right_pixel = data[w * y + (x + 1)]# 判断上下左右的黑色像素点总个数if top_pixel < 10:black_point += 1if left_pixel < 10:black_point += 1if down_pixel < 10:black_point += 1if right_pixel < 10:black_point += 1if black_point < 1:images.putpixel((x, y), 255)black_point = 0# images.show()return imagesdef image_str(self):image = self.delete_spot()pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"  # 设置pyteseract路径result = pytesseract.image_to_string(image)  # 图片转文字resultj = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", result)  # 去除识别出来的特殊字符result_four = resultj[0:4]  # 只获取前4个字符# print(resultj)  # 打印识别的验证码return result_four

if name == ‘main’:
a = VerificationCode()
a.image_str()
3. 灵感来源
实话实说,我这想法其实是突发奇想想出来的,一开始,我只是想到了视错觉,然后就失去了方向,然后我就一如既往的上了洛谷网站去做 c++ 的题目。
就是这样,我在登陆的时候突然看到了验证码,我就突然联想到了今天要想的课题,用视错觉做的验证码。
后来,我的题目经过了一次又一次的修改,重新定义之后,它终于成为了现在的这样子,我自己也没有想到自己能做到这一步。
4.视错觉的原理7
对于视错觉,迄今仍未有确切的解释。
克里克曾给出的三点评述:
1、你很容易被你的视觉系统所欺骗;
2、我们眼睛提供的视觉信息可能是模棱两可的;
3、看是一个构建过程。
你很容易被自己的视觉系统所欺骗。我们通常认为我们能以同样的清晰度看清楚视野内的任何东西,但如果我们的眼睛在短时间内保持不动,就会发现这是错误的。只有接近注视中心,才能看到物体的细节,越偏离视觉中心,对细节的分辨能力越差,到了视野的最外围,甚至连辨别物体都困难。在日常生活中这一点之所以显得不明显,是由于我们很容易不断移动眼睛,使我们产生了各处物体同样清晰的错觉。

我们的眼睛提供给我们的任何一种视觉信息通常都是模棱两可的,它本身提供的信息不足以使我们对现实世界中的物体给出一个确定的解释。事实上,经常会有多种可信的不同解释。但值得注意的是,某一时刻只能有一种解释,不会出现几种解释混合的奇特情况。对视觉图象的不同解释是数学上称为“不适定问题”的例证。对任何一个不适定问题都有多种可能的解,在不附加任何信息的条件下,它们同样都合理。为了得到真实的解,需要使用数学上所谓的“约束条件”。视觉系统必须得到如何最好解释输入信息的固有假设。我们通常看东西时之所以并不存在不确定性,是由于大脑把由视觉景象的形状、颜色、运动等许多显著特征所提供的信息组合在一起,并对所有这些不同视觉线索综合考虑后提出了最为合理的解释。

看是一个构建过程,大脑并非是被动地记录进入眼睛的视觉信息,而是主动地寻求对这些信息的解释。一个突出的例子是“填充”过程,如和盲点有关的填充现象。盲点是因为联结眼和脑的视神经纤维需要从某点离开眼睛,因此在视网膜的一个小区域内便没有光感受器。但是,尽管存在盲区,我们的视野中却没有明显的洞。这说明大脑试图用准确的推测填补上盲点处应该有的东西。

俗话说“眼见为实”,按照通常的理解,它的意思指你看到某件东西,就该相信它确实存在。然而克里克对此给出了完全不同的解释:你看见的东西并不一定存在,而是你的大脑认为它存在。在很多情况下,它确实与视觉世界的特性相符合,但在另一些情况下,盲目的“相信”可能导致错误。看是一个主动的构建过程,你的大脑可根据先前的经验和眼睛提供的有限而又模糊的信息作出最好的解释。心理学家之所以热衷于研究视错觉,就是因为视觉系统的部分功能缺陷恰恰能为揭示该系统的组织方式提供某些有用的线索。
就是因为我们会被视错觉欺骗,所以我们就可以利用计算机无法像人类一样看待视错觉并提取信息,我们就可以做出视错觉验证码来使机器无法识别验证码。
5.人工智能识别验证码原理8
在世界识别视错觉类型的图片上,
美国布朗大学的计算机视觉专家团队打算通过深度学习教计算机如何“被骗”。他们的研究发表于9月20日的权威期刊《心理学评论(Psychological Review)》上。
研究团队为视觉皮层的解剖学和神经生理学数据建立了计算模型。该模型旨在捕捉相邻皮层神经元如何相互发送信息,并在呈现复杂刺激(如语境视错觉)时调整彼此的反应。模型的一项创新,是它提出了神经元之间的反馈模式。根据具体的感知语境,这些反馈连接或激发、或抑制中枢神经的响应,从而决定了视错觉是否发生。
目前的大多数深度学习算法中不存在这些反馈连接。深度学习是一种强大的人工智能,能够学习数据中的复杂模式,例如识别图像和解析正常语音,并依赖于多层人工神经网络协同工作。然而,大多数深度学习算法仅包括多层之间的前馈连接,而不是在同层神经元之间的创新反馈连接。
建立模型后,就可以诱导出各式各样的语境视错觉。研究人员能够像给收音机调台一样,调整反馈兴奋性或抑制性连接的强度,让人工智能系统也以与灵长类视觉皮层的神经生理学数据一致的方式响应。他们用各种视错觉图片测试了系统,成功地让人工智能“受了骗”。
但是这个模型是不是过度复杂了呢?为了确保没有做过头,研究人员选择性地删除了一些连接,这时机器又不像人了——骗到人的视错觉,在连接少的情况下骗不到机器。
简单来说,就是视错觉在正常的机器下无法把机器欺骗,而复杂的模拟机器上却可以被欺骗。

三、视错觉验证码与普通验证码对比试验

  1. 机器识别
    普通随机生成验证码:
    测试数量:1000
    识别成功数量:762
    总通过数据数(%):238(23.8%)
    视错觉随机生成生成验证码:
    测试数量:1000
    识别成功数量:103
    总通过数据(%):897(89.7%)
    2.人工识别
    普通随机生成验证码:
    测试数量:15
    识别成功数量:12
    总通过数据数(%):12(80%)
    视错觉随机生成验证码:
    测试数量:15
    识别成功数量:12
    总通过数据数(%):12(80%)

3.数据对比
先从机器数据对比,我们的视错觉验证码明显是更胜一筹,而人工数据因为我个人的原因,没有大量的数据检测,但是可以证明了视错觉验证码可以与普通验证码一样被人识别。
并且安全性更高,可以起到反机器识别的作用。

———————————————————————
1摘自群发软件验证码识别,知码网助推企业网络营销 .知码网
2摘自网络验证码的分析与研究 .百度文库
3摘自新机器视觉:http://www.vision263.com/a/shezhi/20171212/972.html,有改动
4摘自CSDN博客:https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/80016353
5摘自悦智网:https://kuaibao.qq.com/s/20190215B15S7M00?refer=cp_1026
6本文为CSDN博主「沉默的鹏先生」的原创文章,
原文链接:https://blog.csdn.net/ever_peng/article/details/90547299
7摘自视觉实验室:https://www.shicuojue.com/article-257-1.html
8摘自网易数帆:《我想学着被你骗:人工智能终于有了视错觉》

基于计算机视觉盲点的视错觉验证码算法相关推荐

  1. 计算机视觉摔倒检测,基于计算机视觉的室内跌倒检测

    摘要: 在全球老龄化趋势日益严重,而由于现代人生活方式的改变使得空巢家庭日益增多的社会背景下,老年人的健康问题成为社会关注的热点,跌倒是导致老年人受伤的主要原因,不仅在身体上,也在心理上给老年人的日常 ...

  2. 【裂缝检测识别】基于计算机视觉实现路面裂缝检测识别系统设计含Matlab源码

    1 简介 作为国民经济发展的命脉,公路交通对于运输业.制造业.旅游业以及农业等国家支柱产业的发展都有着举足轻重的作用.近年来,随着我国公路使用寿命的延长和交通负荷的增加,路面破损检测和养护已成为公路交 ...

  3. 计算机识别技术检测交通标志,基于计算机视觉的交通标志检测与识别算法研究...

    摘要: 据有关数据统计,2017年全国道路交通事故中死亡率达到18.2%,因此交通安全问题已经成为我们日常生活中最常见的问题.而解决交通事故问题的有效途径之一就是准确有效的识别道路交通标志,目前,人工 ...

  4. 病虫害模型算法_基于深度学习的目标检测算法综述

    sigai 基于深度学习的目标检测算法综述 导言 目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一.由于各类物体有不同的外观,形状,姿态,加上成像 ...

  5. 基于卷积神经网络的垃圾图像分类算法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 垃圾分类作为资源回收利用的重要环节之一, 可以有效地提高资源回收利 ...

  6. 基于计算机视觉的构件表面缺陷特征提取

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 表面缺陷检测以及特征提取,所涉及的范围是非常广 ...

  7. 综述 | 基于深度学习的目标检测算法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:计算机视觉life 导读:目标检测(Object Det ...

  8. 基于改进的RPCA人脸识别算法

    from:http://www.chinaaet.com/article/3000011311 基于改进的RPCA人脸识别算法 作者:首照宇,杨晓帆,莫建文 2015/11/15 18:04:00 摘 ...

  9. 科技人员在计算机前的肖像,基于计算机视觉的人脸肖像画生成研究

    摘要: 通过计算机处理进行人脸肖像画生成是计算机视觉的研究方向之一,该技术在科普展览领域有了广泛使用,并且其中使用的计算机视觉相关的研究技术在工业生产和日常生活中也都有广泛应用.本文介绍了一种基于计算 ...

最新文章

  1. Git 常用操作(1)- 配置、查看、添加、暂存和提交
  2. Linux I2C App 开发示例
  3. 阿里巴巴在宁成立江苏总部
  4. git log 提交日志及图形化显示
  5. c++ mysql 导入sql_mysql导入sql文件命令和mysql远程登陆使用详解
  6. 【pytest】命令行选项
  7. using的基本用法
  8. Oracle 11gR2 sessions=1.5*processes+22
  9. Cisco IOS Rootkit工具该怎么写
  10. 贪心算法详解(C++)
  11. fluent 对电机油冷分析_如何避免发电机过热引起的能源损耗?
  12. python操作oracle数据库知识梳理
  13. 项目管理中用什么工具可以增强团队协作?
  14. 伤疤好了有黑印怎么办_疤痕留下黑印怎么办
  15. python和excel数据分析有什么区别_用Excel、SQL、Python做数据分析有何不同?
  16. EXCEL VBA常用语句100句
  17. php使用vs,使用vs code写php及调试
  18. 编译安装baas平台-cello-h3c
  19. CREO工程图学习笔记
  20. dp主机_一文了解DP接口和HDMI接口

热门文章

  1. linux小红帽实验心得,小红帽读书心得(精选4篇)
  2. python字典找出年龄最大的人_python找出字典中value最大值的几种方法
  3. Python之集合相关操作
  4. Themida是否支持PowerBuilder应用程序的保护?—— Themida常见问答集锦
  5. SpringBoot+Vue项目校园在线拍卖系统
  6. 圆锥形SiC纳米磨削单晶硅源代码
  7. 对比欧氏距离与余弦相似度
  8. 基于java的药店药品进销存管理系统
  9. 某校2019专硕编程题-队列
  10. 英文不好看GitHub很费劲怎么办?使用Google浏览器,自带翻译功能