郭昭烽 謝 玲 莊一帆
(1.光大環(huán)境科技(中國)有限公司,江蘇 南京 211102;2.南京理工大學(xué)紫金學(xué)院,江蘇 南京 210046)
目前我國的盲人總?cè)藬?shù)約占世界的五分之一,是世界上擁有最多盲人的國家。同時,我國每年都會大約新增加45萬名盲人和135萬名視力障礙者。在我國,盲人出行基本上只有兩種方式:傳統(tǒng)手杖和導(dǎo)盲犬引導(dǎo)。傳統(tǒng)的導(dǎo)盲杖對于盲人的幫助很小。盲人需要花費很多的時間來練習(xí)這種導(dǎo)盲杖,通過敲擊地面靠自己固有的經(jīng)驗來判斷前方是否可以安全正常行走。這種方式的局限性非常大。對于盲人而言,最重要的是在未知的地方獲取道路形狀和障礙物位置的信息。有了這些信息,他們可以避免意外的障礙,安全地到達目的地。因此,設(shè)計一款可以真正幫助到盲人檢測到人行橫道、及時提醒盲人避開障礙物并且能夠在夜間提示周圍人的導(dǎo)盲手杖意義十分重大。
設(shè)計的導(dǎo)盲杖以STM32F103C8T6為微控制器。選擇它的原因是因為它能滿足本設(shè)計需要用到的超聲波、語音合成和機器視覺開發(fā)功能。該控制器串口以及端口豐富,且功耗較低,可供選擇的引腳數(shù)目比較多,價格便宜既能滿足需要又能降低導(dǎo)盲杖的成本。
整個系統(tǒng)功能設(shè)計如下:
(1)主動探測障礙物功能。采用超聲波傳感器,通過計算超聲波遇到障礙物返回的時間,測出導(dǎo)盲杖與障礙物的距離,如果距離過近則發(fā)出警報。
(2)震動報警功能。當(dāng)超聲波測定的距離小于預(yù)設(shè)值時,通過控制器,控制直流電機震動馬達震動,提醒盲人前方障礙物。
(3)語音提示功能。選用SYN6288模塊,在前方?jīng)]有障礙物時提示使用者“前方可以行走”,在超聲波檢測到障礙物時停止播報。在前方?jīng)]有障礙物的前提下,如果檢測到盲道則播報盲道,如果檢測到人行橫道,則播報人行橫道。
(4)智能識別功能。在導(dǎo)盲杖上連接一個OPENMV4攝像頭模塊,通過其內(nèi)置的深度學(xué)習(xí)訓(xùn)練神經(jīng)網(wǎng)絡(luò)進行盲道與人行橫道的識別。
如圖1為導(dǎo)盲杖的實物圖和設(shè)計圖,導(dǎo)盲杖的內(nèi)部是鏤空的,方便將各個芯片和線路放置到導(dǎo)盲杖的內(nèi)部。將震動模塊安裝在導(dǎo)盲杖的把手位置,這樣震動時手部感受到的震動是最大的。將語音芯片的喇叭安裝在導(dǎo)盲杖的頂部,這樣使用者可以更清晰地聽到提示音。盲人原來使用普通導(dǎo)盲手杖時,采用敲擊地面的方式只能感受到前方較低地方的障礙物,所以本設(shè)計將超聲波傳感器安裝在導(dǎo)盲杖高度的2/3處,這樣可以幫助盲人檢測較高地方的障礙物。將OpenMV攝像頭以約30°的角度安裝在導(dǎo)盲杖高度的約1/3處,這樣可以更好地觀察到地面的情況,以便進行道路分類。
圖1 導(dǎo)盲杖實物圖和設(shè)計圖
系統(tǒng)硬件設(shè)計及主要接口連接圖如圖2。
圖2 系統(tǒng)硬件設(shè)計及主要接口連接圖
其中,超聲波測距模塊選擇HC-SR04,用來測量導(dǎo)盲杖和障礙物之間的距離。該模塊測量精準(zhǔn)度為3mm,不通過接觸可以測量前方2cm 到400cm 的距離。超聲模塊的VCC 接5V,GND 接地,Trig 口接STM32 芯片的B8 口,Echo 口接STM32芯片的B9口。
震動模塊采用高質(zhì)量手機震動馬達。通過Mos 管放大驅(qū)動,對于震動效果進行提升??赏ㄟ^PWM 控制調(diào)節(jié)馬達的震動強。可以通過Ard數(shù)字口控制震動電機,當(dāng)輸入為高電平的時候,電機就會震動[4]。震動模塊VCC接5V,GND接地,IN口接C13口。
語音合成模塊采用SYN6288 中文語音合成芯片。SYN6288 通過串口通信的方式與STM32 芯片進行數(shù)據(jù)傳輸。SYN6288 的TXD 接口接STM32 的RXD 接口,RXD 接STM32的TXD接口,GND接地,VCC接5V。SYN6288芯片在進行串口通信時最多可以接收206個字節(jié)的數(shù)據(jù)。
采用OpenMV Plus,是一款具有圖像處理功能、可以訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的可編程單片機攝像頭,可以通過MicroPython 控制。OpenMV 的TXD 口接STM32 芯片的RXD 口即A2口,VCC接5V,GND接地。
主控部分使用KEIL5環(huán)境進行開發(fā),軟件整體流程圖如圖3。
圖3 系統(tǒng)軟件流程圖
當(dāng)盲人面前沒有障礙物時,語音播報前方可以行走,遇到盲道語音播報前方是盲道,遇到人行橫道語音播報前方是人行橫道,當(dāng)前方遇到障礙物時停止播報,同時馬達震動提醒使用者。
首先要設(shè)置定時器,以及對HC-SR04 的端口進行初始化。系統(tǒng)選擇TRIG觸發(fā)的方式通過IO口進行測距,初始化先要把電平降低,然后發(fā)送超過10us 的高電平型號;接收到高電平信號以后,會產(chǎn)生8個40kHz的方波,如果接收器接收到返回的信號,則會在IO口上輸出一個高電平,高電平持續(xù)的時間可以看作是超聲波一個來回的時間,即所需要測量的距離就等于高電平時間乘以聲速的一半[3]。當(dāng)距離小于預(yù)設(shè)值時控制震動馬達震動。
SYN6288 芯片在進行串口通信時最多可以接收206 個字節(jié)的數(shù)據(jù)。其中幀頭1字節(jié),數(shù)據(jù)區(qū)長度2字節(jié),數(shù)據(jù)區(qū)可以小于等于203 字節(jié)。使用時需要分配一個串口給SYN6288使用,波特率設(shè)置成默認的9600。
主程序關(guān)鍵代碼如下:
OpenMV4使用OpenMV IDE環(huán)境進行開發(fā),使用Micro-Python 進行編程。在OpenMV 上訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型分為四個步驟:
第一步通過OpenMV IDE采集數(shù)據(jù)集,一般一個分類需要200張左右的數(shù)據(jù)集進行訓(xùn)練,這里設(shè)置兩個分類:盲道和人行橫道。
第二步將采集的圖像上傳到EDGE IMPULSE的在線網(wǎng)站上,上傳之后首先要清洗數(shù)據(jù)集,然后進行圖像的預(yù)處理,將圖片的大小調(diào)整到96*96,圖像格式選擇RGB。預(yù)處理完成,會生成數(shù)據(jù)集分布圖,如果兩個分類基本上是分開的、區(qū)別較明顯,證明數(shù)據(jù)采集比較成功,否則需要重新采集數(shù)據(jù)或清洗數(shù)據(jù)。
第三步進行在線訓(xùn)練模型,設(shè)置深度學(xué)習(xí)的輪數(shù)、學(xué)習(xí)率,同時勾選圖片增廣,可以擴大數(shù)據(jù)集的樣本容量,使訓(xùn)練結(jié)果更加精準(zhǔn),避免過擬合,最后設(shè)置置信度。訓(xùn)練過程中,loss 逐漸降低,accuracy 即準(zhǔn)確度逐漸升高并且最終提高到1。如果訓(xùn)練過程中準(zhǔn)確率在前幾輪就達到了比較高的數(shù)值,則會直接停止訓(xùn)練防止過擬合的情況發(fā)生。訓(xùn)練結(jié)束后會先自動生成float32 的模型,然后轉(zhuǎn)化成int8 量化的類型,最后顯示訓(xùn)練結(jié)束。
第四步將訓(xùn)練好的模型及代碼下載到OpenMV 里。然后通過串口通信將模型檢測出的數(shù)據(jù)傳輸給STM32,接入到主控程序中。
訓(xùn)練過程及結(jié)果如圖4、5所示。
圖4 訓(xùn)練過程
文章介紹了一種智能導(dǎo)盲杖系統(tǒng)的設(shè)計,從功能需求、硬件組成、軟件設(shè)計三方面進行說明,使用深度學(xué)習(xí)訓(xùn)練后的模型進行圖像識別,結(jié)合超聲波傳感模塊、語音合成模塊、震動模塊構(gòu)建系統(tǒng)。該設(shè)計可以高效地解決盲人對于身處路段不明的問題,有效地幫助盲人解決出行困難以及安全方面的問題,提高盲人的生活水平。希望在未來,導(dǎo)盲杖功能可以更加齊全,也更加輕便,使得盲人的生活水平進一步提高。
圖5 訓(xùn)練完成