python笔迹识别_关于机器视觉笔迹识别和Arduino控制机器人的设计

0 引言

伴随着现在日益高性能的计算机硬件和完善的理论技术,机器视觉技术已开始得到广泛的应用。结合机器视觉技术的智能机器人在现今人工智能趋势下扮演一个重要角色,在智能制造推进、智慧城市建设、家居生活质量提高等方面,都有广阔的施展空间[1]。

1 整体设计思路及方案

本设计将能胜任机器视觉处理能力的计算机与单片机作主控的机器人相结合,通过无线通信方式构建一个相比其他低成本机器人具备更高自主性和智能性的机器人模型,目的在于:(1)对比评估主流手写数字识别模型的实际识别表现;(2)探究低成本机器人实现更高智能性的方法[2]。

本设计结合现今热门的机器视觉技术以及Arduino单片机实现了一个能够通过上位机识别手写数字并发送至下位机进行执行的机器人模型,当上位机得到待识别的图片后,将进行图片的处理转化为数据并输入已经在前期构建好的识别模型,计算后输出识别的内容并通过无线通信发送到下位机,下位机根据接收到的识别信号执行相应动作。

本设计总体可分为上位机识别与下位机执行部分。上位机识别部分包含前期输入信号的处理、手写字符的识别模型构建、与下位机通信构建等部分;下位机执行部分采用Arduino单片机结合各类电子元器件和电路模块实现了所期望的执行内容,包括电源供电设计、表盘指示器电路设计、人机交互显示设计以及无线通信设计[3]。

1.1 下位机硬件设计方案

该下位机硬件使用Arduino单片机作为主控,并结合步进电机以及步进电机驱动模块构成了指针数字指示盘,OLED与单片机相连构成人机交互显示界面,NRF2401L无线串口模块与上位机进行通信,使用LM2596稳压模块输出9 V电源为Arduino单片机供电,并且由单片机供电给各个执行模块。采用1.3寸OLED显示屏作为显示器,输出经过上位机识别后发送至下位机的信号,采用SSD1306作为驱动的OLED显示屏显示出数字[4]。

采用步进电机作为仪表盘指示器执行部件,其需要相应电机驱动模块进行驱动。设计仪表指示器需要对步进电机进行正转、反转控制,从而造成指针的顺时针旋转和逆时针旋转,以便能够使其根据输入的识别信号转动相应角度(有对应的正向角度和负角度)。电机接收到单片机输出的特定脉冲时,步进角(步进电机每前进一个步序所转过的角度)便会进行相应的转动,当电机接收一个脉冲信号就会转过一个步进角,二者呈相互的线性关系。通过此线性关系,再根据原有角度与现在应该转动角度做差值计算,求出相差角度,控制电机转动相应角度,便可以实现电机的仪表指示功能。

1.2 数据收集以及上位机识别模型

上位机部分主要负责手写图片的识别,其流程包括手写数字图像预处理、识别模型训练、识别模型验证和测试等。选择MNIST手写库作为模型的数据,并给出了将MNIST数据库进行图像处理的方法,通过比对SVM、BP神经网络、KNN三种识别模型的发展历程、数学原理以及算法步骤等,最终选用BP神经网络识别模型。

1.3 BP神经网络的手写数字识别模型及验证

BP神经网络是神经网络的一种,目前大多数神经网络模型都是由BP神经网络扩展而来。对于本设计所需手写数字识别这一应用来说,神经网络主要用于关于数字0到数字9的分类问题。BP神经网络算法又称为反向传播算法,其连接神经元的权值训练从最末层(即网络的输出层)开始,从输出到输入依次更新每一层的权值,所以被称为反向传播。

BP神经网络的学习算法采用方法为δ学习规则(步长最优化),目标函数为:

式中:Yk表示真实的值,即期望值,是真实图片中所代表数字,k为样本编号;Tk为预测值,即经过模型所计算出来的值;E为真实值与预测值得平方误差求和。整个式子的目标便是使平方误差和最小。

其算法过程的流程描述如图1所示。

BP神经网络由于只应用了均分误差函数对权值和阈值的一阶导数(即梯度)的信息,在实际程序中该算法存在收敛速度慢从而计算时间长、容易陷入局部最小(忽略了全局最优解导致不能正确求解)等问题。在实际的应用中,应注意这些问题的解决,可以与LM神经网络、RBF神经网络等结合使用来解决[5]。

2 使用CV2库进行图像预处理

在设计中使用OpenCV库的扩展库CV2库对图片进行了图像预处理,过程主要包括手写数字图像的归一化以及二值化数据形式,并保存为逗号分隔符的csv文件。

图像处理时间如表1所示,T1时间为转化训练集图片所用时间,用时352 s;T2时间为转化测试集图片所用时间,用时55 s。

2.1 PCA降维操作

本设计使用Python的sklearn库中的PCA方法,输入原始数据集,即可完成PCA降维操作,其降维结果如表2所示。

在经过PCA(主成分分析法)降维操作去除影响较小的变量影响后,得到了59 989行、67列的X_pca数据集,手写数字图片数量不变,但维数从784列缩小为67列,从而有效地减轻了支持向量机、神经网络以及KNN模型的计算过程。在后续的模型训练以及模型识别准确度评估中,也同样使用了PCA操作对数据简化计算量[6]。

2.2 模型比较以及上位机识别模型的选取

本测试模型中,经过转化的训练集数据大小1.09 GB(59 989张图片转化完成的数据),测试集数据大小为186 MB(9989张图片转化完成的数据),经过PCA降维操作后,测试集数据大小为97.7 MB(由原来的864列数据降维为67列数据),训练集数据大小为16.2 MB。模型数据采用PCA降维操作后的数据[7]。

从表3中可知,3种模型中,SVM(支持向量机)模型识别的准确度最高,但训练时间比其他两个模型稍长。BP神经网络模型最小,训练时间比SVM(支持向量机)稍短,测试时间用时也最短,明显短于其他两个模型,说明识别速度是最快的。KNN(K近邻)模型训练时间虽然最短,但从测试时间来看用时最长,测试近10 000个数据的时间比其他两个模型训练近60 000个数据的时间还长了两倍多,模型识别速度最慢。准确率上来看,小数据量时准确率只有百分之五六十,只有大数据体量下准确率才有明显提升,与SVM(支持向量机)和BP神经网络相比,在手写数字识别方面逊色很多。

对上面3个模型根据识别时间、准确率进行比较评估后,决定以准确率优先,次而考虑识别时间,最终决定使用SVM(支持向量机)作为本设计的手写识别模型[8]。

3 手写笔迹图像识别机器人整体设计

在整体设计中,首先选择NRF2401L无线通信模块完成了通信硬件的搭建,并根据其配置表进行命令配置完成了硬件的初始化。上位机方面,使用Python结合win32u库和serial库完成上位机读取识别程序的设计。下位机方面,使用串口结合下位机处理硬件完成数字接收处理的设计。整个系统构成一套上位机对手写图像进行识别,通过无线发送至下位机处理的手写笔迹图像识别机器人。

4 结论

通过本设计与研究,取得的主要结果如下:

(1)选择了MNIST手写数字图片库作为手写识别模型的原始数据,设计实际情况完成了MNIST库图像的处理和转化,从而得到了原始的训练数据集和测试数据集。

(2)分别对SVM(支持向量机),BP神经网络,KNN(K近邻)3种分类模型进行了对比,并使用Python分别对3种模型进行了构建和测试。通过3个模型的训练时间、测试时间以及准确度等指标,比较了3个模型的优劣性,最终以准确率优先原则选取准确度最高的SVM(支持向量机)作为手写数字识别模型并进行应用。

(3)使用NRF2401L无线通信模块和串口功能构建了上位机和下位机之间无线通信,完成了二者的对接,将单片机在电子硬件方面的处理和计算机对手写图片的识别进行了结合[9]。

(4)实现了Python设计上位机应用程序,功能包括图像读取、图像预处理以及转化、图像识别、串口发送、异常处理等。完成了整个上位机的功能,构成了一套上位机手写图像识别,完成了整个设计。

你可能感兴趣的:(python笔迹识别)