基于Python的硬币识别系统设计与实现

2017-11-02 20:05张永付张鹏
软件导刊 2017年10期

张永付++张鹏

摘要:针对目前硬币识别系统使用成本高、硬件要求高等问题,设计了一种识别率高、成本低的硬币识别系统。系统通过Python与OpenCV结合数字图像处理技术对1元、5角、1角三种硬币进行识别。首先通过颜色通道转换法实现5角硬币识别,然后经过高斯去噪、二值化、自适应二值化、均值滤波对原始图像进行处理,将处理后的图像通过提取1角与1元硬币边缘轮廓的周长作为分类特征,利用机器学习方法,对两种硬币15张图像进行训练、5张图像进行测试。结果表明,系统对5角硬币识别准确率高达100%,对1元与1角硬币识别率达到80%。经测试证明,该系统既保持了高效的识别率,又减少了硬件依赖,有一定的实际应用价值。

关键词:硬币识别;Python;OpenCV

DOIDOI:10.11907/rjdk.171783

中图分类号:TP319文献标识码:A文章编号:16727800(2017)010012903

0引言

硬币在生活中应用非常广泛,硬币识别大致分为面值识别与真假鉴别。在硬币清分机、公交车及自动售货机的设计与实现中,通过获取硬币图像对面值进行识别是研究的关键问题。

目前国内采用的硬币面值识别法有图像法及电涡流传感器法等[12]。传统的硬币识别主要是机械识别,由于选取特征过程的影响,很难保证识别准确率。美国Mahesh等[3]设计了一个带旋盘的结构,通过光探测器检测与计算机编码器的编码脉冲识别硬币。付丽等[4]设计了一种基于光电开关的硬币识别系统,大幅度提高了识别准确率。莫磊[5]针对硬币准确识别与伪币检测,利用EDA技术、电子信息技术、计算机技术、传感器技术、智能控制技术等对硬币识别进行了研究,通过改善传统电涡流分析法,加入一定算法研究达到了提高识别率的效果。刘艺柱[6]通过分析电涡流传感器的基本原理,提出了利用双路电涡流传感器对硬币材质、厚度等参数进行检测的思路,硬币识别检测率改善效果明显,相比付丽等人的方法技术更加前沿,准确高效。这些方法识别率高,但设计复杂,严重依赖硬件组件、成本较高。人工智能的发展,使得通过图像技术进行物体识别发展迅速[7]。本系統通过利用数字图像处理技术对图像进行预处理,使得提取图像的特征变得简单,准确率得到有效提高。Python是一种面向对象的解释型计算机程序设计语言,具有丰富与强大的库,已经成为继JAVA-C++之后的第三大语言[8]。由于Opencv内置强大的数字图像处理函数,系统设计过程利用软件编程思想减少了对硬件的依赖,做到成本低、识别率高、复杂性低。并且通过机器学习思想,对1元与1角硬币分别选用15张处理后的图像进行训练,5张进行测试,检测结果表明该系统识别准确率高、稳定性好。

1系统设计

1.1系统总体框架

图1为系统框架,系统功能分为5个部分:图像采集、颜色通道转换、图像预处理、特征提取、训练测试。

1.2硬币识别工作流程

先进行图像采集,通过读取图像进行颜色通道转换,实现5角硬币识别,再对1元与5角硬币图像进行预处理;接下来进行特征提取,提取轮廓周长信息;提取15张图像进行训练,最后给定图像进行测试。系统流程如图2所示。

2功能设计与实现

2.1图像采集

首先,在简单环境拍摄得到原始图像。简单环境是指:拍摄镜头距离桌面背景15cm正上方,桌面背景为黑色,室内环境,选择最佳聚焦效果进行拍摄。既保证图像质量,又为系统识别硬币的准确率奠定基础(见表1)。

2.2颜色通道转换

由于颜色提取过程中RGB模型易受到光照影响,因此将图像由RGB转换到HSV颜色空间模型,更易提取颜色特征。系统绘制了3种硬币的颜色空间直方图(见图3-图5,彩图见封二),王洪建等[911]研究得出H与S分量包含了图像的彩色信息,本系统采用该思想抽取H与S分量特征值,识别出5角硬币。

图3-图5中蓝色与绿色分别代表了H与S分量。可以得出5角硬币在H与S明显区别于其它硬币,因而通过颜色空间转换方法可以对5角硬币进行识别。具体代码如下:

defhist(img):

hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

color=('b','g','r')

fori,col in enumerate(color):

hist=cv2.calcHist([hsv],[i],None,[256],[0,256])

plt.plot(hist)

plt.xlim([0,256])

plt.show()

2.3图像预处理

从图3与图5可以看出,由于1角硬币与1元硬币在HSV颜色曲线的H分量上相似较大,因而无法进行识别,需要利用数字图像处理技术进行进一步识别。首先针对原始图像进行处理(见图6),经过高斯去噪、二值化、自适应二值化、均值滤波处理方法,得到完整的边缘轮廓(见图7、图8)。

2.4特征提取

从图6-图7可以清楚看到要提取的特征轮廓,利用OpenCV自带findContours函数寻找轮廓,该函数的第二个返回值是一个 Python列表,存储了图像的所有轮廓。再调用Perimeter=cv.2arcLength(cnt,true)方法计算闭合圆形轮廓周长,得到1角、1元周长分别是364mm、468mm。代码如下:

defbianyuan(img):

equ=cv2.GaussianBlur(img,(5,5),0)

ret,thresh1=cv2.threshold(equ,130,255,cv2.THRESH_BINARY)endprint

th3=cv2.adaptiveThreshold(thresh1,255,cv2.ADAPTIVE_THRESH_MEAN_C,\

cv2.THRESH_BINARY,7,2)

median = cv2.medianBlur(th3, 3)

plt.subplot(4,1,1),plt.imshow(img,cmap = 'gray')

plt.subplot(4,1,2),plt.imshow(th3,cmap = 'gray')

plt.subplot(4,1,3),plt.imshow(median,cmap='gray')

plt.show()

returnmedian.copy()

2.5训练测试

为了保证1角与1元硬币识别的准确性与稳定性,将原始图像经过旋转不同角度,得到15张图像。这15张图像作为训练数据集,通过同样的方法计算得到轮廓周长并存储在数组中。训练过程得到了所有图像的周长信息,运用训练好的模型对给定任意一张1角或1元硬币进行测试。系统计算出该图像的轮廓周长,通过传递参数判断该周长属于1角或1元模型中的哪类,给出判断结果。系统随机选取了5张图片进行测试,从测试结果得出准确率达到80%。1张失败的原因是硬币边缘磨损,图像处理后没有形成闭合区域轮廓。具体代码如下:

deffindPlateNumberRegion(img):

contours,hierarchy = cv2.findContours(img,1, 2)

cnt=contours[0]

perimeter = cv2.arcLength(cnt,True)

return round(perimeter)

def test(result):

print ('testRating:'result)

def main():

record=[]

fori in range(15):

img=image_read()

img=bianyuan(img)

a=findPlateNumberRegion(img)

test(a)

record.append(a)

print record

3系統测试

系统测试的目的主要是确保系统运行稳定,能够满足实际需求。并且对三种类型硬币有稳定、高效的识别率。经过对15张图像训练,5张进行测试,测试结果如表2所示。

3结语

本文基于Python的硬币识别系统设计与实现,详细给出了该系统的结构图、功能流程图及各个功能实现的核心代码。通过Python语言与OpenCV强大的函数库及语言优势,利用数字图像处理技术与机器学习思路完成本系统开发工作。阐述了系统中使用的关键技术,包括图像处理技术与对象识别技术,实现了硬币面值识别。机器视觉发展为本系统设计奠定了一定基础,将此运用于解决生活中常见问题,是互联网时代背景下的流行趋势。

参考文献参考文献:

[1]毕晓君,孙晓霞.基于蚁群算法的硬币识别研究[J].哈尔滨工程大学学报,2006,27(6):882885.

[2]傅霖来.基于机器视觉下的硬币识别系统[D].天津:天津大学,2009.

[3]L CHUGANI MAHESH, R SAMANT ABHAG, MICHAEL CERRA. LabVIEW signal processing[M]. Upper Saddle Rive:Prentice Hall PTR,1998.

[4]付丽.基于光电开关的硬币面值识别系统[D].西安:西安电子科技大学,2014.

[5]莫磊.基于FPGA的硬币识别器的研究[D].成都:电子科技大学,2008.

[6]刘艺柱.高准确率硬币识别装置的设计与实现[D].南京:南京理工大学,2013.

[7]王阳萍,杜晓刚,赵庶旭,等.医学影像图像处理[M].北京:清华大学出版社,2012.

[8]潘俊勇.易度PaaS云平台开发技术内幕[C].上海:中国PyConChina2011大会,2011.

[9]王洪建.基于HSV颜色空间的一种车牌识别定位和分割方法[J].仪器仪表学报,2005(8):2628.

[10]郭捷,施鹏飞.基于颜色和纹理分析的车牌定位方法[J].中国图像图形学报,2002,7A(5):472 475.

[11]张引,潘云鹤.彩色汽车图像牌照定位新方法[J].中国图像图形学报,2002,7A(5):374377.

责任编辑(责任编辑:何丽)endprint