APP下载

基于KNN算法的OCR系统的设计

2019-05-31杨广韩震宇王云萍沈臻

山东工业技术 2019年15期

杨广 韩震宇 王云萍 沈臻

摘 要:针对半导体芯片加工生产线,设计出一种基于KNN算法的OCR识别系统,满足了企业自动处理芯片加工批号信息的需求。本文主要介绍了系统通过相机外触发的方式获取原始图像,并进行图像中字符的识别,硬件部分由典型的机器视觉系统构成,主要包括工业相机、镜头、光源、传感器等。软件部分主要阐述了图像预处理模块与字符识别模块的实现,在进行字符识别前,图像预处理模块可以为字符识别提供良好的图像数据来源。经过现场实验表明,系统具有较高的可靠性与稳定性。

关键词:OCR系统;图像预处理;KNN算法

DOI:10.16640/j.cnki.37-1222/t.2019.15.146

1 前言

1.1 背景

OCR是指采用光学的方式,将纸质或图片文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术[1],也就是将图像上的文字转化为计算机可编辑的文字内容。评价一个OCR系统的性能优劣的指标主要包括,识别准确率,识别速度,用户界面的友好性,识别的稳定性,易用性等,其中,识别的准确率是OCR系统最重要的指标。到20世纪90年代以后,随着我国信息自动化和办公自动化的普及,大大推动了OCR技术的进一步发展,随着对OCR技术的研究更为深入,OCR的识别率,识别速度等都已经逐渐可以满足广大用户的需求。

1.2 设计需求

针对某实际半导体的生产线,设计一套识别芯片料盒的OCR系统。整个生产线分为上料和下料两个工位,芯片料盒上标注着此次需要加工的芯片批号的索码号,在上料工位上,原有的方式是通过人工记录芯片料盒上的编号,并通过这个编号来找到芯片的批号,将批号上传至控制中心,告知当前正在加工的芯片批号。在下料工位人工再次上传芯片的批号,告知当前批号芯片加工完成。这种人工记录的方式无法满足企业的自动化要求,并且在人工记录,查询芯片批号,以及上传产品批号的过程中均容易出现错误,这样给企业的管理带来了一定的不便,严重影响生产的效率。

根据企业的需求,将人工记录改为计算机自动化处理,在上料工位通过OCR系统对索码号的自动识别,获取到索码号信息,并传递给企业内部数据库,通过企业提供的接口,自动获取到芯片批号,并通知终端控制室此芯片批号正在加工。在下料工位上,再次对芯片料盒进行一次识别,再次获取到索码号信息后,传递到数据库中,此时会将索码号与芯片批号解除绑定,表示这批芯片加工完成。

2 系统设计

2.1 系统的硬件设计

本系统的硬件部分包括工业相机,镜头,光源,光电传感器。通过相机对芯片料盒的字符拍照,经过字符识别算法处理,最终获得芯片的索码号。系统采用GigE接口的工业相机,LED的光源。芯片料盒用机械手放在生产线上,在机械手放置料盒的固定位置加装一个光电传感器,以此来触发相机进行拍照获取到图像,并最终通过软件识别出索码号信息。

2.2 系统软件的整体设计

整个软件系统运行在芯片加工的生产线上,需要与企业内部以及现场硬件(主要包括相机,传感器)进行交互,最终通过字符识别后,完成系统的功能,实现系统整体的协调运行。

系统的主要功能就是通过相机对芯片料盒进行拍照,通过软件处理之后,获得芯片生产批号的索码号,并传递给企业内部的数据库。整个系统主要的开发平台为vs2010+openCV库,系统的流程图如图1所示:

2.3 系统中重要模块的实现

系统的重要模块包括图像预处理模块和字符识别模块。

在软件部分的处理中,原始输入数据为通过工业相机拍到的图片,由于系统的运行环境是在生产现场,所以对于获得的图片会有各种各样的噪声影响,所以在进行正式地识别之前,必须要进行图像的预处理,以消除在识别前的噪声干扰,提高识别的准确率以及系统的稳定性。系统的最核心部分就是字符识别的算法,这是成功获得芯片批号的前提,所以对于料盒索码号的准确识别是关键。接下来将对这两个模块分别进行介绍。

2.3.1 图像预处理模块设计

在图像处理中,图像的质量直接影响后续图像的分析,它的主要目的就是消除图像中无关的信息,恢复其有用的真实信息,增强有关信息的可检测性,在最大程度上简化数据,从而提高特征提取,匹配以及识别的可靠性。工业现场的光线变化、噪声等干扰会给字符识别造成较大的影响。为了有效地保证字符的识别率、识别系统的可靠性和稳定性,字符識别的预处理部分就显得至关重要[2]。

系统的原输入图像见图2。

在图像预处理中,首先需要在相机拍到的图片中提取出字符所在的区域,即是进行图像处理的ROI区域的选取,同时我们为了减少图像处理的数据量,对ROI区域图像进行灰度化。得到灰度图像之后,为了方便对字符特征的提取,需要将区域内的字符图像统一到相等的大小,即进行图像的归一化操作。此时得到的图像如图3所示:

平滑处理是一种简单且使用频率很高的图像处理方法,消除图像中的噪声成分叫作图像的平滑化或滤波操作。均值滤波,是最简单的一种滤波操作,输出图像的每一个像素是核窗口内输入图像对应像素的平均值[3]。图像经过均值滤波后的图像如图4所示:

图像的阈值操作是最简单的图像分割,对图像进行二值化后,可以进一步降低数据的计算量,增加识别的效率。通过调用openCV里阈值操作函数对其进行二值化,由于图像受到光照强度,阴影等因素的影响,其中二值化的阈值参数的确定需要通过现场试验获得,二值化后的图像如图5所示:

通过均值滤波之后的二值图像,还存在着一定的离散的干扰点,为了准确地识别出字符,需要先去除这些孤立干扰点的影响。

在形态学操作中,腐蚀可以将图像中面积较小的区域消除,而膨胀可以连接间距较小的区域,在膨胀和腐蚀后,目标区域的面积变化比较大。为了让目标区域的面积变化较小,定义了开运算和闭运算。开运算是用形态学运算的内核对图像进行腐蚀后,再用相同的内核对图像进行膨胀。闭运算是用形态学运算的内核对图像进行膨胀后,再用相同的内核对图像进行腐蚀。开运算的作用与腐蚀的作用类似,闭运算的作用与膨胀类似。

运用开运算对干扰点区域进行处理的效果图如图6所示,从图中可以看出,运用开运算可以较好地去除孤立的干扰点。

综上,图像预处理步骤如下:(1)提取ROI区域;(2)灰度化,归一化;(3)均值滤波;(4)二值化;(5)开运算。

2.3.2 KNN算法

KNN算法,即KNN近邻分类法,是一种基本的分类和回归方法。这个算法通过先存储训练样本,然后通过分析新输入的样本周围K最近邻从而给出该样本所属的类别,所以这种算法就是基于样本的学习算法。核心思路就是,输入一个样本,从训练样本中找出K个与其最相近的样本,然后计算这些样本中相应类别的数量,数量最多的类别就定为该样本的类别。

K近邻分类法的具体实现过程如下:(1)计算已知类别数据集中每个样本与当前输入样本的距离。(2)统计与当前输入样本距离最近的K个点。(3)统计这K个点中每个样本出现的频率。(4)选取出现频率最高的样本类别返回作为当前输入样本的类别。

2.3.3 字符识别关键模块设计

在字符的识别过程中,先输入在图像预处理阶段已经生成的图像,然后利用openCV中提供的findContours函数寻找出整张图的轮廓数据,由于还可能存在图像非识别区域轮廓的干扰,所以应该对其孤立干扰区域轮廓进行去除,经过分析可以得到,要识别的字符所具有的轮廓相对于孤立干扰区域的轮廓面积大很多,所以可以设置出一个轮廓面积临界值来滤除掉干扰区域。

由于在实际地识别中,并不是对单个字符的识别,而是一行字符的识别,所以在识别之前,要先对一行字符进行相应的分割,变成一个一个字符,然后再对一个一个字符进行识别。对字符的单个分割可以采用对轮廓的外接矩形来实现。用轮廓的外接矩形来将字符分割开,并对其进行分别识别。

对于KNN算法的实现主要借助openCV提供的Knearest类,先输入训练样本进行学习,分别生成相应的训练样本数据文件与标签数据文件,通过train函数将训练样本数据与标签数据建立对应关系,再通过find_nearest函数输入需要识别的样本,通过寻找K近邻的方法确定当前输入样本的类别,即为输出结果。识别结果如图7所示,其中上料盒信息即为芯片的索码号。

3 实验结果及分析

系统设计完成后,通过在生产现场搭建好硬件环境,调试运行本系统。调试时,需要先对其需要识别的字符进行样本的学习,生成相应的KNN算法需要的训练文件,其格式为XML。同时,由于环境的影响,需要预先将图像处理中二值化的阈值作为系统参数传入,直接運行系统,识别可靠性与稳定性很好,对于识别有误差的字符,需要再次扩大样本学习的容量,实验证明,可以准确识别。

4 结束语

系统基于KNN算法,设计出了针对工业现场的OCR系统,经过现场实验,系统的识别结果准确,运行稳定,为生产过程中的管理控制,以及自动化提供了可靠的解决方案。

参考文献:

[1]肖坚.基于学习的OCR字符识别[J].计算机时代,2018,13(07):48-49.

[2]李杜,白瑞林,高保平,温振市.工业字符识别中实用的预处理技术[J].江南大学学报(自然科学版),2011,10(01):16-17.

[3]毛星云,冷雪飞等.openCV3编程入门[M].北京:电子工业出版社,2015:154-157.

作者简介:杨广(1995-),男,四川达州人,硕士研究生在读,主要从事测量与控制方向的研究。