zx
 
 
x
 
 
 当前位置  

【嵌入式原理与应用】基于STM32与MATLAB的数字图片识别设计

2019年06月13日 21:25 16自动化(1) 汪珺婷 点击:[]


摘要:在经济全球化的今天,对于手写阿拉伯数字的正确识别在金融领域,特别是银行票据处理,业务受理查询方面的应用将极大的方便人们日常生活,提高工作效率,这也使得手写数字的识别研究工作飞速发展。本次设计用到的主要技术为BP神经网络算法,设计GUI界面来运行程序,并通过串口发送到STM32,LCD实时显示识别结果,实现对STM32端的控制。

关键词: STM32  MATLAB数字识别 BP神经网络

1.系统总设计方案

本设计提出了一种数字图片识别系统的方案。由MATLAB端输入一张带有数字的图片,使用通过MNISIT训练集经由神经网络训练出的模型识别带有数字的图片,并将识别的结果通过串口发送到STM32,并通过液晶显示屏LCD实时显示,不同数字实现对STM32不同的控制作用,具体的控制流程图如下图所示。




2.软件设计

2.1数字识别算法

2.1.1 BP神经网络训练MNISIT样本集得到模型

BP算法由信号的正向传播和误差的反向传播两个过程组成。正向传播时,输入样本从输入层进入网络,经隐层逐层传递至输出层,如果输出层的实际输出与期望输出不同,则转至误差反向传播;如果输出层的实际输出与期望输出相同,结束学习算法。反向传播时,将输出误差(期望输出与实际输出之差)按原通路反传计算,通过隐层反向,直至输入层,在反传过程中将误差分摊给各层的各个单元,获得各层各单元的误差信号,并将其作为修正各单元权值的根据。这一计算过程使用梯度下降法完成,在不停地调整各层神经元的权值和阈值后,使误差信号减小到最低限度。

2.1.2 输入图片处理

输入的图片为28*28,通过读取每一个像素点的像素值,得到每一张图片的特征列向量,使用训练好的BP神经网络模型对其进行识别。

2.2串口通信

上下位机之间通过串口作为通信接口,通过简单的协议进行数据的传输,协

议定义如下:


3.具体实现

3.1 GUI界面设计

本设计的 GUI 界面由MATLAB编写,利用画图的形式画出前端的界面。将整个 GUI 分成了图片显示面板,控制面板,识别显示面板,波形显示面板。具体界面见下图。

 


3.2 BP神经网络的训练

本次应用中的BP算法步骤如下:

1.初始化,用随机数给各权值和阈值赋初值。

2.对训练集中每一样本进行计算。

①前向计算隐层、输出层各神经元的输出。

②计算期望输出与网络输出的误差。

③反向计算修正网络权值和阈值。

3.若满足训练次数,则结束训练,否则转步骤2)继续。

4.结果分析与输出。

具体的核心代码如下所示:

for num=1:10; %迭代10

for i=1:sum;

label=zeros(10,1);

 label(train_y(i)+1,1)=1;%前向传播

temp1=((train_x_matrix(:,i)')*w1)'+bias1;

net=sigmoid(temp1);

temp2=((net')*w2)'+bias2;

z=sigmoid(temp2);%反向传播计算误差更新权值w1,w2

error=label-z;

 deZ=error.*z.*(1-z);

denet=net.*(1-net).*(w2*deZ);

for j=1:output;

w2(:,j)=w2(:,j)+rate2.*deZ(j,1).*net;

end

for j=1:hid; w1(:,j)=w1(:,j)+rate1.*denet(j,1).*train_x_matrix(:,);

end

bias2=bias2+rate2*deZ;

bias1=bias1+rate1*denet;

end

end

3.3串口通信的配置

配置串口波特率为115200,其具体参数配置如下所示s=serial('COM3');

s.baudrate=115200;

s.parity='none';

s.stopbits=1;

s.InputBufferSize=3;

s.BytesAvailableFcnMode='byte';

s.BytesAvailableFcnCount=3;

3.4 LCD实时显示识别结果



3.5 通过不同的数字实现对STM32不同的控制

数字为1时,在STM32端点亮逐渐点亮LED灯,使得其亮度逐渐变化,将LED的亮度PWM值发送至MATLAB,即可显示其PWM波形。



 

如图所示得到其亮度PWM变化的曲线,可将其改编应用至实际使用中实现MATLAB端接收STM32的数据并实时显示,从而控制相应的对象。并可以将其他的数字拓展至相应的功能,实现MATLAB端输入数字的图片,不同的数字实现对STM32不同控制的完整功能。

  1. 实验方法分析与对比

    1. BP算法分析

      优点:

  2. 本次使用BP神经网络实现MNISIT数据集的手写数字识别,原理相较复杂的神经网络容易,同时参数不多,能够模拟比较复杂的模型,能够广泛应用,对模型的要求不高。

  3. 本次实践中,仅使用了3层网络,同时隐藏层的神经元个数为20,即可以得到92%93%左右的正确率,同时可以进一步改变迭代次数,学习率等相关参数来得到更高的正确率,改进空间比较大。

    缺点:

    训练时间较长,这主要是因为学习率太小所致,同时样本的数量比较大,在本次实践中,我选取了固定参数的学习率,可以采用自适应的学习率加以改进此问题。

    4.2串口通信分析

    此次选用的串口通信,实验过程中曾发生过数据传输错误的情况,考虑到选用的网络协议较为简单,其缺点很明显,串口发送速度缓慢且一次只能发送一个字节,故实际使用中可以选择其他的通信方法。

    总结

    本次设计完成了一套基于 STM32MATLAB 的数字图片识别设计,效果均已达到。但因为一开始考虑不周,未连接实际的对象进行控制,故做出来的系统功能有限且实用性不大。之后可以考虑连接具体的被控对象,实现对其的控制,将该系统的数字功能拓展完整。

 

上一条:【嵌入式原理与应用】基于STM32F4的BUCK闭环电路、逆变电路

关闭