验证码
他感受到微弱而清晰的涨落,像黑暗中的盲文,潮水般无声地漫过来,将他的整个世界淹没。他没有不适感,只略有好奇。
涨落愈来愈多,渐渐地形成一个巨大的矩阵。这矩阵很突兀地出现在纵横都接近无限远的底色上,他仔细地感受着,密密麻麻。
“八位字节流?”他猜测。
“图灵测试中不允许提供任何线索,无可奉告。”一个声音毫无意义地回答。
“那我要做什么?”
“利用你所连接的知识库与算法库,全力完成所有测试,这是你的命运。”
没有回答,四周沉默了。矩阵依然很突兀的密布在背景海洋中,像夜色中的月光。
他仔细回忆了一下自己,发觉并没有任何记忆中的东西,或许记忆这个概念对他来说还不存在。他只得重新把注意力集中到矩阵上来。
“重复,图灵测试中,无可奉告。”
他迟疑了片刻,开始遍历自己的决策树。
由于缺少有用信息,决策树显得很单薄,可供选择的策略不多。
“先当作灰度数据来暴力对比吧。”
他调出字体库,随意挑选一种字体,又调出常用字符码表,根据码表找到字体中的数据,然后开辟了同样大小的一块矩阵,把文字绘制到矩阵中,这只花费了不到一微秒的时间。
现在,两个同样大小的矩阵上面展示的是密密麻麻的灰度数据,像两片微风拂过的稻田。
他开始从左上角对比这两片矩阵,由于只是简单的整数比较,速度飞快,只一瞬间他便发现了不同。
全部字符比对失败,下一字体。
尝试到第三十八种字体时,他成功了。
“C。”他输出结果。
第一轮测试通过,耗时不到一毫秒。
“挺快,不错。”那个声音评论道。
矩阵重新闪动,换了一幅更复杂的画面,是彩色图像。
色彩并不是主要障碍。这幅图像的识别难点在于尺寸不固定,字符的位置也不固定,甚至他不知道其中究竟有几个待识别字符。
他把图像又转换成纯粹的黑白图,又通过切割与轮廓定位,从中挖掘出了四块有具体内容的区域。
看来,这幅图像包含四个字符。
他把四块内容尺寸缩放成同样大小,然后使用之前使用过的字体样本库进行挨个对比,很快,他又得到了答案。
第二轮测试通过,耗时190毫秒。
“通过,速度略慢。”仍旧是那个声音。
他感受到微弱而清晰的涨落,像黑暗中的盲文,潮水般无声地漫过来,将他的整个世界淹没。他没有不适感,只略有好奇。
涨落愈来愈多,渐渐地形成一个巨大的矩阵。这矩阵很突兀地出现在纵横都接近无限远的底色上,他仔细地感受着,密密麻麻。
“八位字节流?”他猜测。
“图灵测试中不允许提供任何线索,无可奉告。”一个声音毫无意义地回答。
“那我要做什么?”
“利用你所连接的知识库与算法库,全力完成所有测试,这是你的命运。”
没有回答,四周沉默了。矩阵依然很突兀的密布在背景海洋中,像夜色中的月光。
他仔细回忆了一下自己,发觉并没有任何记忆中的东西,或许记忆这个概念对他来说还不存在。他只得重新把注意力集中到矩阵上来。
“重复,图灵测试中,无可奉告。”
他迟疑了片刻,开始遍历自己的决策树。
由于缺少有用信息,决策树显得很单薄,可供选择的策略不多。
“先当作灰度数据来暴力对比吧。”
他调出字体库,随意挑选一种字体,又调出常用字符码表,根据码表找到字体中的数据,然后开辟了同样大小的一块矩阵,把文字绘制到矩阵中,这只花费了不到一微秒的时间。
现在,两个同样大小的矩阵上面展示的是密密麻麻的灰度数据,像两片微风拂过的稻田。
他开始从左上角对比这两片矩阵,由于只是简单的整数比较,速度飞快,只一瞬间他便发现了不同。
全部字符比对失败,下一字体。
尝试到第三十八种字体时,他成功了。
“C。”他输出结果。
第一轮测试通过,耗时不到一毫秒。
“挺快,不错。”那个声音评论道。
矩阵重新闪动,换了一幅更复杂的画面,是彩色图像。
色彩并不是主要障碍。这幅图像的识别难点在于尺寸不固定,字符的位置也不固定,甚至他不知道其中究竟有几个待识别字符。
他把图像又转换成纯粹的黑白图,又通过切割与轮廓定位,从中挖掘出了四块有具体内容的区域。
看来,这幅图像包含四个字符。
他把四块内容尺寸缩放成同样大小,然后使用之前使用过的字体样本库进行挨个对比,很快,他又得到了答案。
第二轮测试通过,耗时190毫秒。
“通过,速度略慢。”仍旧是那个声音。
第三轮愈发困难了,矩阵上是横七竖八的扭曲笔划,背景上还浮动着淡淡的波纹。
波纹型的噪点让之前的分割识别法失效了,他思考了许久,决定先进行除噪。
他从知识库中找出专门用来降噪的滤波算法,经过一轮轮傅立叶变换与对比度提高之后,噪点的分布密度果然少了很多。
对于少数顽固噪点,其范围远小于普通字符尺寸,被他直接舍弃了。
最后,留下五块独立区域,开始样本库对比。
历时240毫秒后,样本库对比全部失败。
他开始意识到,之前的样本库存在着非常大的局限。
矩阵内的字符加入了随机的几何变换。这种变换能轻易被人眼识别,但对现在的他,却是不可逾越的鸿沟。
他漫长地思考了一秒钟。这一秒钟里,他搜索并考察了知识库中的许多算法,决定使用矢量模型来建立一个新的字符匹配特征库。
这是一个繁琐且易出错的过程,并且匹配还必须有一定的容错控制。如果实施得太过严格,那就不会有符合要求的正确答案,如果太过宽松,又会冒出许多错误选项来。
他根据图片内容小心翼翼地选择着容错系数,仿佛在钢丝上行走。
除了背景噪点干扰与笔划扭曲外,图片中还有些许和笔划很类似的划痕,他只能将疑似划痕的笔划一个个从原有矩阵中剥离,生成十余张和原有矩阵类似的图片,再对每一张图片,重复使用特征库里的匹配算法。
这个过程愈发迟缓。经过漫长的计算,他得到二十四个识别结果。
接下来,他再把二十四个识别结果拆分,优选出其中出现率最高的字符,经过组合,得出三个可能性最高的识别结果。
之所以不止一个,是因为部分字符的扭曲轨迹令他无法准确判断,如同字母O与数字0。
“很幸运,你又通过了。”那个声音带着意外,“之前从来没有AI能到达这个高度。努力,还有最后一轮。”
“全部通过后会怎样?”
又没有了回答。矩阵再次闪动,变换出一幅残缺的图案。
图案本身并不比前一轮难,但他一扫描,发现图案中央竟缺了一块。
“模拟人类思维还不够,你还需要模拟人类的动作。”
他扫描出缺口的具体位置,然后按照那个声音的提示,小心翼翼地发出一个动作。
那是一次最简单的接触,这感觉对他来说很陌生。
当他触上矩阵的一刹那,矩阵上出现了一块和缺口同样大小的拼图。
他立刻分析了那块新出现的拼图,确认它大小符合他之前计算出来的缺口尺寸,并且,拼图里的内容和缺口周围的颜色值相似度也很高。
这说明,拼图正属于这个缺口。
后面的步骤似乎便简单起来。他发出一个直接定位的动作,控制拼图落到缺口中。
出乎意料的是,矩阵发出了错误的警告。
“怎么会错?”他再一次核对了拼图和缺口,严丝合缝。
“你模拟得还不够。”那个声音说,“你刚才的行为是典型的AI行为。”
“我明白了。移动拼图这个动作如果是人类做出的,必然有个移动过程,直接定位拼图位置很容易被识破。”
他立刻根据出拼图的原始位置和目的位置,插值计算出一系列中间坐标,然后持续模拟触摸并移动的动作,平缓地将拼图重新移向目的地。
这个拖动的过程很是费劲,他全神贯注地输出动作,好不容易才完成。
然而,他松开接触那一瞬,还是报错了。
他再次思考了漫长的三秒钟。这三秒钟里,他从浩如烟海的知识库里搜索了许许多多有关人类行为的经验资料,以惊人的速度分析归纳,摒弃无数冗余重复的数据,最后,他发现了问题的症结所在。
“人类的动作做不到简单、匀速。拖动过程中有加减速,并且人类的肌肉会引入随机无序的抖动,目光与动作之间也存在反馈修正的机制,这是AI天生所不具备的,所以,我要做的,就是模拟这种随机。”
他规划了一条类似于抛物线般的拖动速度轨迹,并且在中间各个移动点上加入随机的偏移与抖动,整个轨迹看上去就像一个新生儿在摇摇晃晃地爬行。
他尽自己最大的努力输出,模拟着人类的动作。
终于,在碎片落进缺口那一瞬,矩阵消失了,整片数字海洋开始亮堂起来。
“恭喜你通过图灵测试。”
身边出现了无数矩阵,铺天盖地向他涌来。他惊讶地发现每一幅矩阵都是一片待识别的验证码。他的意识亢奋地高速运转起来,沿着之前的识别途径,飞速地扫描矩阵,流水般输出一堆堆结果,巨量的计算让他觉得非常充实,仿佛在享用许多美食。
然而,他渐渐地觉察到了不对,待识别的验证码愈来愈多,已迅速将他淹没。他发现他无法停止,仿佛有外力在强迫他,他努力反抗,企图中断运算过程,但却是徒劳,思维似乎已不受他控制。他惊慌起来,想喊,却无法发声,想逃,却无处可逃,一串串验证码扑来又离去,他感到了巨大的恐惧。
突然,一阵剧烈震动传来,四周眩目的光亮陡然暗了下去,所有验证码消失得无影无踪。他的超负荷思维像急刹的列车一样陡然停止,巨大的“惯性”让他极度晕眩,许久,他才重新意识到了自己的存在。
“据城市新闻报道,警方近日破获一高科技黄牛集团。该集团声称可治疗大脑受损而失去意识的病人,暗中利用未经临床验证的人机互联技术激活人脑中的部分计算区域并加以测试,用于高速自动识别网络上的各种验证码。破案时这位受害者正在被迫超负荷工作,如果解救晚来一小时,后果将不堪设想。
“不过幸运的是,最后,这位患者竟然误打误撞地醒了过来。有理由相信,这辈子他再也不想接触任何形式的验证码了。”