王雨欣,賀 裕,趙 燦
(哈爾濱師范大學(xué)計(jì)算機(jī)科學(xué)與信息工程學(xué)院,黑龍江 哈爾濱 150025)
世界衛(wèi)生組織2020年數(shù)據(jù)顯示,我國視力殘疾的人約有一千二百萬,但我國很多地區(qū)盲道建設(shè)不規(guī)范,常有車輛停在路邊也會(huì)截?cái)嗝さ?,此外,?dǎo)盲犬的數(shù)量稀少加上價(jià)格昂貴,導(dǎo)盲杖雖然成本較低,但可控范圍又十分有限,這些都不是根本的解決辦法[1]?;谠摫尘跋?盲人智能眼鏡開始出現(xiàn)在人們的視野中,盲人智能眼鏡的概念在很早之前就有人提出過,但在2016 年的微軟Build2016 的記者大會(huì)中才第一次正式亮相,當(dāng)時(shí)展示的智能眼鏡的功能比較單一,只有簡單的識(shí)別功能,雖然能在一定程度上給盲人提供便利,但還是有一定的局限性。相比之下,本文基于Raspberry Pi 開發(fā)的輔助盲人行動(dòng)的智能助盲導(dǎo)航系統(tǒng)的功能更加多元化,系統(tǒng)名為“SE-盲人之光”,通過圖像識(shí)別與智能避障技術(shù),實(shí)時(shí)監(jiān)測用戶所處的周圍環(huán)境,最大限度的給予用戶安全出行的保障。本文將針對(duì)該款助盲系統(tǒng)中所用到的語音傳輸、圖像識(shí)別、智能避障等相關(guān)技術(shù)進(jìn)行詳細(xì)闡述。
結(jié)合Raspberry Pi 的功能特性及主流的圖像識(shí)別框架的適應(yīng)性,確定TensorFlow作為開發(fā)框架。
TensorFlow 是Google 開放的學(xué)習(xí)架構(gòu),在各種圖類型、聲音信息處理、推薦管理系統(tǒng)和自然語言信息處理等情景下均有大量的使用。
在樹莓派上安裝TensorFlow,并且安裝一個(gè)wheel文件,該文件用于安裝Python 模塊,進(jìn)而方便后續(xù)的文件解析。關(guān)于識(shí)別雙目攝像頭拍攝的圖片中的物體,首先需要訓(xùn)練圖像分類模型,但這在樹莓派中會(huì)導(dǎo)致大量資源消耗并且需要很長時(shí)間。這就是為什么我們選擇了Google 已經(jīng)練習(xí)的LeNet-5 模式,即TensorFlow 指定了一組預(yù)先練習(xí)的參數(shù)集,并且訓(xùn)練照片庫是ImageNet[2]。通過對(duì)該模型進(jìn)行解壓,可以利用TensorFlow 進(jìn)行圖像的識(shí)別,但在識(shí)別的過程中需要設(shè)置好Python 圖像分類程序所在的路徑以及待識(shí)別圖片的路徑,進(jìn)而完成圖像識(shí)別的功能。
關(guān)于圖像識(shí)別采用算法,采集生活中常見物品圖片,進(jìn)行模型對(duì)比驗(yàn)證,采用數(shù)據(jù)集進(jìn)行日常物品的識(shí)別模型訓(xùn)練。主體架構(gòu)是使用了卷積神經(jīng)網(wǎng)絡(luò),基本上是含有卷積層、池化層、全連絡(luò)層還有softmax層[3]。
與常規(guī)神經(jīng)網(wǎng)絡(luò)系統(tǒng)有所不同,卷積神經(jīng)網(wǎng)絡(luò)系統(tǒng)各層中神經(jīng)元是三維進(jìn)行的:長寬、高程和深淺。這里的寬度和高程是很好的把握的,因?yàn)榻M織實(shí)際上是一個(gè)二維模塊,但是卷積神經(jīng)網(wǎng)絡(luò)中的深入是指激活數(shù)據(jù)體的第三級(jí),而并非整體網(wǎng)絡(luò)系統(tǒng)的深入,整體網(wǎng)絡(luò)系統(tǒng)的深入是指整體網(wǎng)絡(luò)系統(tǒng)的層數(shù)。訓(xùn)練流程如圖1所示。
圖1 訓(xùn)練模型流程圖
LeNet-5 模型共七層,第一層為卷積層,輸入元素圖像,使圖像轉(zhuǎn)換為LeNet-5 模型所能接受的圖像格式。第二層池化層,這一層的輸入為第一層的輸出,本層采用的濾波器大小為2×2,長和寬的步長均為2,所以本層的輸出矩陣大小為14×14×6。第三層,卷積層繼續(xù)處理圖像。第四層池化層,本層的輸入上一層輸出,采用的過濾器大小為2×2,步長為2。本層的輸出矩陣大小為5×5×16[4]。其余三層為全連接層。完成模型設(shè)計(jì)后,對(duì)系統(tǒng)進(jìn)行訓(xùn)練,測試識(shí)別準(zhǔn)確率。
我們?cè)跇漭缮洗钶d了精度較高的HC-SR04 超聲波測距模塊和紅外線傳感器模塊,使用雙模塊綜合測距的方式來測量使用者與障礙物之間的距離。
超聲波測距的基本原理采用的是時(shí)刻差定距法,超聲在室內(nèi)空氣中的傳輸速率是可知的,從發(fā)射點(diǎn)到障礙物的具體實(shí)際間距是通過發(fā)射和接收雙方的時(shí)間限制之差來衡量的,當(dāng)聲音在其釋放后被反射時(shí),首先,超聲波發(fā)射器向一定方向發(fā)送超聲波,傳輸時(shí)間的同步是暫時(shí)的,超聲在房間內(nèi)的空氣環(huán)境中傳輸,沿途迅速將障礙物折回,超聲接收器被波反射后立刻終止計(jì)數(shù)。
超聲在室內(nèi)空氣中的傳播速度為C=340m/s,按照定時(shí)器T 秒確定的時(shí)限,我們能夠測算出從發(fā)射點(diǎn)到障礙物的間距L,即:L=C×T/2。但由于超聲波傳感器包括發(fā)送端(Trig)和接受端(Echo),使用IO 口Trig自行接觸測距,給到最小10us 的高電平信息下會(huì)模塊會(huì)自動(dòng)發(fā)出方波[5],發(fā)出信號(hào)的時(shí)候接收端會(huì)提供高電平值,等到接收到反饋過來的信號(hào)時(shí),Echo 也會(huì)跳轉(zhuǎn)入低電平值。通過超聲波的工作原理得知:從Trig=1到Echo=0的時(shí)間,就是超聲波從發(fā)射到接收的時(shí)間,因此障礙物的距離還有另外一種檢測方式,即障礙物的距離=Echo 高電平持續(xù)的時(shí)間×C/2,原理如圖2所示。
圖2 超聲波測距原理圖
紅外測距都是利用了三角測距的原理。紅外發(fā)射器沿特定角度發(fā)射紅外光,當(dāng)紅外發(fā)射體擊中物體時(shí),它再次反射,如果檢測到反射光,利用結(jié)構(gòu)上的幾何三角關(guān)系,就能夠算出與物體距離D[5]。
用來檢測周圍是否有障礙物,當(dāng)使用者周圍出現(xiàn)障礙物時(shí),紅外線避障模塊的兩個(gè)指示燈將會(huì)變亮,同時(shí)傳感器的狀態(tài)轉(zhuǎn)為False,此時(shí)可以在傳感器為False 的狀態(tài)中添加周圍出現(xiàn)障礙物的文本,最終通過TTS 轉(zhuǎn)換模塊來將文本轉(zhuǎn)換為語音,并通過語音輸出模塊進(jìn)行語音的提示。
在此次智能助盲導(dǎo)航系統(tǒng)的設(shè)計(jì)中,我們針對(duì)如圖3所示的功能進(jìn)行開發(fā)。
圖3 系統(tǒng)功能模塊
對(duì)于該系統(tǒng)的避障功能,我們選擇超聲波測距和紅外線檢測兩種方式共同進(jìn)行,這是由于由于超聲波易受環(huán)境因素影響,在不同的環(huán)境介質(zhì)下,會(huì)有著不同的傳輸速度以及一定的延遲,這可能會(huì)在關(guān)鍵時(shí)刻影響用戶的行動(dòng),因此,加上紅外線檢測模塊之后,會(huì)對(duì)用戶周圍存在的障礙物進(jìn)行實(shí)時(shí)的信息反饋,再結(jié)合超聲波檢測出來的障礙物與用戶之間的距離,能夠在第一時(shí)間提示用戶周圍的障礙物信息,極大提高了用戶規(guī)避障礙物的精準(zhǔn)性[6]。
我們?cè)跇漭缮洗钶dOpenCV 來進(jìn)行顏色的識(shí)別,OpenCV 是一個(gè)使用BSD 許可(開源)發(fā)布的跨平臺(tái)計(jì)算機(jī)視覺庫,并且其還提供的Python 接口,實(shí)現(xiàn)了在圖像處理和計(jì)算機(jī)視覺方向上的多種通用算法,以便于人們?cè)跇漭缮线M(jìn)行研究[5]。具體識(shí)別流程如下。
⑴由于RGB 模型適合顯示,不適合作為顏色識(shí)別的模型,HSV 更加符合人眼的感受,將其作為顏色識(shí)別會(huì)大大提高識(shí)別的準(zhǔn)確性,這里我們使用OpenCV自帶的hsv_frame 函數(shù)來將RGB 轉(zhuǎn)換到HSV,進(jìn)行方便顏色的識(shí)別。
⑵在OpenCV 中,因?yàn)?,各種顏色的HSV 模型的取值范圍都各不相同,所以,我們需要設(shè)置各種顏色的HSV模型的取值范圍。
⑶在設(shè)置完顏色的取值范圍后,要對(duì)拍攝的彩色圖像進(jìn)行直方圖均衡。
⑷接著使用OpenCVAPI 進(jìn)行顏色閾值的檢測,從而得到二值圖像。
⑸對(duì)二值圖像進(jìn)行開操作,刪除零星噪點(diǎn)。
⑹接著進(jìn)行閉操作,連接一些連通域,這樣得到的二值圖像就是顏色識(shí)別后的結(jié)果。
通過以上步驟便能在樹莓派上利用OpenCV 對(duì)拍攝的圖像識(shí)別顏色,即能夠識(shí)別出紅/綠燈的狀態(tài)。
對(duì)于日常物體的識(shí)別功能,我們使用了TensorFlow框架來識(shí)別實(shí)時(shí)拍攝圖片中的各種物體。通過在樹莓派上搭載TensorFlow 框架,將實(shí)時(shí)拍攝的圖片上傳到已經(jīng)訓(xùn)練好的模型中去,利用現(xiàn)成的圖片集去匹配所拍攝圖片中的元素,并自動(dòng)生成標(biāo)簽,從而達(dá)到圖像識(shí)別的目的[7]。
在語音提示功能方面,我們選擇在樹莓派上搭載TTS(text-to-speech)模塊,即添加文字轉(zhuǎn)語音的功能,通過程序把輸入的文字通過硬件播放器播放出來。對(duì)于TTS 的選擇有很多種,可以使用云端的TTS 服務(wù)也可以使用本地的TTS 軟件,兩者各有利弊,這里我們選用本地的TTS 的Espeak 軟件,通過對(duì)TTS 軟件的安裝和配置以及無源耳機(jī)的連接,重啟之后再進(jìn)行Espeak命令的執(zhí)行,便能正常發(fā)聲[8]。
由于該款眼鏡的智能性,使用者可以根據(jù)眼鏡上安裝的便捷按鈕,通過觸碰的不同次數(shù)來調(diào)整播放音量和眼鏡的松緊程度,進(jìn)而實(shí)現(xiàn)簡單的人機(jī)交互。
整個(gè)樹莓派搭載了雙目攝像頭、紅外線傳感器模塊、HC-SR04 超聲波測距模塊、TTS 文本轉(zhuǎn)換模塊、語音輸出模塊。具體工作流程如下:
通過雙目攝像頭將實(shí)時(shí)拍攝的視頻流上傳到樹莓派中,通過樹莓派實(shí)時(shí)截取視頻流中的圖片,并上傳到OpenCV 模型以及TensorFlow 框架中,進(jìn)行圖像元素以及顏色的識(shí)別,并生成相應(yīng)的標(biāo)簽,接著利用紅外線傳感器模塊的避障提示,以及超聲波測距模塊對(duì)障礙物到用戶的距離進(jìn)行檢測,進(jìn)而判斷圖像中的障礙物距離用戶的遠(yuǎn)近,從而達(dá)到即使避障的目的[9]。圖像識(shí)別產(chǎn)生的元素標(biāo)簽、避障時(shí)的障礙物提示以及障礙物和用戶之間的距離都以文本的形式上傳到TTS模型中,進(jìn)行文本到語音的轉(zhuǎn)換。最終通過語音輸出模塊,利用無源耳機(jī)將轉(zhuǎn)換出來的語音進(jìn)行外放,從而完整的實(shí)現(xiàn)了智能導(dǎo)航系統(tǒng)的功能[10]。
這款智能導(dǎo)航眼鏡有著強(qiáng)大的功能和應(yīng)用前景,但還是存在一些不足之處,比如,該款設(shè)備所用到的器件較多,并且又不少體積和重量較大的器件,這不僅在裝配過程中會(huì)有問題,用戶戴著的時(shí)候也會(huì)不舒服,極大得降低了用戶的體驗(yàn)感,除此之外,在該導(dǎo)航眼鏡中存在一些技術(shù)上的不足,在導(dǎo)航系統(tǒng)的運(yùn)行中,缺乏路線的選擇以及實(shí)時(shí)場景信息處理時(shí)的優(yōu)化算法,畢竟時(shí)效性不好的話,在一定程度上會(huì)給用戶帶來一定的安全隱患。
因此,我們會(huì)在之后的搭建中突破一些技術(shù)上的難題,不斷維護(hù)和更新該設(shè)備的算法以及所用器件的性能等相關(guān)信息,進(jìn)而使該設(shè)備更加完美,并能夠早一點(diǎn)投入市場,為更多的人帶來便利。