前端识别验证码思路分析

作者:莫卓颖

相信很多前端同学对于二维码识别、图像对比等这类高大上的图像识别技术望而生畏,觉得此类识别技术只能通过更加底仓的高级语言才能实现(诸如c等),本文试图从前端的角度出发介绍如何通过canvas来进行简单的图像识别。

canvas是什么

    canvas是HTML5中的新元素,你可以使用javascript用它来绘制图形、图标、以及其它任何视觉性图像

canvas图片处理运用

对于canvas来说,主要是两个方法对图片处理比较重要,一个是通过html5 canvas的 getImageData 方法获取图片的像素信息,可以很方便的通过方法导入到把网络图片或者本地的图片导入至canvas中并获取图片的像素信息,可以修改像素信息后通过另外一个重要的方法putImageData导出处理后的图片。

1、获取canvas调用
    var c = document.createElement(‘canvas‘);
    context = c.getContext(‘2d‘);
2、获取导入图像信息
var hiddenImage = new Image();
    hiddenImage.src=图片地址
     context .drawImage(hiddenImage, 0, 0, width, height);
       hiddenImage .onload=function(){
        context.putImageData(hiddenImage, 0, 0);
    }
3、获取图片的像素信息
 var imageData = context.getImageData(0, 0, w, h);
//注意这个获取的是数组,注意每1个像素由数组的4个元素组成,四个元素分别代码四个通道r/g/b/a的值
for(var j=0;j<hiddenImage.height;j+=1){
    for(var i=0;i<hiddenImage.width;i+=1){
 //注意这里获取图片信息后可以进行定制化处理
            offset=4*(hiddenImage.width*j+i);
            var red = sourceImageData[offset];
            var green = sourceImageData[offset + 1];
            var blue = sourceImageData[offset + 2];
            var brightness = getBrightness(red,green,blue);

    }
  }
  function getBrightness(r,g,b){
        return 0.3*r + 0.59*g + 0.11*b;
    }
4、导出处理过的图片
context.putImageData(第三步处理过得像素信息,0,0);

二维码识别思路

1、设计一个自动等分切割图片的canvas
程序(利用canvas导出原图的二进制数组,然后等分数组后出单个图片的序列库)

2、简单做个爬虫程序,利用步骤1完成的程序到需要识别的网站下载该网站的二维码序列图库

3、手工翻译二维码序列图库对应的真实含义,并建立图片到真实含义的map表。

4、设计自动图片识别程序,导入需要识别的原二维码后,按照1的步骤进行等分,分别拿等分后的图片依次对比步骤2获取的图库,对比出对比度最接近的图片,然后通过步骤三翻译出来的map
表获取对应图片的真实含义

好了,授人以鱼不如授人以渔,通过前端进行做坏事的方法告诉你了,如何发扬光大就看你的灵活运用。

后记

相信在很多人眼中, 前端仅仅是一门简单的处理网页交互、样式门面学科。随着h5、node等前端新技术的流行,前端不再是功能有限的学科,而是功能强大到只有你想不到木有做不到地步。


相关阅读:

腾讯存储与CDN免费体验
人人都可以做深度学习应用:入门篇(上)
一起用HTML5 canvas做一个简单又骚气的粒子引擎

新增线下、APP、公众号多处入口,小程序会再火起来么?



此文已由作者授权腾讯云技术社区发布,转载请注明文章出处,获取更多云计算技术干货,可请前往腾讯云技术社区
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~



前端识别验证码思路分析

时间: 2024-08-05 17:37:24

前端识别验证码思路分析的相关文章

移动端车牌识别(前端识别、后端识别)的区别分析

关键词:移动端车牌识别.ocr车牌识别技术.车牌识别技术.车牌识别sdk.移动端车牌识别sdk.手机端车牌识别.安卓车牌识别.安卓端车牌识别技术.移动端车牌识别sdk(前端识别) 移动端前端车牌识别OCR技术是为促进人工智能化建设研发而来的SDK应用.此应用基于Android.ios平台,手机.PDA.安卓系统带200万像素以上的摄像头均适用,该移动端前端车牌识别技术sdk.Android平台提供Jar包,IOS平台提供.a静态库,从拍照识别车牌为基础,一步步研发出并且是首创出视频流OCR识别,

12306 验证码代码分析

验证码是一个很有趣的问题,其目的是谁是一个人或机器输入来区分,这个问题的实质是一个图灵测试(推荐电影<模仿游戏>),验证码是一种简单而有效的验证方法,由CMU在教授2000在有关创建.后来这头牛谁又将收集零星验证码,转化成巨大的生产力.上千万篇纸质文章数字化,眼下,Google还用其识别门牌号.路牌等(一个神人创造了验证码.又让验证码做出了巨大贡献).更有甚者.想将验证码作为广告宣传栏(考虑到题库的建立成本和题量的有限性.我认为不可行).12306昨天改用了图形验证码,而其实,图形验证码已经不

python网络爬虫之如何识别验证码

有些网站的登录方式是验证码登录的方式,比如今天我们要测试的网站专利检索及分析. http://www.pss-system.gov.cn/sipopublicsearch/portal/uilogin-forwardLogin.shtml 登录此类网站的关键是识别其中的验证码.那么如何识别验证码呢.我们首先来看下网页源代码.在网页中,验证码的是通过下载一个图片得到的.图片的下载地址是src=/sipopublicsearch/portal/login-showPic.shtml 我们从实际的fi

C#识别验证码技术-Tesseract

相信大家在开发一些程序会有识别图片上文字(即所谓的OCR)的需求,比如识别车牌.识别图片格式的商品价格.识别图片格式的邮箱地址等等,当然需求最多的还是识别验证码.如果要完成这些OCR的工作,需要你掌握图像处理.图像识别的知识,需要用到图形形态学.傅里叶变换.矩阵变换.贝叶斯决策等很多复杂的理论,这让绝大部分人都会望而却步. Tesseract这个开源项目的出现让我们普通人也可以涉足OCR的开发.Tesseract可以从图片中识别出文字内容,但不要以为Tesseract可以智能的识别出各种奇形怪状

在VS2010下编译和使用tesseract_ocr识别验证码

对于自动识别验证码,使用trsseract是个不错的选择,有兴趣的的朋友可以试试. 编译tesseract 官网提供了vs2008的编译说明和工程,但在vs2010下的编译时基本相同的,因此我使用的方法就是把vs2008工程转换为vs2010工程, 同时把编译过程中遇到的问题以及解决方法和大家分享一下,希望对正准备使用trsseract库的朋友有所帮助. 下载代码 google code下载一下源代码,并建立build目录. tesseract-ocr-3.02.02.tar.gz   tess

反人脸识别的思路和实现

反人脸识别的思路和实现 一.基本知识和背景      ?人脸识别是非常经典的机器识别运用,目前已经在许多地方得到了使用.相关的算法原理和实现发展的都很发达,Opencv中就有不错的实现.这是现状. 但是,也正因为此,和人相关的隐私变得令人关注.应用sigvc上面的一个概念叫做“反人脸识别”http://www.sigvc.org/bbs/forum.php?mod=viewthread&tid=3348&highlight=%B7%B4%C8%CB%C1%B3,就是关注用户隐私的一种技术实

qtp识别验证码

花了两天时间才完整的完成识别验证码的登录操作,在网上看到很多关于验证码识别的方法,但是我用的qtp版本比较高级,所以还是要自己花心思研究.po上我的识别验证码的详细历程: 一.读取浏览器中的图片验证码 1.打开浏览器登录界面 2.启动qtp,不勾选web 3.录制验证码.开始录制:在录制的小条上选择insert ->text area output value. 截图验证码图片的框. 然后选择modify,output types设置为environment,name 可以改写为“getchar

ajaxFileupload的源码思路分析

? 1 ajaxfileupload源码: jQuery.extend({ //创建一个临时的iframe; createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' + id; var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="posit

使用tensorflow深度学习识别验证码

除了传统的PIL包处理图片,然后用pytessert+OCR识别意外,还可以使用tessorflow训练来识别验证码. 此篇代码大部分是转载的,只改了很少地方. 代码是运行在linux环境,tessorflow没有支持windows的python 2.7. gen_captcha.py代码. #coding=utf-8 from captcha.image import ImageCaptcha # pip install captcha import numpy as np import ma