基于ARM手写数字识别系统*

2018-11-09 02:49黄盼盼夏志勇
山西电子技术 2018年5期
关键词:手写树莓摄像头

杨 迪,黄盼盼,夏志勇,沈 森

(河南科技大学信息工程学院,河南 洛阳 471003)

0 引言

数字是人们日常生活中使用频率极高的符号,而手写数字更是出现在账单,考试等各生活场景。若是可以实现自动化手写数字的识别,则可以大大改善人工识别的效果。在实际应用中要实现手写数字的自动识别却有着许多影响精度难点。本文选用神经网络为识别算法,结合摄像头采集图像,达到设备能自动识别手写数字的目的。神经网络法在训练时期消耗大量的资源与时间,利用计算机的CPU与GPU资源共同协调运算,完成训练过程。神经网络有着很高的学习性、抗干扰性等优点。在实际测试中利用神经网络法对于手写数字识别的准确率很高。

1 原理概述

卷积神经网络进行手写数字识别,有着更高的精度,容错度、学习能力以及适应性[1]。

1.1 学习框架TensorFlow

TensorFlow可以利用计算机的计算资源,进行多线程、多任务的神经网络训练任务[2]。并且可以结合NVIDA提供的CUDA运算平台来调计算机的GPU资源进行数据计算,从而提高神经网络的训练与计算时间。

1.2 数据集MNIST

MNIST是一个拥有大量手写数字模版的手写数字数据集[3]。该数据集总共包罗有60000个用于训练集和10000个用于测试的测试集的示例。每一张图片是28×28个灰度像素值组成的矩阵,都对应着一个标签,也就是图片上的数字。

1.3 利用Softmax进行手写数字分类

识别手写数字问题可归为一个十分类的问题,通过设计一个可靠的网络,输入图片在目标分类上的概率最大就可以实现分类要求[4]。MNIST的每一张图片是一张手写的阿拉伯数字表示0-9中的一个。为了得到某个图片属于某一个分类的得分值e,可以用下面的方法来得到:

ei=∑Wi,j·xj+bi

.

(1)

公式(1)表示了输入的带分析图片x是数字i的类别的得分值ei,其中Wi表示网络层中的权重值,j代表给定图片x像素引用于像素求和,bi代表数字i类的偏置量。得到了得分值,就可以利用softmax把得分值转化为概率pi:

pi=softmax(e)

.

(2)

通过softmax得到输入图片在每一个目标分类的概率值,假设所有输出的概集为P。找到最大的概率值p=max(P),那么p所对应的类就是模型的所属类别。

2 系统描述

较比于传统的神经网络方法而言,卷积神经网络,则是在它的基础上加上卷积层与池化层,这样让图片的特征更加突出。

2.1 图像预处理

图像预处理是手写数字分类的第一步,输入的标准是28x28的图片数据,因此卷积神经网络无法直接处理摄像头采集到的数据,故先利用opencv对数据预处理。

2.1.1 Opencv简介

Opencv是一个集成了众多机器视觉相关算法的开源软件库,提供源码编译,可在多个平台运行。Opencv-Python是opencv的ptyhon语言版,我们可以通过python的pip工具安装opencv库,也可以通过编译源码安装。

2.1.2 图像采集与预处理

利用opencv-python可以调用摄像头采集数据,在采集到图像后要先对图像进行预处理,得到符合设计模型的图像输入。具体步骤如下:

1) Opencv-python提供了VideoCapture()来打开默认摄像头,利用read()函数可以读取每一帧的数据。

2) 转化灰度图:转换代码如下:

gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

3) 阈值分割:阈值分割即通过一个特定的阈值对图像的的像素值进行二值化。

opencv-python提供了threhold对图像进行阈值分割。

4) 寻找轮廓:轮廓可当作边界上连在一起的曲线,判定是否有相同的颜色。Opencv-python提供了findContours函数来查找图像的轮廓。找到图像的轮廓后用drawContours()来画出轮廓,用外接矩形来表示。

5) 切割图形:利用python提供的切片方法对图像切割。我们的模型是针对MNIST提供的28x28的图像进行训练,Opencv-python提供了resize()函数来对图像大小进行调整。

2.2 神经网络设计与实现

在这一步要实现数字的识别分类,我们将卷积神经网络同softmax模型结合,便于分类,也提高了识别精度。

2.2.1 Softmax分类

利用tensorflows可以构造简单的softmax模型进行分类任务,把输入图像看为一个28×28=784的向量,通过MNIST数据集我们可以得到一个[60000,784]的张量。在它的第一个维度可以得到数据集中具体一张图片,通过的第二个维度用来找到每张图片中的一个像素点。定义输入X为一组大小为784的一维矩阵,定义一个W矩阵为:W=[784,10],同时定义B=[10],刚可以得到softmax的计算表达式:

Y=softmax(W*X+B)

.

(3)

通过该式可以得到一个大小为十的一维数组Y,其中每个元素就代表了输入X在各个分类中的概率值。利用交叉熵来计算网络的损失,将得到的损失值用梯度下降算法来调整W与B矩阵中的参数数值,从而达到训练模型提高精度的目的。上述模型经过10 000次训练,经测试,得用softmax模型的精度为92.6%。

2.2.2 卷积神经网络(CNN)分类实现

Softmax构建的模型可以达到92.6%的精度,利用卷积神经网络来处理会对于图片的初始特征提取更加的明显。

在整个网络中,构建了两个卷积层,在这两个卷积层我们使用Max Pooling作为池化函数,并加上ReLU函数。使用大小为5×5的卷积核。通过卷积层可以把原始数据对应到特征空间中,而在卷积层后是全连接层,该层可以把特征加权,从而将前层输出映射到样本的标记空间中去。在网络训练中可能出现过拟合现象,在全连接层后面加上Dropout层减轻参数的灵敏。在网络的最后,使用softmax模型,将前层的输出转化为每一分类的概率[5]。

通过TensorFlow构建模型后,PC电脑对于模型进行训练与分析通过该模型进行40 000次的训练后,得到的模型精度为98.05%。该精度大致满足要求。

图1 卷积网络训练结果

3 开发环境与硬件系统

3.1 软件环境

以ARM内核的单片机有STM32、BCM2837等,可以看到基于ATMEGA328P的Arduino平台与基于BCM2837的树莓派平台较其它单片机提供了更多种开发语言的有效支持。而且树莓派可以运行Linux/Windows操作系统,提供了Python语言的支持[6]。

故本文采用搭载Cortex-A7的ARM处理器的树莓派3b为平台进行开发。

3.2 硬件系统

本系统涉及到的硬件有主控制芯片、SD卡、摄像头、显示屏以及用于辅助开发的网络模块、USB键盘与鼠标。在系统工作时,SD卡用于存储树莓派的系统数据与用到的应用程序,树莓派的操作系统约占用了3G的空间,为保证有足够的空间进行开发与测试。故选用容量为8G的内存卡。识别时的数据流向如图2所示。

图2 识别时的数据流向

3.3 器件选取

摄像头:输出分辨率大于28×28即可,可以选用的摄像头有CSI(COMS Sensor,Video Encoder)接口的摄像头,以USB为接口的摄像头。经比较,最后选用的是树莓派所配套的USB摄像头。

显示屏:树莓派提供了丰富的显示设备供使用,可以通过HDMI连接支持HDMI视频接口的显示器。选用了3.5寸大小的电阻屏,它的分辨率为480×320,可支持触控。

4 系统的调试结果与分析

通过搭建完整的工作系统,对摄像头实际采集图像数据处理,来识别采集到的手写的数字内容对比于摄像头采集的图像,系统大多能够准确的识别出数字的内容,但是也存在部分错误识别现象。总体识别效果良好。

图3 识别结果

5 结束语

本文所论述的理论与方法能够有效地识别手写数字图像,但是经过测试,在嵌入式平台虽然能够运行模型并且有效果识别,但是速率不高,系统整体对于干扰的抵抗力比较低。所以模型的简化与速率改良与系统适应性改良是今后的主要方向。

猜你喜欢
手写树莓摄像头
浙江首试公路非现场执法新型摄像头
摄像头连接器可提供360°视角图像
我手写我心
抓住身边事吾手写吾心
基于树莓派的骑行智能头盔设计
基于集成学习的MINIST手写数字识别
基于树莓派的远程家居控制系统的设计
深度学习在手写汉字识别中的应用综述
响应面法优化红树莓酒发酵工艺
奔驰360°摄像头系统介绍