張永付++張鵬
摘要:針對目前硬幣識別系統使用成本高、硬件要求高等問題,設計了一種識別率高、成本低的硬幣識別系統。系統通過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