APP下载

基于SVM的智能统分自学习系统设计与实现

2019-10-15赵晟然伍常亮

软件导刊 2019年8期

赵晟然 伍常亮

摘 要:为了解决传统纸质试卷人工统分过程存在工作量大、错误率高、统分效率低等问题,设计开发一款基于SVM的智能统分自学习系统。该系统由前端用户界面、后台手写分数识别子系统和自学习子系统构成。系统采用C#编程语言和Microsoft Visual Studio软件设计前端用户界面;使用Matlab作为系统运算后台,并构建SVM多分类器识别手写分数;使用C#编程语言设置定时器,在系统空闲时间定时启动Matlab执行自学习程序。经过MNIST数据集的训练和测试,SVM多分类器的测试精度达到97.74%。完成系统设计开发后,使用试卷统分栏图片测试系统。测试结果表明,该系统可以有效实现智能识别、统分栏内手写分数汇总以及自学习功能,并将运行结果清晰准确地显示在前端用户界面上。

关键词:SVM;手写数字识别;自学习系统;统分系统

DOI:10. 11907/rjdk. 191927 开放科学(资源服务)标识码(OSID):

中图分类号:TP319文献标识码:A 文章编号:1672-7800(2019)008-0127-04

Design and Implementation of Intelligent Unified Self-learning System

Based on SVM

ZHAO Sheng-ran, WU Chang-liang

(College of Mechanical and Electrical Engineering,Kunming University of Science and Technology, Kunming 650500,China)

Abstract: In order to solve the problems of traditional paper test papers in the manual integration process, such as large workload, high error rate and low efficiency, this paper designs and develops an intelligent unified self-learning system based on SVM. The system consists of a front-end user interface, a background handwritten score recognition subsystem, and a self-learning subsystem. The system uses C# programming language and Microsoft Visual Studio software to design the front-end user interface, uses Matlab as the system operation background, and builds SVM multi-classifier to recognize the handwritten score, C# programming language is used to set the timer and Matlab to perform self-learning in the system idle time is started. After training and testing of the MNIST dataset, the SVM multi-classifier has a test accuracy of 97.74%. After completing the system design and development, use the test paper system to test the system. The test results show that the system can effectively realize the functions of intelligent recognition, handwritten scores in the presidential column and self-learning, and display the running results clearly and accurately in the front-end user interface.

Key Words: SVM; handwritten digit recognition; self-learning system; unified system

作者簡介:赵晟然(1993-),男,昆明理工大学机电工程学院硕士研究生,研究方向为企业集成及信息化、机器学习;伍常亮(1995-),男,昆明理工大学机电工程学院硕士研究生,研究方向为企业集成及信息化、机器学习。

0 引言

传统纸质试卷以其使用方便、成本低廉等优点,在教育领域得到了广泛应用。同时,试卷的人工批改、手动统分等工作贯穿其整个使用过程。试卷卷头的统分栏常由分项得分栏和总分栏构成,最常见的统分方法是将试卷题目的分项得分登记到对应的分项得分表中,再依靠人工汇总统分栏内的分项分数,最终得到试卷总分并将其手动填入总分栏。此种方法在实施过程中需要大量依靠人工,人的影响因素较为明显,在工作量大时容易出现效率低、错漏多等问题。

分析试卷人工统分过程,其本质就是一个识别手写数字并将识别结果汇总的过程。随着人工智能技术的不断发展,使用手写识别技术代替人工已经不是难题。手写数字识别属于光学字符识别技术(OCR)的分支,本质是图片分类问题,其原理是将阿拉伯数字0~9分为相对应的10个类别,进而对图片进行分类,最终选取与标准样本数字具有最大相似度的数字作为匹配结果。手写数字识别相关研究一直是领域热点问题。2011年,吴忠[1]等提出一种基于图像识别技术的手写数字识别方法,提高了数字识别率和实时性;2012年,焦微微[2]等提出了一种用BP神经网络识别手写数字的方法,识别效果较好。支持向量机(Support Vector Machine,SVM)作为一种以统计学理论为基础的机器学习算法,可以有效解决非线性、高维数等问题。经过不断改进和发展,SVM在人像识别、手写字符识别等模式识别领域得到了广泛应用。多年来有关SVM的研究从未间断,1995年Cortes[3]等首次提出SVM,数据训练结果表明SVM在解决非线性及高维数问题中表现出许多特有优势,具有优秀的泛化能力;2017年Vapnik[4]等对SVM和神经网络中的知识转移进行了前瞻性研究。此间许多学者展开了对SVM的相关研究并将其灵活运用于手写字符识别领域。2005年,蒙庚祥[5]等阐述了支持向量机技术和手写数字识别技术发展现状,基于SVM进行手写体数字识别系统设计;2006年,吴琳琳[6]将支持向量机应用于手写数字识别,尝试开发了SVM. HDR软件系统,有效提高了手写数字识别精度;2010年,李文趋[7]以手写数字样本图像的像素点作为输入对SVM进行训练,获得了最佳参数并取得了较高识别率;2013年,石会芳[8]通过研究SVM 核函数的参数优化方法,提出基于改进的 PSO-LSSVM 的手写数字识别方法,有效提高了数字识别准确度。

随着人工智能技术的不断发展,近几年将SVM应用于手写数字识别技术的研究逐渐深入。2017年,李阳阳等[9]发明了一种基于卷积神经网络和支持向量机的手写数字识别方法,将卷积神经网络与支持向量机相结合提高手写数字识别准确率;2018年,Sharma等[10]设计了基于SVM的字符识别系统,同年郭伟林等[11]进行了多分类支持向量机应用的研究与探索,并将其与手写数字识别相结合;2019年,胡霖[12]提出了一种基于改进的C-支持向量机的手写体数字高识别率方法,并通过实验证明了该方法有效可行。

虽然SVM在手写数字识别领域得到了广泛应用,但鲜少将其应用于试卷统分栏手写分数的识别。为了解决传统纸质试卷统分过程存在依赖人工识别和汇总分数所导致的效率低、易出错等问题,本文设计并实现了一款基于SVM进行试卷智能统分的自学习系统。

1 系统需求分析

该系统应具备识别准确、响应迅速、自学习等功能,可实现对统分栏图片内的手写分数进行正确识别和智能统分;对于用户反馈的识误数据文件,系统后台可在设置的空闲时间内进行自学习,使系统在自学习过程中不断自我完善和提高;同时要求系统运行稳定,鲁棒性强,能够有效满足使用需求。

2 系统结构设计

基于SVM的智能统分自学习系统由前端用户界面、后台手写分数识别子系统和自学习子系统构成。系统前端用户界面需要有图片导入键、清除键、保存键、识别键并能显示后台分数识别系统识别结果;后台分数识别系统需具备图片预处理、手写数字准确识别和智能统分功能;自学习系统要能将用户反馈的识错数字保存下来,有批次地在服务器空闲时间加入新样本重新训练分类器。

经过需求分析确定该系统体系结构如图1所示。

图1 系统体系结构

3 前端设计与实现

C#作为一门现代、通用、面向对象的编程语言,可以产生高效率的程序[13];Microsoft Visual Studio软件可以帮助开发者在系统设计和开发过程中兼顾美感与功能[14]。本文使用C#编程语言,结合Microsoft Visual Studio软件设计系统前端用户界面。

前端用户界面包含了选择颜色、画笔精度、设置图片大小、导入图片以及对图片进行清除、保存、识别的功能键。用户可以点击“导入”键导入需要识别的试卷卷头统分栏图片,点击“识别”键识别统分栏中各分项得分。若用户发现导入错误,可以点击“清除”键清除当前图片,便于重新选择图片。同时在显示框下方设置统分栏显示区域,清晰、直观、有序地向用户展示系统所识别的分项得分及智能统分结果。界面整体设计简洁大方,可以帮助用户方便地进行相关操作,快速获取有效信息。

4 后台设计与实现

本文采用Matlab作为系统运算后台。Matlab作为一款功能强大的数学软件,被广泛应用于图像处理等领域[15]。通过Matlab对图片进行处理和分割,有效提取图片特征,利用其强大的计算能力完成对试卷卷头统分栏图片的预处理,并且以栏为单位对试卷卷头统分栏图片进行分割。在此基础上对分割得到的每个分数栏内分数的小图片进行识别,最终实现正确识别分项得分和智能统分的功能,并将结果传送至系统前端界面进行显示。

4.1 试卷统分栏图像处理过程

系统中主要涉及对试卷卷头统分栏内的分数图片进行图像分割。首先对前端输入的图片进行预处理,此过程中首先对图片进行适当缩放,然后根据颜色配比从图片中提取出分数,最后进行形态学闭运算和膨胀运算并使用自动阈值法对图片进行二值化处理。图片预处理的作用是利用图像分割技术将试卷统分栏中的分数整体分割出来,用形态学方法将分割得到的图像进行去噪、膨胀、腐蚀等操作,最终得到清晰、无噪声、只存在手写分数的图片[16]。

在得到清晰无噪的手写分数图片后,开始对分项得分图片进行分割。本系统采用当前主流文本识别技术实现对试卷头手写分数的识别功能,即对单个文本进行逐步识别后再加以组合[17]。首先对预处理后的图片提取包络矩形,然后判断并纠正图片方向并对图片进行适度增广,最后利用密度聚类法对图片进行聚类,根据密度聚类结果单独提取出单个数字的像素点,并分别取最小包络进行保存。

4.2 SVM多分类器构建

SVM算法最初是为二值分类问题而设计,当处理多类问题时,就需要构造合适的多类分类器。目前,构造SVM多类分类器的方法主要有直接法和间接法。间接法又包括“一对多”法和“一对一”法。其中“一对一”法在处理过程中无需重新训练所有的支持向量机,只需重新训练与增加样本相关的分类器即可。因此,在单个模型训练过程中具有较快速度。

本文结合系统实际需要,确定采用“一对一”方法构建多分类支持向量机。具体做法是在任意两类样本之间设计一个支持向量机,对于k个类别的样本,就需要设计k(k-1)/2个支持向量机。由于该系统需要识别0~9共10种类别的数字,即k=10,因此需要构建45个SVM分类器。SVM分类器在分类过程中的工作原理是:将45个二分类器分别应用于单个数字的判别,同时记录数字被判别的次数[18]。某一个标准样本数字被判别的次数越多,意味着被识别数字与标准样本数字间的相似度越大。选取与标准样本数字具有最大相似度的数字作为最终识别结果,在完成手写数字的识别过程后,将识别结果输送至前端用户界面。

4.3 SVM多分类器训练与测试

本文选取MNIST数据集作为初始SVM多分类器的训练集和测试集。MNIST包含7万张黑底白字手写数字圖片,其中55 000张为训练集,5 000张为验证集,10 000张为测试集。其中,训练数据集包含60 000个样本,测试数据集包含10 000样本。在 MNIST 数据集中的每张图片由28×28个像素点构成,每个像素点用一个灰度值表示。MNIST数据集示例图片如图2所示。由于样本量较大,此处选用像素点的分布特征作为支持向量机的训练数据,并对所有样本进行最小包络处理以期提高训练效果。测试结果表明,用此方法得到的SVM多分类器的测试精度达到97.74%,说明该SVM多分类器的可信度较高。

图2 MNIST数据集示例图片

4.4 截图报错功能实现

截图报错功能是通过使用C#编程语言[19],借助Microsoft Visual Studio软件这一载体,结合系统的前端用户界面实现。当系统的手写数字识别结果出现错误时,用户可以根据识别出错的具体内容,将识错部分的图像进行截取、保存,并反馈到系统后台。同时系统中包含的临时文件会将用户输入的新图像数据样本与之前的图像数据样本进行融合,为系统后续自学习过程奠定基础。

4.5 自学习功能实现

作为人工智能领域的关键技术,自学习功能可以帮助基于SVM的智能统分系统随着时间的推移和学习循环过程的进行不断完善和提高,进而具备更精确的识别率和更强大的处理能力[20]。考虑到系统在应用初期,可能会由于数据量不足而产生手写分数识别错误的问题,该系统采取如下对策:通过使用C#编程语言中的Timer类语句,即设置一个定时器,定时启动Matlab软件,开始执行自学习程序。定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数(用户反馈的识错内容),实现系统在夜间(0点以后)空闲时间自动开启Matlab软件,对白天用户的使用情况进行重新学习[21]。

系统能够根据前端用户对识别结果的反馈,将识别错误的手写数字图像保存到一个临时文档中,在服务器空闲时间,后台可以将这些识错图像作为新样本加入到样本集中重新对SVM分类器进行训练,最终实现优化系统功能、提高识别精度和学习效率的目的。

随着自学习功能的不断进行,系统将会“记住”越来越多不同手写风格的样本,从而不断增强和完善系统识别功能,保证系统良性循环,真正意义上实现“机器学习”。

选取样本图片对系统自学习功能进行测试过程如下:样本图片如图3所示,前端用户对系统识别错误的内容进行截图并对其正确命名,然后将其反馈到系统后台。系统首先将命名为9的样本图片进行识别,识别结果显示为5,与图片实际内容(正确命名)不符,此时系统发现识别错误,将在设置好的空闲时间内开启自学习功能。自学习功能实现过程如图4所示。

图3 样本图片                          图4 自学习过程

5 系统运行结果

在前端用户界面显示框中点击“导入图片”键,导入试卷卷头统分栏图片,然后选择合适的颜色、画笔粗度和图片大小,确认无误后点击“识别”键,系统开始对图片进行识别,如图5所示。

图5 图片选择及导入

系统运行完毕后,会将运行结果显示在前端用户界面显示框下端的分数表中,如图6所示。

图6 识别结果

该系统在Matlab运行环境下的运行结果与运行时间如图7所示。

图7 Matlab运行结果与运行时间

系统运行结果表明,该系统后台预期功能基本实现,能够实现对试卷卷头统分栏中的分数进行正确识别和统分。该系统在运行条件为Matlab2016a、计算机系统处理器1.80GHz、运行内存(RAM)为3.89GB时,总运行时间为7.22s,其中加载支持向量机分类器结构体耗时5.57s。

6 结语

本文针对传统纸质试卷统分方法存在工作效率低、容易出错等问题,使用C#编程语言,结合Matlab与Microsoft Visual Studio软件,设计并实现了基于SVM的智能统分自学习系统。系统通过构建SVM多分类器并使用MNIST数据集对其进行训练和测试,取得了97.74%的测试精度。通过前端用户界面导入统分栏图像,采用Matlab作为运算后台,首先对图片进行预处理,对分项得分图片进行分割,然后使用SVM多分类器识别手写分数。系统利用Matlab的强大计算能力完成对试卷卷头统分栏手写分数的识别,智能计算总分并将识别结果传送到前端用户界面。在服务器空闲时间对识错数字图像进行自学习,最终完成试卷卷头统分栏内手写分数的智能识别、统分和自学习过程。验证结果表明,该系统可以显著降低试卷统分工作强度,提高工作效率和统分正确率,具有一定的应用价值。

随着系统自学习过程的不断循环,系統功能将得到进一步完善和提高,预测SVM多分类器的识别精度可以超过97.74%。但是该系统仍然存在不足:当前系统运行时间较长,如何有效缩短系统运行时间,实现对试卷统分表栏图片内手写数字的快速识别、汇总和结果输出,将是下一步的主要研究方向。

参考文献:

[1] 吴忠,朱国龙,黄葛峰,等. 基于图像识别技术的手写数字识别方法[J]. 计算机技术与发展, 2011, 21(12):48-51.

[2] 焦微微,巴力登,闫斌. 手写数字识别方法研究[J]. 软件导刊, 2012,11(12):172-174.

[3] CORTES C, VAPNIK V. Support-vector networks[J]. Machine Learning,1995,20(3):273-297.

[4] VAPNIK V, IZMAILOV R.Knowledge transfer in SVM and neural networks[J]. Annals of Mathematics and Artificial Intelligence,2017.

[5] 蒙庚祥,方景龙. 基于支持向量机的手写体数字识别系统设计[J]. 计算机工程与设计,2005,26(6):1592-1594.

[6] 吴琳琳. 基于SVM技术的手写数字识别的研究[D]. 济南:山东师范大学,2006.

[7] 李文趋.  SVM在手写数字识别中的应用[J]. 泉州师范学院学报, 2010,28(4):18-21.

[8] 石会芳. 支持向量机及其在手写数字识别中的应用[D]. 重庆:重庆大学, 2013.

[9] 李陽阳,周林浩,焦李成,等. 基于卷积神经网络与支持向量机的手写数字识别方法[P]. 中国,CN201611136985.6,2017-04-26.

[10] SHARMA S,SASI A, CHEERAN A N.A SVM based character recognition system[C]. 2017 2nd IEEE International Conference on Recent Trends in Electronics, Information & Communication Technology (RTEICT),2018.

[11] 郭伟林,邓洪敏,石雨鑫. 基于局部二进制和支持向量机的手写体数字识别[J]. 计算机应用,2018,38(S2):287-290,294.

[12] 胡霖. 基于改进的C-支持向量机的手写体数字高识别率方法研究[J]. 数字通信世界,2019,169(1):252-272.

[13] Derek Beyer. C# COM+编程指南[M]. 龚小平,史艳辉,杜大鹏,译. 北京:中国水利水电出版社,2002.

[14] SNELL M,POWERS L.Microsoft visual studio 2015 unleashed[M]. Indianapolis :Sams Publishing,2010.

[15] 李根强.  MATLAB及Mathematica软件应用[M]. 北京:人民邮电出版社, 2016.

[16] 江明,刘辉,黄欢. 图像二值化技术的研究[J]. 软件导刊,2009(4):175-177.

[17] 边肇祺,张学工. 模式识别[M]. 第2版. 北京:清华大学出版社,2000.

[18] 陈永义,熊秋芬. 支持向量机方法应用教程[M]. 北京:气象出版社,2011.

[19] 莫勇腾. 深入浅出设计模式(C#/JAVA版)[M]. 北京:清华大学出版社,2006.

[20] 周志华. 机器学习[M]. 北京:清华大学出版社,2016.

[21] 赵海滨.  MATLAB应用大全[M]. 北京:清华大学出版社,2012.

(责任编辑:孙 娟)