文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.173409
中文引用格式: 王磊,張翠霞. 機器視覺筆跡識別和Arduino控制機器人的設計[J].電子技術應用,2017,43(11):15-17.
英文引用格式: Wang Lei,Zhang Cuixia. Machine vision handwriting recognition and Arduino control robot design[J].Application of Electronic Technique,2017,43(11):15-17.
0 引言
伴隨著現(xiàn)在日益高性能的計算機硬件和完善的理論技術,機器視覺技術已開始得到廣泛的應用。結(jié)合機器視覺技術的智能機器人在現(xiàn)今人工智能趨勢下扮演一個重要角色,在智能制造推進、智慧城市建設、家居生活質(zhì)量提高等方面,都有廣闊的施展空間[1]。
1 整體設計思路及方案
本設計將能勝任機器視覺處理能力的計算機與單片機作主控的機器人相結(jié)合,通過無線通信方式構建一個相比其他低成本機器人具備更高自主性和智能性的機器人模型,目的在于:(1)對比評估主流手寫數(shù)字識別模型的實際識別表現(xiàn);(2)探究低成本機器人實現(xiàn)更高智能性的方法[2]。
本設計結(jié)合現(xiàn)今熱門的機器視覺技術以及Arduino單片機實現(xiàn)了一個能夠通過上位機識別手寫數(shù)字并發(fā)送至下位機進行執(zhí)行的機器人模型,當上位機得到待識別的圖片后,將進行圖片的處理轉(zhuǎn)化為數(shù)據(jù)并輸入已經(jīng)在前期構建好的識別模型,計算后輸出識別的內(nèi)容并通過無線通信發(fā)送到下位機,下位機根據(jù)接收到的識別信號執(zhí)行相應動作。
本設計總體可分為上位機識別與下位機執(zhí)行部分。上位機識別部分包含前期輸入信號的處理、手寫字符的識別模型構建、與下位機通信構建等部分;下位機執(zhí)行部分采用Arduino單片機結(jié)合各類電子元器件和電路模塊實現(xiàn)了所期望的執(zhí)行內(nèi)容,包括電源供電設計、表盤指示器電路設計、人機交互顯示設計以及無線通信設計[3]。
1.1 下位機硬件設計方案
該下位機硬件使用Arduino單片機作為主控,并結(jié)合步進電機以及步進電機驅(qū)動模塊構成了指針數(shù)字指示盤,OLED與單片機相連構成人機交互顯示界面,NRF2401L無線串口模塊與上位機進行通信,使用LM2596穩(wěn)壓模塊輸出9 V電源為Arduino單片機供電,并且由單片機供電給各個執(zhí)行模塊。采用1.3寸OLED顯示屏作為顯示器,輸出經(jīng)過上位機識別后發(fā)送至下位機的信號,采用SSD1306作為驅(qū)動的OLED顯示屏顯示出數(shù)字[4]。
采用步進電機作為儀表盤指示器執(zhí)行部件,其需要相應電機驅(qū)動模塊進行驅(qū)動。設計儀表指示器需要對步進電機進行正轉(zhuǎn)、反轉(zhuǎn)控制,從而造成指針的順時針旋轉(zhuǎn)和逆時針旋轉(zhuǎn),以便能夠使其根據(jù)輸入的識別信號轉(zhuǎn)動相應角度(有對應的正向角度和負角度)。電機接收到單片機輸出的特定脈沖時,步進角(步進電機每前進一個步序所轉(zhuǎn)過的角度)便會進行相應的轉(zhuǎn)動,當電機接收一個脈沖信號就會轉(zhuǎn)過一個步進角,二者呈相互的線性關系。通過此線性關系,再根據(jù)原有角度與現(xiàn)在應該轉(zhuǎn)動角度做差值計算,求出相差角度,控制電機轉(zhuǎn)動相應角度,便可以實現(xiàn)電機的儀表指示功能。
1.2 數(shù)據(jù)收集以及上位機識別模型
上位機部分主要負責手寫圖片的識別,其流程包括手寫數(shù)字圖像預處理、識別模型訓練、識別模型驗證和測試等。選擇MNIST手寫庫作為模型的數(shù)據(jù),并給出了將MNIST數(shù)據(jù)庫進行圖像處理的方法,通過比對SVM、BP神經(jīng)網(wǎng)絡、KNN三種識別模型的發(fā)展歷程、數(shù)學原理以及算法步驟等,最終選用BP神經(jīng)網(wǎng)絡識別模型。
1.3 BP神經(jīng)網(wǎng)絡的手寫數(shù)字識別模型及驗證
BP神經(jīng)網(wǎng)絡是神經(jīng)網(wǎng)絡的一種,目前大多數(shù)神經(jīng)網(wǎng)絡模型都是由BP神經(jīng)網(wǎng)絡擴展而來。對于本設計所需手寫數(shù)字識別這一應用來說,神經(jīng)網(wǎng)絡主要用于關于數(shù)字0到數(shù)字9的分類問題。BP神經(jīng)網(wǎng)絡算法又稱為反向傳播算法,其連接神經(jīng)元的權值訓練從最末層(即網(wǎng)絡的輸出層)開始,從輸出到輸入依次更新每一層的權值,所以被稱為反向傳播。
BP神經(jīng)網(wǎng)絡的學習算法采用方法為δ學習規(guī)則(步長最優(yōu)化),目標函數(shù)為:
式中:Yk表示真實的值,即期望值,是真實圖片中所代表數(shù)字,k為樣本編號;Tk為預測值,即經(jīng)過模型所計算出來的值;E為真實值與預測值得平方誤差求和。整個式子的目標便是使平方誤差和最小。
其算法過程的流程描述如圖1所示。
BP神經(jīng)網(wǎng)絡由于只應用了均分誤差函數(shù)對權值和閾值的一階導數(shù)(即梯度)的信息,在實際程序中該算法存在收斂速度慢從而計算時間長、容易陷入局部最小(忽略了全局最優(yōu)解導致不能正確求解)等問題。在實際的應用中,應注意這些問題的解決,可以與LM神經(jīng)網(wǎng)絡、RBF神經(jīng)網(wǎng)絡等結(jié)合使用來解決[5]。
2 使用CV2庫進行圖像預處理
在設計中使用OpenCV庫的擴展庫CV2庫對圖片進行了圖像預處理,過程主要包括手寫數(shù)字圖像的歸一化以及二值化數(shù)據(jù)形式,并保存為逗號分隔符的csv文件。
圖像處理時間如表1所示,T1時間為轉(zhuǎn)化訓練集圖片所用時間,用時352 s;T2時間為轉(zhuǎn)化測試集圖片所用時間,用時55 s。
2.1 PCA降維操作
本設計使用Python的sklearn庫中的PCA方法,輸入原始數(shù)據(jù)集,即可完成PCA降維操作,其降維結(jié)果如表2所示。
在經(jīng)過PCA(主成分分析法)降維操作去除影響較小的變量影響后,得到了59 989行、67列的X_pca數(shù)據(jù)集,手寫數(shù)字圖片數(shù)量不變,但維數(shù)從784列縮小為67列,從而有效地減輕了支持向量機、神經(jīng)網(wǎng)絡以及KNN模型的計算過程。在后續(xù)的模型訓練以及模型識別準確度評估中,也同樣使用了PCA操作對數(shù)據(jù)簡化計算量[6]。
2.2 模型比較以及上位機識別模型的選取
本測試模型中,經(jīng)過轉(zhuǎn)化的訓練集數(shù)據(jù)大小1.09 GB(59 989張圖片轉(zhuǎn)化完成的數(shù)據(jù)),測試集數(shù)據(jù)大小為186 MB(9989張圖片轉(zhuǎn)化完成的數(shù)據(jù)),經(jīng)過PCA降維操作后,測試集數(shù)據(jù)大小為97.7 MB(由原來的864列數(shù)據(jù)降維為67列數(shù)據(jù)),訓練集數(shù)據(jù)大小為16.2 MB。模型數(shù)據(jù)采用PCA降維操作后的數(shù)據(jù)[7]。
從表3中可知,3種模型中,SVM(支持向量機)模型識別的準確度最高,但訓練時間比其他兩個模型稍長。BP神經(jīng)網(wǎng)絡模型最小,訓練時間比SVM(支持向量機)稍短,測試時間用時也最短,明顯短于其他兩個模型,說明識別速度是最快的。KNN(K近鄰)模型訓練時間雖然最短,但從測試時間來看用時最長,測試近10 000個數(shù)據(jù)的時間比其他兩個模型訓練近60 000個數(shù)據(jù)的時間還長了兩倍多,模型識別速度最慢。準確率上來看,小數(shù)據(jù)量時準確率只有百分之五六十,只有大數(shù)據(jù)體量下準確率才有明顯提升,與SVM(支持向量機)和BP神經(jīng)網(wǎng)絡相比,在手寫數(shù)字識別方面遜色很多。
對上面3個模型根據(jù)識別時間、準確率進行比較評估后,決定以準確率優(yōu)先,次而考慮識別時間,最終決定使用SVM(支持向量機)作為本設計的手寫識別模型[8]。
3 手寫筆跡圖像識別機器人整體設計
在整體設計中,首先選擇NRF2401L無線通信模塊完成了通信硬件的搭建,并根據(jù)其配置表進行命令配置完成了硬件的初始化。上位機方面,使用Python結(jié)合win32u庫和serial庫完成上位機讀取識別程序的設計。下位機方面,使用串口結(jié)合下位機處理硬件完成數(shù)字接收處理的設計。整個系統(tǒng)構成一套上位機對手寫圖像進行識別,通過無線發(fā)送至下位機處理的手寫筆跡圖像識別機器人。
4 結(jié)論
通過本設計與研究,取得的主要結(jié)果如下:
(1)選擇了MNIST手寫數(shù)字圖片庫作為手寫識別模型的原始數(shù)據(jù),設計實際情況完成了MNIST庫圖像的處理和轉(zhuǎn)化,從而得到了原始的訓練數(shù)據(jù)集和測試數(shù)據(jù)集。
(2)分別對SVM(支持向量機),BP神經(jīng)網(wǎng)絡,KNN(K近鄰)3種分類模型進行了對比,并使用Python分別對3種模型進行了構建和測試。通過3個模型的訓練時間、測試時間以及準確度等指標,比較了3個模型的優(yōu)劣性,最終以準確率優(yōu)先原則選取準確度最高的SVM(支持向量機)作為手寫數(shù)字識別模型并進行應用。
(3)使用NRF2401L無線通信模塊和串口功能構建了上位機和下位機之間無線通信,完成了二者的對接,將單片機在電子硬件方面的處理和計算機對手寫圖片的識別進行了結(jié)合[9]。
(4)實現(xiàn)了Python設計上位機應用程序,功能包括圖像讀取、圖像預處理以及轉(zhuǎn)化、圖像識別、串口發(fā)送、異常處理等。完成了整個上位機的功能,構成了一套上位機手寫圖像識別,完成了整個設計。
參考文獻
[1] 周志華.機器學習[M].北京:清華大學出版社,2016.
[2] 麥好.機器學習實踐指南案例應用解析[M].北京:機械工業(yè)出版社,2016.
[3] 夏良正.數(shù)字圖像處理[M].南京:東南大學出版社,1999.
[4] 楊楠.基于Arduino的智能產(chǎn)品設計研究[D].無錫:江南大學,2014.
[5] 宋飛.基于模板匹配算法的字符識別系統(tǒng)研究與實現(xiàn)[D].合肥:合肥學院,2007.
[6] 吳忠,朱國龍,黃葛峰,等.基于圖像識別技術的手寫數(shù)字識別方法[J].計算機技術與發(fā)展,2011,21(12):48-51.
[7] 柳回春,馬樹元,吳平東,等.手寫體數(shù)字識別技術的研究[J].計算機工程,2003(4):24-61.
[8] 徐勛華,王繼成.支持向量機的多類分類方法[J].微電子學與計算機,2004,21(10):149-152.
[9] 劉建明,唐霞,李龍.基于機器學習的VoIP流量在線識別系統(tǒng)[J].電子技術應用,2016,42(8):133-137.
作者信息:
王 磊1,張翠霞2
(1.北京聯(lián)合大學 自動化學院,北京100101;2.北京聯(lián)合大學工科綜合實驗教學示范中心,北京100101)