本推文主要识别的验证码是这种:

第一步: 二值化

所谓二值化就是把不需要的信息通通去除,比如背景,干扰线,干扰像素等等,只剩下需要识别的文字,让图片变成2进制点阵。

第二步: 文字分割

为了能识别出字符,需要对要识别的文字图图片进行分割,把每个字符作为单独的一个图片看待。

第三步: 标准化

对于部分特殊的验证码,需要对分割后的图片进行标准化处理,也就是说尽量把每个相同的字符都变成一样的格式,减少随机的程度。最简单的比如旋转还原,复杂点的比如扭曲还原等等。比如本文中分割后的数字1和8宽度不一致,把他们的宽度填充一致,就是标准化的一种。

可以看到上面切割后的字符1最右边一列像素都为0。

第四步: 学习 & 识别

这一步可以用很多种方法,最简单的就是模板对比,对每个出现过的字符进行处理后把点阵变成字符串,标明是什么字符后,通过字符串对比来判断相似度。

在文章的后半部分会详细解释我采用的算法。

训练集学习tran.m

width = 132; height = 20;

%共10张验证码 x 11个数字 共分割出 110张字符图片
%每个字符图片 高度20 x 宽度9 共 180个像素
data = zeros(110, 180); chars = zeros(180, 10); %用于存储10个数字字符的特征值 每个字符大小为20x9 for name = 0:9
im = imread(sprintf('%d.jpg', name)); %读取图片
im = im2bw(im) == 0; %第一步:二值化 黑色1 白色0 %第二步: 分割
black = sum(im) ~= 0; %20x132矩阵 从上向下求和为 1x132 不等于0 则横坐标对应的一列有字符像素
white = sum(im) == 0; %20x132矩阵 从上向下求和为 1x132 等于0 则横坐标对应的一列没有字符像素 lower = find(min([black 0],[1 white])); %获取11个字符的开始下标
upper = find(min([0 black],[white 1])) - 1; %获取11个字符的结束下标 for i=1:11
ch = im(:,lower(i):upper(i)); %截取单个字符
ch(20, 9) = 0; %第三步: 字符二值化矩阵大小标准化为20x9
data(name*11 + i ,:) = ch(:); %字符图片数据存入data
end
end %第四步: 学习 & 识别
class = clusterdata(data, 10); %将110个字符图片分为10类 %各个分类号对应的实际数字(人工识别后写进去的- -)
num = [5 3 6 8 9 0 7 2 1 4]; for i = 1:10
%各类中的字符图片取均值
im = mean(data(class == i, :)) > 0.5;
chars(:, num(i) + 1) = im; %存储
end

验证码识别ocr.m

function ret = ocr(filename)
load;
ret = zeros(1, 11);
im = imread(filename);
im = im2bw(im) == 0; %第一步: 二值化 %第二步: 分割
black = sum(im) ~= 0;
white = sum(im) == 0; lower = find(min([black 0],[1 white]));
upper = find(min([0 black],[white 1])) - 1; for i=1:11
ch = im(:,lower(i):upper(i));
ch = ch(:);
ch(180) = 0; %第三步标准化 %第四步: 识别
[~, num] = max(sum(min(repmat(ch, 1, 10), chars)));
ret(i) = num-1;
end
end

MATLAB简易验证码识别程序介绍的更多相关文章

  1. Matlab神经网络验证码识别

    本文,将会简述如何利用Matlab的强大功能,调用神经网络处理验证码的识别问题.  预备知识,Matlab基础编程,神经网络基础.  可以先看下: Matlab基础视频教程 Matlab经典教程--从 ...

  2. 第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别

    第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别 第一步.首先下载,大神者也的倒立文字验证码识别程序 下载地址:https://gith ...

  3. 二十二 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别

    第一步.首先下载,大神者也的倒立文字验证码识别程序 下载地址:https://github.com/muchrooms/zheye 注意:此程序依赖以下模块包 Keras==2.0.1 Pillow= ...

  4. tensorflow实现验证码识别案例

    1.知识点 """ 验证码分析: 对图片进行分析: 1.分割识别 2.整体识别 输出:[3,5,7] -->softmax转为概率[0.04,0.16,0.8] - ...

  5. 利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别

    --------------------------------------------------低调的分割线-------------------------------------------- ...

  6. 简单验证码识别(matlab)

    简单验证码识别(matlab) 验证码识别, matlab 昨天晚上一个朋友给我发了一些验证码的图片,希望能有一个自动识别的程序. 1474529971027.jpg 我看了看这些样本,发现都是很规则 ...

  7. ubuntu 安装(install) pwntcha[一个做"验证码识别"的开源程序]

    一.安装 1. sudo apt-get install libsdl1.2-dev libsdl1.2debian sudo apt-get install libsdl1.2-dev(比较大,10 ...

  8. 写给程序员的机器学习入门 (八) - 卷积神经网络 (CNN) - 图片分类和验证码识别

    这一篇将会介绍卷积神经网络 (CNN),CNN 模型非常适合用来进行图片相关的学习,例如图片分类和验证码识别,也可以配合其他模型实现 OCR. 使用 Python 处理图片 在具体介绍 CNN 之前, ...

  9. 字符型图片验证码识别完整过程及Python实现

    字符型图片验证码识别完整过程及Python实现 1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...

随机推荐

  1. HBase 使用外部的 zookeeper

    HBase 启动时,默认会根据hbase-site.xml文件中的如下设置端口上启动一个zookeeper服务: <property> <name>hbase.zookeepe ...

  2. 【ORACLE】ID 2299494.1 安装Oracle 11g 86%报错:Error in invoking target 'agent nmhs' of makefile

    参考: ID 2299494.1 In this Document   Symptoms   Changes   Cause   Solution   References APPLIES TO: O ...

  3. 使用redux-devtools工具

    在vue中型项目开发的过程中,一般都是要用到vuex这个状态管理工具的,这样可以方便我们管理全局的状态,同时,为了在开发的过程中,更加方便地实时查看到state状态,我们会使用 vue-devtool ...

  4. 自定义 checkbox 样式

    前言:最近在做一个网站,为了统一风格,需要自定义checkbox的样式.所以花了点时间参考了 研究了一下.感觉上面的方法略微麻烦.所以自己重新写了下面的代码,欢迎大家指教.同时,感谢w3cplus提供 ...

  5. redis linux安装过程回顾

    1,官网wget http://download.redis.io/releases/redis-3.2.9.tar.gz 2,解压 tar zxf redis-3.2.9.tar.gz 后进入解压后 ...

  6. 浅谈js中的垃圾两种回收机制

    一.标记清除 标记清除的主要思想是先建立各个对象的关联,然后从根节点出发,使用广度优先搜索依次标记所有对象,那些不能被标记的对象就应该作为垃圾回收. 这种方式的主要缺点就是如果某些对象被清理后,内存是 ...

  7. springMVC与Struts2区别

    1.拦截级别 Struts2是类级别的拦截,一个类对应一个request上下文 SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应 所以说从架构本身 ...

  8. JavaScript数据结构-15.二叉树

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. Windows下的SASS环境搭建

    虽然眼下 CSS 预编译框架不少,但 SASS 已经逐渐成为主流了,为了更好的适应社会,满足市场需求,获取新技能是必须的. 之前一直想使用 SASS,但都碍于它需要在 ruby 环境下编译而退缩了,这 ...

  10. mysql 索引数据结构及原理

    原文:http://www.uml.org.cn/sjjm/201107145.asp 1 索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子 ...