0 引言
伴隨著現在日益高性能的計算機硬件和完善的理論技術,機器視覺技術已開始得到廣泛的應用。結合機器視覺技術的智能機器人在現今人工智能趨勢下扮演一個重要角色,在智能制造推進、智慧城市建設、家居生活質量提高等方面,都有廣闊的施展空間[1]。
1 整體設計思路及方案
本設計將能勝任機器視覺處理能力的計算機與單片機作主控的機器人相結合,通過無線通信方式構建一個相比其他低成本機器人具備更高自主性和智能性的機器人模型,目的在于:(1)對比評估主流手寫數字識別模型的實際識別表現;(2)探究低成本機器人實現更高智能性的方法[2]。
本設計結合現今熱門的機器視覺技術以及Arduino單片機實現了一個能夠通過上位機識別手寫數字并發送至下位機進行執行的機器人模型,當上位機得到待識別的圖片后,將進行圖片的處理轉化為數據并輸入已經在前期構建好的識別模型,計算后輸出識別的內容并通過無線通信發送到下位機,下位機根據接收到的識別信號執行相應動作。
本設計總體可分為上位機識別與下位機執行部分。上位機識別部分包含前期輸入信號的處理、手寫字符的識別模型構建、與下位機通信構建等部分;下位機執行部分采用Arduino單片機結合各類電子元器件和電路模塊實現了所期望的執行內容,包括電源供電設計、表盤指示器電路設計、人機交互顯示設計以及無線通信設計[3]。
1.1 下位機硬件設計方案
該下位機硬件使用Arduino單片機作為主控,并結合步進電機以及步進電機驅動模塊構成了指針數字指示盤,OLED與單片機相連構成人機交互顯示界面,NRF2401L無線串口模塊與上位機進行通信,使用LM2596穩壓模塊輸出9 V電源為Arduino單片機供電,并且由單片機供電給各個執行模塊。采用1.3寸OLED顯示屏作為顯示器,輸出經過上位機識別后發送至下位機的信號,采用SSD1306作為驅動的OLED顯示屏顯示出數字[4]。
采用步進電機作為儀表盤指示器執行部件,其需要相應電機驅動模塊進行驅動。設計儀表指示器需要對步進電機進行正轉、反轉控制,從而造成指針的順時針旋轉和逆時針旋轉,以便能夠使其根據輸入的識別信號轉動相應角度(有對應的正向角度和負角度)。電機接收到單片機輸出的特定脈沖時,步進角(步進電機每前進一個步序所轉過的角度)便會進行相應的轉動,當電機接收一個脈沖信號就會轉過一個步進角,二者呈相互的線性關系。通過此線性關系,再根據原有角度與現在應該轉動角度做差值計算,求出相差角度,控制電機轉動相應角度,便可以實現電機的儀表指示功能。
1.2 數據收集以及上位機識別模型
上位機部分主要負責手寫圖片的識別,其流程包括手寫數字圖像預處理、識別模型訓練、識別模型驗證和測試等。選擇MNIST手寫庫作為模型的數據,并給出了將MNIST數據庫進行圖像處理的方法,通過比對SVM、BP神經網絡、KNN三種識別模型的發展歷程、數學原理以及算法步驟等,最終選用BP神經網絡識別模型。
1.3 BP神經網絡的手寫數字識別模型及驗證
BP神經網絡是神經網絡的一種,目前大多數神經網絡模型都是由BP神經網絡擴展而來。對于本設計所需手寫數字識別這一應用來說,神經網絡主要用于關于數字0到數字9的分類問題。BP神經網絡算法又稱為反向傳播算法,其連接神經元的權值訓練從最末層(即網絡的輸出層)開始,從輸出到輸入依次更新每一層的權值,所以被稱為反向傳播。
BP神經網絡的學習算法采用方法為δ學習規則(步長最優化),目標函數為:
式中:Yk表示真實的值,即期望值,是真實圖片中所代表數字,k為樣本編號;Tk為預測值,即經過模型所計算出來的值;E為真實值與預測值得平方誤差求和。整個式子的目標便是使平方誤差和最小。
其算法過程的流程描述如圖1所示。
BP神經網絡由于只應用了均分誤差函數對權值和閾值的一階導數(即梯度)的信息,在實際程序中該算法存在收斂速度慢從而計算時間長、容易陷入局部最小(忽略了全局最優解導致不能正確求解)等問題。在實際的應用中,應注意這些問題的解決,可以與LM神經網絡、RBF神經網絡等結合使用來解決[5]。
2 使用CV2庫進行圖像預處理
在設計中使用OpenCV庫的擴展庫CV2庫對圖片進行了圖像預處理,過程主要包括手寫數字圖像的歸一化以及二值化數據形式,并保存為逗號分隔符的csv文件。
圖像處理時間如表1所示,T1時間為轉化訓練集圖片所用時間,用時352 s;T2時間為轉化測試集圖片所用時間,用時55 s。
2.1 PCA降維操作
本設計使用Python的sklearn庫中的PCA方法,輸入原始數據集,即可完成PCA降維操作,其降維結果如表2所示。
在經過PCA(主成分分析法)降維操作去除影響較小的變量影響后,得到了59 989行、67列的X_pca數據集,手寫數字圖片數量不變,但維數從784列縮小為67列,從而有效地減輕了支持向量機、神經網絡以及KNN模型的計算過程。在后續的模型訓練以及模型識別準確度評估中,也同樣使用了PCA操作對數據簡化計算量[6]。
2.2 模型比較以及上位機識別模型的選取
本測試模型中,經過轉化的訓練集數據大小1.09 GB(59 989張圖片轉化完成的數據),測試集數據大小為186 MB(9989張圖片轉化完成的數據),經過PCA降維操作后,測試集數據大小為97.7 MB(由原來的864列數據降維為67列數據),訓練集數據大小為16.2 MB。模型數據采用PCA降維操作后的數據[7]。
從表3中可知,3種模型中,SVM(支持向量機)模型識別的準確度最高,但訓練時間比其他兩個模型稍長。BP神經網絡模型最小,訓練時間比SVM(支持向量機)稍短,測試時間用時也最短,明顯短于其他兩個模型,說明識別速度是最快的。KNN(K近鄰)模型訓練時間雖然最短,但從測試時間來看用時最長,測試近10 000個數據的時間比其他兩個模型訓練近60 000個數據的時間還長了兩倍多,模型識別速度最慢。準確率上來看,小數據量時準確率只有百分之五六十,只有大數據體量下準確率才有明顯提升,與SVM(支持向量機)和BP神經網絡相比,在手寫數字識別方面遜色很多。
對上面3個模型根據識別時間、準確率進行比較評估后,決定以準確率優先,次而考慮識別時間,最終決定使用SVM(支持向量機)作為本設計的手寫識別模型[8]。
3 手寫筆跡圖像識別機器人整體設計
在整體設計中,首先選擇NRF2401L無線通信模塊完成了通信硬件的搭建,并根據其配置表進行命令配置完成了硬件的初始化。上位機方面,使用Python結合win32u庫和serial庫完成上位機讀取識別程序的設計。下位機方面,使用串口結合下位機處理硬件完成數字接收處理的設計。整個系統構成一套上位機對手寫圖像進行識別,通過無線發送至下位機處理的手寫筆跡圖像識別機器人。
4 結論
通過本設計與研究,取得的主要結果如下:
(1)選擇了MNIST手寫數字圖片庫作為手寫識別模型的原始數據,設計實際情況完成了MNIST庫圖像的處理和轉化,從而得到了原始的訓練數據集和測試數據集。
(2)分別對SVM(支持向量機),BP神經網絡,KNN(K近鄰)3種分類模型進行了對比,并使用Python分別對3種模型進行了構建和測試。通過3個模型的訓練時間、測試時間以及準確度等指標,比較了3個模型的優劣性,最終以準確率優先原則選取準確度最高的SVM(支持向量機)作為手寫數字識別模型并進行應用。
(3)使用NRF2401L無線通信模塊和串口功能構建了上位機和下位機之間無線通信,完成了二者的對接,將單片機在電子硬件方面的處理和計算機對手寫圖片的識別進行了結合[9]。
(4)實現了Python設計上位機應用程序,功能包括圖像讀取、圖像預處理以及轉化、圖像識別、串口發送、異常處理等。完成了整個上位機的功能,構成了一套上位機手寫圖像識別,完成了整個設計。
-
機器人
+關注
關注
211文章
28632瀏覽量
208015 -
機器視覺
+關注
關注
162文章
4405瀏覽量
120579 -
Arduino
+關注
關注
188文章
6477瀏覽量
187611
發布評論請先 登錄
相關推薦
評論