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
MATLAB简易验证码识别程序介绍的更多相关文章
- Matlab神经网络验证码识别
本文,将会简述如何利用Matlab的强大功能,调用神经网络处理验证码的识别问题. 预备知识,Matlab基础编程,神经网络基础. 可以先看下: Matlab基础视频教程 Matlab经典教程--从 ...
- 第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别
第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别 第一步.首先下载,大神者也的倒立文字验证码识别程序 下载地址:https://gith ...
- 二十二 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别
第一步.首先下载,大神者也的倒立文字验证码识别程序 下载地址:https://github.com/muchrooms/zheye 注意:此程序依赖以下模块包 Keras==2.0.1 Pillow= ...
- tensorflow实现验证码识别案例
1.知识点 """ 验证码分析: 对图片进行分析: 1.分割识别 2.整体识别 输出:[3,5,7] -->softmax转为概率[0.04,0.16,0.8] - ...
- 利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别
--------------------------------------------------低调的分割线-------------------------------------------- ...
- 简单验证码识别(matlab)
简单验证码识别(matlab) 验证码识别, matlab 昨天晚上一个朋友给我发了一些验证码的图片,希望能有一个自动识别的程序. 1474529971027.jpg 我看了看这些样本,发现都是很规则 ...
- ubuntu 安装(install) pwntcha[一个做"验证码识别"的开源程序]
一.安装 1. sudo apt-get install libsdl1.2-dev libsdl1.2debian sudo apt-get install libsdl1.2-dev(比较大,10 ...
- 写给程序员的机器学习入门 (八) - 卷积神经网络 (CNN) - 图片分类和验证码识别
这一篇将会介绍卷积神经网络 (CNN),CNN 模型非常适合用来进行图片相关的学习,例如图片分类和验证码识别,也可以配合其他模型实现 OCR. 使用 Python 处理图片 在具体介绍 CNN 之前, ...
- 字符型图片验证码识别完整过程及Python实现
字符型图片验证码识别完整过程及Python实现 1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...
随机推荐
- python科学计算与可视化
一.Numpy 库 NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 引用: import ...
- Java简易撞鬼游戏demo
9*9方格内两点随机行走,相遇则停止. public class 撞鬼 { public static int length = 9; public static char[][] matrix = ...
- Python3 print()函数sep,end,file参数用法练习
来自builtins.py:def print(self, *args, sep=' ', end='\n', file=None): # known special case of print &q ...
- 异常捕获设置HTTPStatus
第一步:创建一个异常类 package com.payease.exception; /** * @Created By liuxiaoming * @CreateTime 2017/12/12 下午 ...
- VMware Workstation中虚拟机的克隆
1 克隆虚拟机 首先需要准备好一个安装好的系统,这里以linux为例进行演示. 在需要克隆的机器上右键选择管理==>克隆 选择需要克隆的虚拟机的状态,如果你想要的就是当前的状态,就直接选择虚拟机 ...
- python-wsgi测试服务器
#!/usr/bin/python from wsgiref.simple_server import make_server def application(environ,start_respon ...
- python-poll实现异步IO
#!usr/bin/python from socket import * from select import * from time import ctime s=socket() s.bind( ...
- Java jstl标签使用总结
1.在jsp文件中引用 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&g ...
- html中设置textbox的宽和高
1.宽:width是不行的,而应该用size size=30,表示能输入30个字符 2.高: style="height:50px"
- url解码
最近在做流量分析的项目.需要将url解码.写了个代码,先存一下,有时间再仔细写写. #include <stdio.h> #include <stdlib.h> #includ ...