MATLAB简易验证码识别程序介绍

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

第一步: 二值化

所谓二值化就是把不需要的信息通通去除,比如背景,干扰线,干扰像素等等,只剩下需要识别的文字,让图片变成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

来源: https://cloud.tencent.com/developer/article/1030270

来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/jins-note/p/9548065.html

时间: 2024-11-09 10:08:27

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

Matlab神经网络验证码识别

本文,将会简述如何利用Matlab的强大功能,调用神经网络处理验证码的识别问题. 预备知识,Matlab基础编程,神经网络基础. 可以先看下: Matlab基础视频教程 Matlab经典教程--从入门到精通 神经网络入门 验证码识别原理 Matlab对图像读入处理,去掉噪声点和较浅的点,进行二值化,将图像转变为0/1矩阵,这样就完成了预处理. 然后要对图像进行切割,取到每个数字的小图片位置,将其缩放至等大小,方便神经网络进一步处理. 最后将图片转成神经网络能够识别的格式,例如BP网络,则将其转为

验证码识别程序

别人让做一个简单的投票软件(刷投票的) 简单了解了一下,需要攻破一下问题 1.IP 限定的问题 2. 验证码识别的问题 IP限定的问题可以使用代理进行解决 找到一个动态代理的地址: http://www.xici.net.co/ 使用CSQUERY  一个类似jquery 的C#html 解析库 代码如下: string ur = "http://www.xici.net.co/"; CsQuery.CQ cs = CsQuery.CQ.CreateFromUrl(ur); CQ da

【原创】用C#.NET开发通用的验证码识别组件

相信大家在开发过程中,基本都用到过验证码识别程序.一提到验证码识别,绝大多数兄弟想到的都是用C++的效率配上牛逼哄哄的二值化.边缘检测等算法来实现.但这种识别方式的依赖性太强,不可重用,无法扩展,假设对方稍微修改下验证码的变形算法(做过网站的都知道有多简单),可能你累死累活搞出来的识别程序就全部作废了. 这里讲个我们公司的例子,为了识别支付宝登录的验证码,公司花大价钱请了一位牛人B用C++写了个支付宝验证码识别的DLL并做了导出,供我们在.NET平台下直接调用.当我们项目开发快结束的时候,这货竟

关于验证码识别2

最近写了几个网站的验证码图片自动识别程序,尽管每个网站的验证码图片都不相同,识别的方法有所差别.但写得多了,也总结出不少相同之处.今天抽空封装出一个基础类来,发现可以很好地重复利用,编写不同的验证码识别程序,效率提高了不少.好东东不能独享,现放出来供大家共同研究,请网友们妥善用之.        封装后的类使用很简单,针对不同的验证码,相应继承修改某些方法,即可简单几句代码就可以实现图片识别了:            GrayByPixels(); //灰度处理            GetPi

tensorflow实现验证码识别案例

1.知识点 """ 验证码分析: 对图片进行分析: 1.分割识别 2.整体识别 输出:[3,5,7] -->softmax转为概率[0.04,0.16,0.8] ---> 交叉熵计算损失值 (目标值和预测值的对数) tf.argmax(预测值,2)验证码样例:[NAZP] [XCVB] [WEFW] ,都是字母的 """ 2.将数据写入TFRecords import tensorflow as tf import os os.env

Python快速开发分布式搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别

第一步.首先下载,大神者也的倒立文字验证码识别程序 下载地址:https://github.com/muchrooms/... 注意:此程序依赖以下模块包 Keras==2.0.1 Pillow==3.4.2 jupyter==1.0.0 matplotlib==1.5.3 numpy==1.12.1 scikit-learn==0.18.1 tensorflow==1.0.1 h5py==2.6.0 numpy-1.13.1+mkl 我们用豆瓣园来加速安以上依赖装如: pip install

深度学习_1_神经网络_3_验证码识别

验证码识别 1,分割 2,整体识别 一张图片n个字母 即不再是一个目标值,是n个 ? 例:NZPP ? N ------>[0.01,0.02,0.03.......] 概率 N------->[0,0,0,0,1.......] one-hot编码 ? Z-------->[0.01,0.02,0.03.......] Z------->[0,1,0,0,0......] ? 最后得出n*26个概率 ? 交叉熵计算 ? 目标值:[0,0,0,1......] [0,0,0,1..

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

利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别 分类: 开放项目2012-07-23 17:28 6712人阅读 评论(0) 收藏 举报 tiffimagecompression引擎pascalcharacter --------------------------------------------------低调的分割线--------------------------------------------------- Linux下有两个重要的编程准则

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

一.安装 1. sudo apt-get install libsdl1.2-dev libsdl1.2debian sudo apt-get install libsdl1.2-dev(比较大,10M左右) sudo apt-get install libsdl-image1.2-dev sudo apt-get install libsdl-mixer1.2-dev sudo apt-get install libsdl-ttf2.0-dev sudo apt-get install lib