【图像识别】基于OCR识别系统matlab源码

一、简介

什么是OCR技术?
OCR英文全称是Optical Character Recognition,中文叫做光学字符识别。它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。文字识别是计算机视觉研究领域的分支之一,而且这个课题已经是比较成熟了,并且在商业中已经有很多落地项目了。

OCR技术的分类:
一.按主题划分:手写体识别和印刷体识别。

1.印刷体大多都是规则的字体,技术上的难点是,在印刷过程中字体很可能变得断裂或者墨水粘连,使得OCR识别异常困难。当然这些都可以通过一些图像处理的技术帮他尽可能的还原,进而提高识别率。总的来说,单纯的印刷体识别在业界已经能做到很不错了,但说100%识别是肯定不可能的,但是说识别得不错那是没毛病。

2.手写体识别一直是OCR界一直想攻克的难关,但是时至今天,识别难度还是很大。为什么手写体识别这么难识别?因为人类手写的字往往带有个人特色,每个人写字的风格基本不一样,虽然人类可以读懂你写的文字,但是机器缺很难。印刷体一般都比较规则,字体都基本就那几十种,机器学习这几十种字体并不是一件难事,但是手写体,每个人都有一种字体的话,那机器该学习多少字体啊?这就是难度所在。

【图像识别】基于OCR识别系统matlab源码_第1张图片
二.按识别的内容来分类,对于我们国人来说主要分成三类:汉字、英文字母、阿拉伯数字。识别数字是最简单了,毕竟要识别的字符只有0~9,而英文字母识别要识别的字符有26个(如果算上大小写的话那就52个),而中文识别,要识别的字符高达数千个因为汉字的字形各不相同,结构非常复杂(比如带偏旁的汉字)如果要将这些字符都比较准确地识别出来,是一件相当具有挑战性的事情。但是,并不是所有应用都需要识别如此庞大的汉字集,比如车牌识别,我们的识别目标仅仅是数十个中国各省和直辖市的简称,难度就大大减少了。当然,在一些文档自动识别的应用是需要识别整个汉字集的,所以要保证识别的整体的识别还是很困难的。

OCR流程
【图像识别】基于OCR识别系统matlab源码_第2张图片
判断页面上的文本朝向,因为我们得到的这页文档往往都不是很完美的,很可能带有倾斜或者污渍,那么我们要做的第一件事就是进行图像预处理,做角度矫正和去噪。
对文档版面进行分析,进每一行进行行分割,把每一行的文字切割下来,最后再对每一行文本进行列分割,切割出每个字符,将该字符送入训练好的OCR识别模型进行字符识别,得到结果。
对其进行识别结果的矫正和优化,比如我们可以设计一个语法检测器,去检测字符的组合逻辑是否合理。比如,考虑单词Because,我们设计的识别模型把它识别为8ecause,那么我们就可以用语法检测器去纠正这种拼写错误,并用B代替8并完成识别矫正。这样子,

整个OCR流程就走完了。从大的模块总结而言,一套OCR流程可以分为:
版面分析 -> 预处理-> 行列切割 -> 字符识别 -> 后处理识别矫正
从上面的流程图可以看出,要做字符识别并不是单纯一个OCR模块就能实现的(如果单纯的OCR模块,识别率相当低),都要各个模块的组合来保证较高的识别率。

二、源代码

clc
clear all
close all
Symbols =['0' '1' '2' '3' '4' '5' '6' '7' '8' '9' '-'];
P3 = [];
Result = [];
path = 'C:\Users\lenovo\Desktop\23149049ocr\';          % working Path
ext = '_bold.bmp';                  %Train Data Files Extension name
P = zeros(16,12,11);

% Read 0-9 digits data
for i = 0: 9
    file = [path,char(48 + i) , ext];      % char(48) => '0'
   
    P(:,:,i + 1) = imread(file);
    P3 = [P3,P(:,:,i + 1)'];
end
  %  imshow(P(:,:,1));

  i = i + 1;
% read other symbols
    file = [path,'dash' , ext];
   
    P(:,:,i + 1) = imread(file);
    P3 = [P3,P(:,:,i + 1)'];
 
% figure
%  for i = 1:11
%       subplot( 11, 1, i );
%       imshow( P(:,:,i) );
%   end

P1 = reshape(P3, 12 * 16, 11);

T = zeros(11,11);
for i = 1:11
    T(i,i) = 1;
end

[R,Q] = size(P1);
[S2,Q] = size(T);

S1 =   25;

net = newff(minmax(P1),[S1 S1 S2],{'logsig' 'logsig','logsig'},'traingdx');

net.performFcn = 'sse';
net.trainParam.goal = 0.05;
net.trainParam.show = 100;
net.trainParam.epochs = 5000;
net.trainParam.mc = 0.95;

[net,tr] = train(net,P1,T);


sept2 = []; %character segment start-end pos
Test1 =[];
file = [path,'test_bold2.bmp'];
a = imread(file);
figure;
subplot(3,24,1:24);
imshow(a);

j =1;
  seg1 = a;
  b = sum(seg1) ; % character segment, if the vertical projection is zero, means the space between characters.
  b(find(b < 1) ) = 0;
  c = find(b == 0);
  d= find(b > 0);
  e = find(c > d(1));
  sept2 = [];
  for k = 1:size(e,2) -1    % delete repeated zero position
    if( c(e(k + 1)) - c(e(k)) > 1) 
        sept2 = [sept2, c(e( k ))];
        sept2 = [sept2, c(e(k + 1))];
    end    
  end
  

 %figure
  sept2 = [1, sept2];
 chCount = size(sept2);

 for k = 1: chCount(2) -1
     Test1 = [];
    tmp = zeros(16,1);
     z =   a(:,sept2(k)+1: sept2( k+1 ));
    t1 = size(z);
    if(t1(2)> 2) 
        tt1 = size(z);
%         if( tt1(2) < 11)
%             z = [z,tmp];
%         end
        tt1 = size(z);
%         if( tt1(2) < 11)
%            z = [tmp,z,tmp];
%         end
        z2 = imresize(z,[16,12],'bilinear');
%         z2 = ~z2;
%         z2 = ~z2;
%         z2 = double(z2);
%         z2 = imnoise(z2,'salt & pepper', 0.4);
        z2 = ~z2;
        z2 = ~z2;
        subplot(3,24,24+k);
        imshow(z2);
        z2 =z2';
        
        z3 = reshape(z2,16 * 12,1);
        Test1 = [Test1,z3];
        %figure;
        %imshow(z2);
        %title('TRUE');
 %   end

三、运行结果

【图像识别】基于OCR识别系统matlab源码_第3张图片

四、备注

完整代码或者代写添加QQ1575304183

往期回顾>>>>>>

【图像识别】国外车牌识别matlab源码

【图像识别】基于cnn卷积神经网络之验证码识别matlab源码

【图像识别】基于svm植物叶子疾病检测和分类matlab源码​​​​​​​

【图像识别】路面裂缝识别含GUI源码matlab源码​​​​​​​

【图像识别】基于RGB和BP神经网络的人民币识别系统含GUI界面matlab源码​​​​​​​

【图像识别】条形码识别系统matlab源码​​​​​​​

【图像识别】基于不变矩的数字验证码识别含GUI界面matlab源码​​​​​​​

【图像识别】基于模板匹配之手写数字识别系统GUI界面matlab源码​​​​​​​

【图像识别】基于贝叶斯分类器之目标识别matlab源码

【图像识别】身份证号码识别matlab源码

【图像识别】条形码识别系统matlab源码​​​​​​​

【模式识别】基于特征匹配的英文印刷字符识别matlab源码

【图像分类】基于极限学习分类器对遥感图像分类matlab源码​​​​​​​

【图像识别】基于BP神经网络之字母识别matlab源码

【图像特征处理】指纹图像细节特征提取matlab源码

【图像识别】基于反馈神经Hopfield的数字识别matlab源码

【图像识别】基于二值膨胀差分和椒盐滤波之教室内人数识别系统matlab源码

【图像识别】火灾检测matlab源码GUI

【模式识别】基于 Hough变换视频车道线检测matlab源码​​​​​​​

【模式识别】基于matlab Hough变换图片车道线检测

【模式识别】基于差影法之三维人体姿态行为识别matlab源码

【模式识别】指针式表盘识别matlab源码

【图像识别】表情检测matlab源码

【图像检测】基于LSD直线检测matlab源码

【图像识别】基于帧差法跌倒检测matlab源码

【图像识别】基于组合BCOSFIRE过滤器进行墙体裂缝识别matlab源码

【图像边缘检测】基于插值法亚像素边缘检测matlab源码

【模式识别】基于贝叶斯最小错误率手写数字识别matlab 源码

【模式识别】基于PCA手写数字识别matlab 源码

【模式识别】基于模板匹配的手写体数字识别matlab源码

【图像识别】基于模板匹配车牌识别matlab源码含GUI

【图像识别】基于模板匹配之人脸表情识别matlab源码含GUI

【图像识别】基于LBP+LPQ算法融合人脸表情识别matlab源码

【图像识别】基于HSV和RGB模型水果分类matlab源码含 GUI

【图像识别】基于模板匹配之数字识别matlab源码

【图像识别】基于BP神经网络的手写字体识别matlab源码含GUI界面

【图像识别】基于ksvd字典学习之人脸表情识别matlab源码

【图像识别】基于ORL数据库的PCA人脸识别系统matlab源码

【图像检测】基于 gabor滤波器布匹瑕疵检测matlab源码

你可能感兴趣的:(图像处理,matlab)