基于机器视觉的电子秤数码管字符识别系统

2021-03-25 02:09李荣远彭思慧梁慧莹苏崇星
软件导刊 2021年3期
关键词:字符识别电子秤数码管

李荣远,彭思慧,梁慧莹,苏崇星,李 剑

(玉林师范学院计算机科学与工程学院,广西玉林 537000)

0 引言

目前,相关检测部门主要通过两种方式完成产品质量检测,一是工作人员到现场检验,二是客户送检。利用电子秤和砝码检测,其流程是根据产品情况多次放置砝码重复实验,人工纸质记录数据,然后计算数据,将最终计算结果录入系统,并出具检验报告。此过程记录数显仪器结果需大量人工统计、计算和录入,时效性低,且有多种数显仪器难以识别。鉴于此,本文基于电子秤数码管,采用机器视觉识别技术,设计一种电子秤数码管字符识别系统。

电子秤数码管主要由7 段发光LED 组成,每段之间相对断开,采用现有库较难识别。并且,数码管及小数点类型多样,无统一识别技术。目前,文献[1]对一种工厂数码管加以识别,其识别对象单一,数码管中数字字符与小数点隔离明显,较易分割;文献[2]提出LED 文本检测与识别方法;文献[3]采用常用穿线法识别电子数码管,识别准确率不高,其中小数点识别效果较差;文献[4]—文献[5]使用开源Tesseract-ocr 识别技术,该技术能识别多种光学字符,先使用jTessBoxEditor 训练数据模型,但将数码管图像导入box 文件编辑时,大部分图像不能显示,处理结果显示为空页面(Empty Page),该模型对图像预处理有较高要求,但数码管图像受预处理影响较大。Tesseract-ocr 一般对规则简体中文、阿拉伯数字及英文识别率较高,对数码管识别效果几乎不理想。一种新的数码管识别算法(穿线法)识别对象相对单一,识别不规则字符时需予以调整,识别效果差[6-8]。文献[9]采用投影法对小数点进行识别,但数码管小数点位置多样,投影法不适合电子秤数码管识别;文献[10]提出一种识别小数点的思路,效果良好;文献[11]采用卷积神经网络识别数码仪表,其中小数点识别采用MOSSE 算法,该方法只在小数点切割开的情况下有效。鉴于此,本文基于机器视觉技术设计一种电子秤数码管字符识别系统,该系统简单、实用,能够识别多种电子秤数码管,准确率和效率较高。其中,由于小数点字符类型多样,最终通过采集多类型样本进行训练及参数调优,达到理想效果。实验结果表明,在一定条件下,数码管识别率高达99% 左右,时效性较高,平均0.3s 左右,符合实际需求。

1 系统整体流程

系统整体流程如图1 所示。首先,客户端使用摄像头采集电子秤数码管图像,以Base64 压缩编码上传服务器端,并对服务器端Base64 编码进行解码;然后,完成图像预处理、字符分割、KNN 识别;最后,将识别结果异步返回客户端,若个别识别出错,经校准无误后提交后台MySQL 数据库存储计算,以辅助人工较快出具检测报告。

(1)摄像头图像采集。采用兼容多种操作系统免驱摄像头作为识别工具,通过浏览器方式采集不同电子秤数码管显示区域,可通过边缘检测方法找到数码管区域,但现实场景复杂,干扰因素较多,导致边缘检测失效。为提高系统使用率及识别率,客户可以根据手动定位数码管区域,一次定位,多次切割,最终采集到数码管区域。

(2)Base64 编码上传服务器。为提高客户体验度及上传速度,将图片以Base64 编码格式压缩,采用键值对方式以Json 格式通过Ajax 异步上传到服务器。

Fig.1 System overall flow图1 系统整体流程

(3)服务器Base64 编码解码。当用户现场提交经Base64 编码后的图片,服务器端对Json 对象Base64 编码进行解码并生成图片[9-10]。

(4)图像预处理。将背景与目标区域分离,去除图片背景及干扰因素,保留数码管目标区域。

(5)目标区域分割。通过分割技术将每个字符进行切割,直至达到目标字符。

(6)模型训练。将切割的单个数字字符(0-9),共10个字符分包保存,采用KNN 算法进行模型训练,得到最终训练模型。其中,第一次采集需进行模型训练,之后直接使用已有训练模型,无需再次训练。

(7)模型分类。将目标切割成单个字符逐一输入模型进行识别,通过列表存储方式,存储识别结果。

(8)客户端显示。将识别结果通过后端异步请求渲染,前端浏览器显示最终结果。

2 图像处理

电子秤数码管字符识别中,图片预处理是识别准确率的关键。首先对输入图像进行预处理,将颜色转化为灰度,然后对图像进行分割,提取出矩形区域。由于电子秤数码管之间不连续,需要将字符膨胀连接形成完整单个字符,逐一切割成单个字符,最终采用字符识别技术识别出最终结果。

2.1 图像采集

将客户端采集的图片上传至服务器相应位置,为了节省服务器空间,只保留当前一段时间内的图片。为提高识别率和系统使用率,客户端采用固定区域裁剪方式采集图像,也可采用边缘检测方式得到目标区域,采集图像如图2所示。

Fig.2 Original captured image图2 原始图像采集

2.2 图像预处理

电子秤数码管由发光二极管(LED)灯矩阵组合而成,与一般文本不同,由于其不连续性、类型多样,较难识别[11]。图像预处理能精确查找目标区域,不同类型数码管处理方式不同,主要有以下方法。

2.2.1 背景区域判断

根据输入图像可知,目标区域与背景差别较大,主要分为两种:一种以黑色为背景,目标区域与背景色差大,主要以红色、绿色等较显眼颜色为主;另一种目标区域主要以黑色为主,根据图像左上角背景平均色差即可判断。针对不同图像应采用不同的处理技术,取图像左上角三通道(RGB)4 核大小的平均值,采用式(1),根据top_left_vag 均值临界值(125)采用不同处理技术。

2.2.2 图像过滤

观察图像发现,如果电子数显背景为黑色,先凸显目标区域对后期识别效果更佳。对背景区域进行过滤,使目标区域凸显,使用固定阈值(thresh)过滤,其中实验thresh设置为180,采用式(2)加以实现。如果小于阈值,将值设为0,最终背景色变为黑色,目标区域凸显,如图3 所示。

Fig.3 Threshold filtering图3 阈值过滤

2.2.3 图像空间转换

颜色空间转换可将RGB 三通道向HSV、HIS 等色彩空间转换。本文将图像转换为灰度图,原图像由三通道变为二通道,如图4(a)所示,再经阈值变化,将目标区域设置为白色,如图4(b)所示。

Fig.4 Space conversion图4 空间转换

2.2.4 高斯滤波

部分图片经二值化处理后,需通过高斯滤波消除噪声,有利于提高识别率[10],高斯滤波处理效果如图5 所示。

Fig.5 Gaussian filtering图5 高斯滤波

2.2.5 自适应阈值算法

部分图像易受光照等因素影响,使用自适应阈值算法,采用高斯核函数得到目标区域,如图6 所示。

Fig.6 Adaptive threshold filtering图6 自适应阈值过滤

2.2.6 形态学运算

开运算:先对图像进行形态学腐蚀,再进行形态学膨胀。

腐蚀:有些目标区域中有部分噪点,需进行腐蚀操作,去除干扰区域。

膨胀:由于腐蚀去除噪点,目标区域相对变小,需对其进行膨胀操作,观察电子秤数码管“0”,“1”发现,其中间断开部分较大,字符呈瘦高状态,不能采用一般圆形、矩形核,需重新自定义,如式(3)所示。

膨胀结果如图7 所示。

Fig.7 Dilate图7 膨胀

3 小数点识别

图像中小数点字符较难识别,每种数码管小数点位置显示不同,一般有以下几种情况,如图8 所示。图8(a)中小数点连接数字字符且在右下角;图8(b)位于数字字符右下角,与数字字符下水平位置相同,经过处理后部分小数点与数字字符分开,部分与数字字符连接;图8(c)位于数字字符右下角,位置超过数字右下水平位置;图8(d)位于数字字符右下角靠上几个像素处;图8(e)位置远离数字字符,利用切割技术可以将其分开。

Fig.8 Number character with decimal point图8 带小数点数字字符

(1)查找数字字符。根据矩形尺寸及宽高比找出潜在数字字符,如果轮廓较小且宽高比不符合数字字符特征,则剔除干扰区域。一般数码管数字字符宽度小于高度,其中数字字符“1”宽高比及面积变化不同其它数字字符,需单独处理。

(2)确定数字字符位置。根据矩形轮廓坐标位置,从上到下、从左往右,逐一确定数字字符所在位置。

(3)查找小数点字符。如果矩形面积小且宽高比符合预设范围,即查找到小数点字符。如果所有矩形边界,没有小数点字符,说明图像预处理过程中小数点与字符拼接,如图9 所示,或者原始图像已拼接,需作下一步处理。

Fig.9 Contrast of decimal point characters and no decimal point characters图9 带小数点字符与无小数点字符对比

(4)确定小数点字符位置。如果经过上述步骤没有找到小数点,需进一步查找小数点字符。根据图9 中的小数点位置发现,字符切割后的轮廓有如下特点:①字符宽度明显比不带小数点字符宽;②右下角与不带小数点字符对比,明显突出部分白色目标区域;③带小数点数字字符右下角上及右中下部分明显是黑色背景。

根据上述3 个特点,可以找出带小数点数字字符,从而确定小数点位置,当前数字字符位置加1 个像素宽度,跳出查找循环,因整个字符只有1 个小数点,找到小数点即可跳出循环,从而提高系统运行效率。

4 KNN 数字字符识别

K 最近邻(K-Nearest Neighbors,KNN)[11]在机器学习领域简单高效,在分类算法中应用广泛。本文将经过预处理二值图像分割为0-9 共10 个字符,部分数据作为训练集,第一次需训练模型,之后直接调用训练模型进行字符识别。如果出现新的不同类型字符,则重新训练模型,以达到较好识别结果。字符识别整体流程如图10 所示。

Fig.10 Character recognition flow图10 字符识别流程

5 实验结果

硬件平台:检测局各种电子秤、720pUSB 摄像头、摄像头支架、笔记本电脑。

软件平台:Windows10(Intel i7-8750H、内存8GB、64位),PyCharm、Python3.6.4。

架构:采用CS(Client/Server)架构。

浏览器端通过Video 逐帧读取,以画布形式展示,画出目标区域,框定一次,多次使用。

框架及技术:Python-Flask+HTML+css+js(jQuery)+ajax+MySQL。

目前,电子秤主要来源是检测局现有的电子秤及部分客户现场电子秤,摄像头兼容各种操作系统。为符合实际需求,采用CS 架构设计识别系统。由于Python 的Django框架过于承重,缺乏灵活性,采用Python 的轻量级Flask 框架[12],模板引擎使用Jinja2。可通过安装第三方库进行扩展,相对灵活。Flask-SQLAlchemy 操作MySQL 第三方库,对大型项目易于扩展。jQuery 和Ajax 异步处理,可提高用户体验度。

图像识别结果如图11 所示,仅展示现场摄像头采集部分图片。在检测物体时将环境条件,如温度、光照、摄像头角度等控制好,图片识别率可达99%,平均耗时0.3s 左右,符合实际需求。

Fig.11 Image recognition result图11 图像识别结果

开启系统外接摄像头,拍照并展示最终效果,如图12所示。只需第一次画框、拍照,上传识别下方异步列表展示结果,可对其修改、删除,数据上传后台MySQL 自动计算误差,从而达到辅助人工作用,提高检测效率。

Fig.12 Image recognition result图12 图像识别结果

6 结语

本文以实际需求出发,针对检测局人工检测成本高、时效差等弊端,结合数码管形式多样性,提出一种针对多种电子秤数码管及小数点识别方法,并将该识别方法应用于系统设计与开发。该系统主要用于识别大量样品送检是否合格,其摄像头及各精密电子秤相对固定,具有较大实际应用价值。同时,系统识别率较高,只需通过人工不断加放样品,完成大量重复检测即可,能快速辅助人工提高检测效率。实验结果较好,识别准确率高。在研究过程中也发现一些不足,若检测条件变动,实验结果会受影响,如摄像头倾斜较大、光照条件、数码管字符未被检测到等特殊情况下的检测效果如何,需进一步研究。

猜你喜欢
字符识别电子秤数码管
电子秤
Arduino编程
MC9S08FL16单片机数码管静态显示分析
单片机控制的四位数码管动态显示编程
基于Qt的数码管数字编码系统的设计与实现
关于电子秤的设计
一种改进深度学习网络结构的英文字符识别
压死电子秤
仪表字符识别中的图像处理算法研究
基于STM32的高精度电子秤设计