时间数字识别项目之大体完成

大框已经接近收尾。接下来剩下:

1)噪声添加

2)类标返回

3)汉字负样本添加

4)困难样本回收训练

5)......

这些细节,更加提高准确率。

  1 %{
  2 clear all;
  3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  4 % 可调参数
  5
  6 %test_path=‘C:\Users\cong\Desktop\研一实战\项目\图像中时间数字识别\OCR\one\22.jpg‘;%####
  7 %test_path=‘C:\Users\cong\Desktop\研一实战\项目\图像中时间数字识别\big.jpg‘;
  8 %target_digit=2;
  9 %local_step=3;%####
 10
 11 %滑窗检测,窗口尺度,步长
 12 % win_h=20;
 13 % win_w=20;
 14
 15 % step=1;
 16
 17 disp(‘参数配置成功...‘);
 18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 19 disp(‘正在读入图片及特征提取...‘);
 20 %读入图片及特征提取
 21 %data=[];
 22 %label=[];
 23 temp_r1=0;
 24 temp_c1=0;
 25 k_data=1;
 26 %k_label=1;
 27 for i_digit=0:1:10
 28 %     if(i_digit==target_digit)                                %%%%%%%%%%%%%%%%%%%%%%
 29 %         this_image_label=1;
 30 %     end
 31     %数字转字符
 32     str=num2str(i_digit);                                          %%数据是不是不平衡
 33     path_temp=strcat(‘C:\Users\cong\Desktop\研一实战\项目\图像中时间数字识别\trainingSample\‘,str,‘\‘);
 34     %path_temp=strcat(‘C:\Users\cong\Desktop\研一实战\项目\图像中时间数字识别\trainingSample\‘,str,‘\‘);
 35     %path_temp=strcat(‘C:\Users\cong\Desktop\研一实战\项目\图像中时间数字识别\trainingSample\num‘,str,‘\‘);
 36     file=dir(path_temp);
 37     for i=3:length(file)
 38         path= strcat(path_temp,file(i).name);
 39
 40         %%%%%%%%%%%%%%%%%%%%%%%%%%
 41         % 加载图片
 42         %%%%%%%%%%%%%%%%%%%%%%%%%%
 43         I=imread(path);
 44        % if(i_digit==10)
 45        % I=imresize(I,[80 70]);
 46         % end
 47         %I=imread(‘E:/WeChat.jpg‘);
 48         %%%%%%%%%%%%%%%%%%%%%%%%%%
 49         % 提取channel features
 50         %%%%%%%%%%%%%%%%%%%%%%%%%%
 51         %[all_channel_difference_features,temp_r1,temp_c1]=channel_feature_2_vector(I,1);
 52         %data=[data,all_channel_difference_features];
 53         %[d3_data,~,~]=channel_feature_2_vector(I,1);
 54         pChns=chnsCompute();
 55         chns = chnsCompute( I, pChns );
 56         %all_channel_difference_features=cat(3,chns.data{:});
 57         %data(:,:,:,k_data)=single(d3_data);
 58         data(:,:,:,k_data)=cat(3,chns.data{:});
 59         label_t(1,k_data)=i_digit;
 60         k_data=k_data+1;
 61         %d3_data=channel_feature_2_vector(I,1);
 62         %data=[data,d3_data];
 63         %label=[label;i_digit];%类标从0开始
 64         if(rem(i,500)==0)
 65             disp(‘...‘);
 66         end
 67     end % for i=3:length(file)
 68     disp(‘数字‘)
 69     i_digit
 70     disp(‘的特征提取完毕...‘);
 71 end  % for i_digit=0:9
 72 disp(‘读入图片及特征提取完毕...‘);
 73 %%%%%%%%%%%%%%%%%%%%%%%%%%
 74 % 扔进分类器中,训练
 75 %%%%%%%%%%%%%%%%%%%%%%%%%%
 76 %参数设置
 77 %data=data‘;
 78 param.nclass = 11; % number of classes
 79 param.ntree = 100; % number of tree
 80 param.depth = 16; % the maximum depth of tree
 81 param.sigma = 5; % random parameter
 82
 83 %%
 84 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 85 %训练
 86 disp(‘正在训练,请稍等...‘);
 87 handle = crndforest(); % call constructor
 88
 89 %data=single(data);
 90 label=int32(label_t);
 91 crndforest(handle, ‘train‘, data, label, param); %
 92 crndforest(handle, ‘save‘, ‘forest_model2‘); % optionally save into disk
 93 crndforest(handle, ‘delete‘); % release object
 94 disp(‘训练完毕...‘);
 95 %}
 96 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 97 %测试
 98 %{
 99 clear all;
100 data_num=1;
101 disp(‘正在测试...‘);
102 handle = crndforest();
103 crndforest(handle, ‘load‘, ‘forest_model2‘);
104 %载入图像
105 %输入data,提取特征
106 test_digit=2;%%%%%%%%%%%%%%%%%%%%%
107 all_test_result=[];
108 %all_test_backgroud=[];
109 %all_channel_difference_features=[];
110 for test_digit=0:10
111     %test_backgroud=[];
112     test_result=0;
113     str=num2str(test_digit);
114     path_temp=strcat(‘C:\Users\cong\Desktop\研一实战\项目\图像中时间数字识别\trainingSample\no‘,str,‘\‘);
115     file=dir(path_temp);
116
117     for i=3:length(file)
118         path= strcat(path_temp,file(i).name);
119         I=imread(path);
120        % I=imresize(I,[80 70]);
121         %[all_channel_difference_features,temp_r1,temp_c1]=channel_feature_2_vector(I,1);%all_channel_difference_features就是data
122         %随机森林预测
123
124         pChns=chnsCompute();
125         chns = chnsCompute( I, pChns );
126         all_channel_difference_features(:,:,:,data_num)=cat(3,chns.data{:});
127         label_test_t(data_num)=test_digit;
128         %all_channel_difference_features=single(all_channel_difference_features);
129         data_num=data_num+1;
130     end
131     data_num=1;
132     [pred_label, prob] =crndforest(handle, ‘predict‘, all_channel_difference_features);
133     label_test=int32(label_test_t);
134     label_test=label_test‘;
135     test_result=sum(pred_label==label_test);
136     test_result
137     test_result=test_result/(length(file)-2);
138 %     test_backgroud
139     %test_result=test_result/198;
140     all_test_result=[ all_test_result,test_result];
141     %all_test_backgroud=[ all_test_backgroud,test_backgroud];
142     disp(‘检测数字:‘)
143     test_digit+1
144 end
145 %输出结果
146 disp(‘恭喜恭喜,结果出来啦!‘)
147 all_test_result
148 crndforest(handle, ‘delete‘);
149 disp(‘测试完毕...‘);
150 %}
151 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
152 %}
153 % 检测,测试
154 %参数设置
155 clear all;
156 scale_num=5;
157 scale_factor=1.2;
158 all_channel_difference_features=single(zeros(11,8,10,2));%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%先这么滴
159 %输入图,并提取特征
160 test_path=‘E:\研一实战\项目\图像中时间数字识别\OCR\one\3.jpg‘;
161 I=imread(test_path);
162 pChns=chnsCompute();
163 chns = chnsCompute( I, pChns );
164 channel_feature=cat(3,chns.data{:});
165 [ch_r,ch_c,ch_num]=size(channel_feature);
166 %原图和通道特征图的比例
167 [I_r,I_c,~]=size(I);
168 radio_r=I_r/ch_r;
169 radio_c=I_c/ch_c;
170 %多个尺度对原图处理
171 %数据结构
172 scale_factor_t(1)=scale_factor;
173 for i=2:scale_num
174     scale_factor_t(i)=scale_factor_t(i-1)*scale_factor;
175 end
176
177
178 for i=1:scale_num
179     [chf_r,chf_c]=size(imresize(channel_feature(:,:,1),scale_factor_t(i)));
180     temp=zeros(chf_r,chf_c,ch_num);%预先求矩阵的尺度
181     for ii=1:ch_num
182         %元胞的个数
183         temp(:,:,ii)=imresize(channel_feature(:,:,ii),scale_factor_t(i));%用元胞来装吧,数据大小不一样了,temp是global吗
184     end
185     channel_feature_scale{i}= temp;
186 end
187
188 %获得训练图的尺度大小
189 patch_row=11;
190 patch_column=8;
191 %all_channel_difference_features=single(zeros(11,8,10,2));
192 data_num=1;
193 coordinate=zeros(4,2);
194 %all_boundingbox=zeros(5,2);
195 all_boundingbox=[];
196 for j=1:scale_num
197     I_scale=channel_feature_scale{j};%第j个尺度的图
198     [row,column,~]=size(I_scale);
199
200     for l=1:ch_num                   %第l个通道的图
201         for m=1:2:row-patch_row+1      %某个patch
202             for n=1:2:column-patch_column+1
203                 all_channel_difference_features(:,:,:,data_num)=I_scale(m:m+patch_row-1,n:n+patch_column-1,:);%把滑窗的数据依次记录下来
204                 %坐标记录下来
205                 %coordinate[data_num}=[m,l,patch_row,patch_column];%存坐标
206                 coordinate(:,data_num)=[m*radio_r,n*radio_c,patch_row*radio_r,patch_column*radio_c];
207                 data_num=data_num+1;
208             end
209         end
210     end
211     data_num=data_num-1;
212     %在多个尺度图中缩放图中滑窗并检测,坐标和预测类标,置信度存好
213     handle = crndforest();
214     crndforest(handle, ‘load‘, ‘forest_model2‘);
215     [hs, ps] =crndforest(handle, ‘predict‘, all_channel_difference_features);%尺度问题
216     %对存好的坐标进行变换,映射到原图
217 %     for i=1:data_num
218 %         coordinate{i}=coordinate{i}/scale_factor_t(j);
219 %     end
220     coordinate=coordinate/scale_factor_t(j);
221     %所有的boundingbox组合作为输入
222     %prob=ps(hs+1,:);
223     [rr,~]=size(hs);
224     prob=zeros(rr,1);
225     for t=1:rr
226         prob(t)=ps(hs(t,1)+1,t);
227     end
228     hs=double(hs);
229     bb_partial=[coordinate‘,prob,hs];
230    %all_boundingbox(:,j)=[coordinate,hs,ps(hs)];
231    all_boundingbox=[all_boundingbox;bb_partial];
232    disp(‘第‘)
233    j
234    disp(‘个尺度‘);
235    data_num=1;
236 end
237 %nms函数
238 % bbs1 = bbNms(all_boundingbox, ‘type‘,‘max‘ );
239 % %显示
240 % im(I);
241 % bbApply(‘draw‘,bbs1(1:4),‘g‘);% all_boundingbox(:,[1,2])=all_boundingbox(:,[2,1]);
242 % all_boundingbox(:,[3,4])=all_boundingbox(:,[4,3]);
243 disp(‘正在显示,请稍等...‘);
244 [all_bb_r,all_bb_c]=size(all_boundingbox);
245 bbs=[];
246 for x=1:all_bb_r
247 %     if all_boundingbox(x,6)~=10
248     if all_boundingbox(x,6)==5
249         bbs=[bbs;all_boundingbox(x,:)];
250     end
251 end
252
253 %bbs1 = bbNms(bbs, ‘type‘,‘max‘ );
254 bbs1 = bbNms(bbs, ‘thr‘,.35, ‘type‘,‘ms‘);
255
256 im(I);
257 bbApply(‘draw‘,bbs1,‘g‘);
258 disp(‘显示完成!恭喜恭喜!‘);
259 %}

注:

要附上其它代码:

1)随机森林c++版本(mex编译)

2)channel features

时间: 2024-10-05 18:09:43

时间数字识别项目之大体完成的相关文章

利用手写数字识别项目详细描述BP深度神经网络的权重学习

本篇文章是针对学习<深度学习入门>(由日本学者斋藤康毅所著陆羽杰所译)中关于神经网络的学习一章来总结归纳一些收获. 本书提出神经网络的学习分四步:1.mini-batch 2.计算梯度 3.更新参数 4.重复前面步骤 1.从识别手写数字项目学习神经网络 所谓“从数据中学习”是指 可以由数据#自动决定权重#.当解决较为简单的问题,使用简单的神经网络时,网络里的权重可以人为的手动设置,去提取输入信息中特定的特征.但是在实际的神经网络中,参数往往是成千上万,甚至可能上亿的权重,这个时候人为手动设置是

pytorch 手写数字识别项目 增量式训练

dataset.py ''' 准备数据集 ''' import torch from torch.utils.data import DataLoader from torchvision.datasets import MNIST from torchvision.transforms import ToTensor,Compose,Normalize import torchvision import config def mnist_dataset(train): func = torch

自强队视觉组训练项目-3 | 20180107-印刷体数字识别

DEADLINE: 21st Jan, 2018 (Duration: 2 weeks) 项目需求 数字识别是机器视觉的一个经典话题,其中较为基础的是印刷体数字识别,这期项目要求实现印刷体数字识别,即给一张包含印刷体数字的图片,你的任务是将其中的数字以字符形式输出. 项目描述 项目需求描述了基本要求,具体难度可以自己调节,比如可以给一张只含一个数字的图片,然后通过计算灰度总值区分不同印刷体数字的特征.这是一种极其简单的思路,实现起来也许还是要花点功夫.当然你可以围绕"印刷体数字识别"这

机器学习进阶-项目实战-信用卡数字识别 1.cv2.findContour(找出轮廓) 2.cv2.boudingRect(轮廓外接矩阵位置) 3.cv2.threshold(图片二值化操作) 4.cv2.MORPH_TOPHAT(礼帽运算突出线条) 5.cv2.MORPH_CLOSE(闭运算图片内部膨胀) 6. cv2.resize(改变图像大小) 7.cv2.putText(在图片上放上文本)

7. cv2.putText(img, text, loc, text_font, font_scale, color, linestick) # 参数说明:img表示输入图片,text表示需要填写的文本str格式,loc表示文本在图中的位置,font_size可以使用cv2.FONT_HERSHEY_SIMPLEX, font_scale表示文本的规格,color表示文本颜色,linestick表示线条大小 信用卡数字识别: 信用卡      数字模板涉及到的内容:主要是采用模板匹配的思想 思

手把手教你搭建caffe及手写数字识别(全程命令提示、纯小白教程)

手把手教你搭建caffe及手写数字识别 作者:七月在线课程助教团队,骁哲.小蔡.李伟.July时间:二零一六年十一月九日交流:深度学习实战交流Q群 472899334,有问题可以加此群共同交流.另探究实验背后原理,请参看此课程:11月深度学习班. 一.前言 在前面的教程中,我们搭建了tensorflow.torch,教程发布后,大家的问题少了非常多.但另一大框架caffe的问题则也不少,加之caffe也是11月深度学习班要讲的三大框架之一,因此,我们再把caffe的搭建完整走一遍,手把手且全程命

【转】机器学习教程 十四-利用tensorflow做手写数字识别

模式识别领域应用机器学习的场景非常多,手写识别就是其中一种,最简单的数字识别是一个多类分类问题,我们借这个多类分类问题来介绍一下google最新开源的tensorflow框架,后面深度学习的内容都会基于tensorflow来介绍和演示 请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址 什么是tensorflow tensor意思是张量,flow是流. 张量原本是力学里的术语,表示弹性介质中各点应力状态.在数学中,张量表示的是一种广义的"数量",0阶张量

C#中调用Matlab人工神经网络算法实现手写数字识别

手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化  投影  矩阵  目标定位  Matlab 手写数字图像识别简介: 手写阿拉伯数字识别是图像内容识别中较为简单的一个应用领域,原因有被识别的模式数较少(只有0到9,10个阿拉伯数字).阿拉伯数字笔画少并且简单等.手写阿拉伯数字的识别采用的方法相对于人脸识别.汉字识别等应用领域来说可以采用更为灵活的方法,例如基于规则的方法.基于有限状态自动机的方法.基于统计的方法和基于神

C++使用matlab卷积神经网络库MatConvNet来进行手写数字识别

环境:WIN10(64 bit)+VS2010(64 bit)+Matlab2015b(64 bit) 关于MatConvNet的介绍参考:http://www.vlfeat.org/matconvnet/ Github下载地址为:https://github.com/vlfeat/matconvnet/ 我们的目的是将MatConvNet自带的手写数字识别DEMO移植到一个简单的WIN32 DEMO中使用,主要过程有以下几个步骤: (1)配置MatConvNet,然后将手写数字识别DEMO编译

[blog 项目实战派]钢管识别项目2

钢管识别项目2 零.相关说明: 首先进行一下相关说明.在"jsxyhelu.cnblogs.com/项目实战派"栏目里面出现的需求.图片和其他资源,都是我在浏览威客网站.论坛等网站的时候通过正规渠道获得的真实需求.个人觉得比较感兴趣,但是由于时间或者工作的冲突自己没有去接这些项目.但是由于这些需求都很有实现价值,所以过了一段时间,仍然拿出来练一练手,并且实现了核心模块.希望能够给浏览者一些启发.如果你认为这些图片和资源放在这里不合适,请及时联系我([email protected]),