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