孟兆樂,蔣 野,劉增林
(佳木斯大學(xué)信息電子技術(shù)學(xué)院,黑龍江 佳木斯 154007)
如今,機(jī)器學(xué)習(xí)是一門研究如何設(shè)計(jì)算法利用數(shù)據(jù)使機(jī)器在特定任務(wù)上取得更優(yōu)表現(xiàn)的學(xué)科,其中以深度學(xué)習(xí)為代表的相關(guān)技術(shù)已成為人們研究實(shí)現(xiàn)人工智能方法的重要手段之一。至今,機(jī)器學(xué)習(xí)研究已經(jīng)取得大量令人矚目的成就:在圖像分類任務(wù)上的識(shí)別準(zhǔn)確率超過人類水平;能夠生成人類無法輕易識(shí)別的逼真圖像和文本;機(jī)器學(xué)習(xí)成為熱潮,成為解決一些特殊環(huán)境下人不方便介入時(shí)的解決辦法。
受新冠肺炎疫情影響,醫(yī)院的醫(yī)護(hù)人員在給病人送藥的過程中難免會(huì)有感染的風(fēng)險(xiǎn),無接觸送藥的方式將減少醫(yī)護(hù)人員與病人的交叉接觸,減少了醫(yī)護(hù)人員的工作量,從而降低醫(yī)護(hù)人員被感染的概率。設(shè)計(jì)一款基于機(jī)器學(xué)習(xí)的智能送藥小車將改變這種傳統(tǒng)的接觸式送藥模式,智能送藥小車?yán)肙penMV攝像頭,通過采集病房號(hào)的數(shù)字信息,將帶有病房號(hào)數(shù)字信息儲(chǔ)存在內(nèi)存中,當(dāng)需要送藥的指令發(fā)出后,配藥醫(yī)護(hù)人員將目標(biāo)病房號(hào)的數(shù)字信息送給STM32單片機(jī),單片機(jī)根據(jù)攝像頭以及循跡路徑規(guī)劃路線,完成送藥任務(wù)[1]。
智能送藥小車制作的主要器件:STM32F429、HMI串口顯示屏、HC05藍(lán)牙模塊、L298N電機(jī)驅(qū)動(dòng)板、電源模塊、18650電池電源、發(fā)光二極管、帶編碼器的直流電機(jī)、OpenMV攝像頭、顏色識(shí)別模塊、小車實(shí)物照片如圖1所示。
圖1 智能送藥小車的實(shí)物照片
智能送藥小車系統(tǒng)可以劃分為四個(gè)階段:病房數(shù)字號(hào)碼進(jìn)行機(jī)器學(xué)習(xí)階段、目標(biāo)病房號(hào)碼數(shù)據(jù)采集階段、送藥階段、返程階段。
1)病房數(shù)字號(hào)碼進(jìn)行機(jī)器學(xué)習(xí)階段:將數(shù)字病房號(hào)碼多角度拍照,將其特征點(diǎn)錄入到OpenMV攝像頭的數(shù)據(jù)庫中,待送藥任務(wù)指令下達(dá)后,單片機(jī)進(jìn)行目標(biāo)病房號(hào)碼的特征點(diǎn)比對(duì)工作。
2)目標(biāo)病房號(hào)碼數(shù)據(jù)采集階段:智能送藥小車通過OpenMV攝像頭將采集到的數(shù)字病房號(hào)數(shù)據(jù)傳入STM32單片機(jī),單片機(jī)對(duì)采集到的數(shù)據(jù)進(jìn)行數(shù)據(jù)特征點(diǎn)采樣分析。單片機(jī)對(duì)采集到的數(shù)據(jù)與之前機(jī)器學(xué)習(xí)過的數(shù)據(jù)庫進(jìn)行NCC(模板匹配)、Hausdorff(距離匹配)算法比對(duì),單片機(jī)運(yùn)算處理后得到目標(biāo)病房號(hào)碼,并等待藥品裝填的指令下達(dá)。
3)送藥階段:當(dāng)傳感器檢測(cè)到藥品已放入,智能送藥小車開始送藥階段。在送藥的過程中,智能送藥小車?yán)肙penMV攝像頭、循跡模塊來完成路線規(guī)劃,進(jìn)行送藥任務(wù),到達(dá)目標(biāo)病房后點(diǎn)亮紅色LED指示燈停車等待藥品的取用。
4)返程階段:當(dāng)傳感器檢測(cè)到藥品已取走后,智能送藥小車完成送藥階段,進(jìn)入返程階段。智能送藥小車原路返回,完成送藥工作。
系統(tǒng)組成框圖如圖2所示。
圖2 系統(tǒng)組成框圖
首先將固定的病房平面圖建立直角坐標(biāo)系進(jìn)行位置規(guī)劃,那么我們可以通過編碼器累計(jì)里程,構(gòu)建一個(gè)智能小車送藥路徑圖。這個(gè)圖共有14個(gè)節(jié)點(diǎn),分別賦予與實(shí)際長度相對(duì)應(yīng)的坐標(biāo)值,將固定的坐標(biāo)位置存儲(chǔ)到單片機(jī)的Flash中。通過編碼器即可到達(dá)地圖中任意位置。算法描述如下:
Step1:構(gòu)建地圖,輸入14個(gè)節(jié)點(diǎn)的坐標(biāo)值、目標(biāo)坐標(biāo)值,如圖3所示。
圖3 節(jié)點(diǎn)坐標(biāo)圖
Step2:根據(jù)OpenMV的指令進(jìn)行前進(jìn),左轉(zhuǎn),右轉(zhuǎn),記錄到達(dá)的坐標(biāo)編號(hào)。
Step3:構(gòu)建路徑堆棧,在返程時(shí)依次出棧。
例如小車要前往中部4號(hào)病房,途徑1、3、6、9四個(gè)節(jié)點(diǎn)。當(dāng)小車返回時(shí),小車采用依次出棧的方法,依次途徑的點(diǎn)為9、6、3、1四個(gè)節(jié)點(diǎn)返回藥房。
在小車的行駛過程中需要識(shí)別數(shù)字,從而判斷小車行駛路徑。我們?cè)谲囶^安裝OpenMV攝像頭在十字路口對(duì)標(biāo)識(shí)數(shù)字進(jìn)行識(shí)別,從而判斷小車行駛路徑。采用廣角的OpenMV攝像頭來抓取圖像,為保證可以同時(shí)抓取四個(gè)數(shù)字,對(duì)攝像頭抓取的圖像在計(jì)算機(jī)上進(jìn)行腐蝕膨脹、濾波、灰度化、二值化等圖像預(yù)處理操作后儲(chǔ)存到OpenMV的SD卡中作為模板匹配的樣本,然后對(duì)圖像進(jìn)行單字符分割,讓小車的攝像頭能輕松的去尋找到數(shù)字的邊框輪廓,將攝像頭識(shí)別到的數(shù)字畫外接矩形用于區(qū)分以及指示。同時(shí)利用模板匹配的NCC算法和Hausdorff算法提高識(shí)別精度,保證小車在快速運(yùn)行的過程中識(shí)別到病房號(hào)信息,單片機(jī)為送藥小車規(guī)劃路線[2]。
1)NCC模板匹配算法
NCC歸一化的交叉相關(guān)性,是數(shù)學(xué)上統(tǒng)計(jì)兩組數(shù)據(jù)之間是否有關(guān)系的判斷方法,可以匹配與模板圖片大小和角度基本一致的圖案。模板匹配適應(yīng)于攝像頭與目標(biāo)物體之間距離確定,不需要?jiǎng)討B(tài)移動(dòng)的情況。
正常的計(jì)算公式如下:
(1)
所有像素點(diǎn)(x,y)∈M×N
其中
(2)
(3)
在OpenMV中,我們使用160*120分辨率的灰度圖像進(jìn)行識(shí)別。首先對(duì)1~8進(jìn)行模板圖像采集,然后使用OpenMV自帶函數(shù)find_temple進(jìn)行識(shí)別比對(duì)。設(shè)定相似度閾值為0.7讓小車去動(dòng)態(tài)識(shí)別數(shù)字病房號(hào),送藥小車可以完成預(yù)期的送藥任務(wù)[3]。
2)Hausdorff距離匹配的算法
模板匹配適應(yīng)于攝像頭與目標(biāo)物體之間距離確定,不需要?jiǎng)討B(tài)移動(dòng)的情況。在動(dòng)態(tài)移動(dòng)過程中就會(huì)出現(xiàn)錯(cuò)誤匹配的情況,所以我們引入Hausdorff算法,從待識(shí)別數(shù)字圖像中提取若干特征向量與模板對(duì)應(yīng)的特征向量進(jìn)行比較,計(jì)算圖像與模板特征向量之間的距離,用最小距離法判定所屬類別,同時(shí)增加粗檢索,它不是讓模板每次移動(dòng)一個(gè)像素,而是每隔若干個(gè)像素把模板和圖像重疊,并計(jì)算匹配的尺度,從而求出對(duì)象大致存在的范圍。在以記錄坐標(biāo)為中心的3*3cm2的范圍內(nèi),讓模板每隔一個(gè)像素移動(dòng)一次,根據(jù)求出的匹配尺度確定對(duì)象所在的位置,利用這條特征去進(jìn)行固定位置的房間號(hào)碼識(shí)別,讓搭載攝像頭的小車去尋找固定位置房間號(hào)碼,然后傳回房間號(hào)碼去完成送藥工作。
圖4 Hausdorff算法流程圖
PID調(diào)節(jié)實(shí)質(zhì)是根據(jù)輸入的偏差值,按照比例、積分、微分的函數(shù)關(guān)系進(jìn)行運(yùn)算,運(yùn)算結(jié)果用以控制輸出。PID控制是將誤差信號(hào)e(t)的比例(P),積分(I)和微分(D)通過線性組合構(gòu)成控制量進(jìn)行控制,其輸出信號(hào)為:
(4)
對(duì)此式進(jìn)行拉普拉斯變換,并且整理后得到模擬PID調(diào)節(jié)器的傳遞函數(shù)為:
(5)
KP:比例系數(shù);TI:積分時(shí)間常數(shù);TD:微分時(shí)間常數(shù);e(t):偏差;u(t):控制量[4]。
以STM公司的STM32F429IGT6作為主控芯片,該單片機(jī)采用cortex-M4高速內(nèi)核、主頻180 MHz、具有高性能、功耗低、最小系統(tǒng)板資源豐富、片內(nèi)資源充足和處理能力較強(qiáng)[5]。
在小車的行駛過程中需要判斷小車行駛路徑,以此來控制小車的行駛狀態(tài),對(duì)此我們?cè)谲囶^安裝光敏電阻循跡組用以檢測(cè)出地圖上的紅色標(biāo)線,從而規(guī)劃小車行駛路徑。
小車采用直流電機(jī)驅(qū)動(dòng),其轉(zhuǎn)動(dòng)力矩大、體積小、重量輕、裝配簡(jiǎn)單、操作方便。電機(jī)可以通過改變電壓來調(diào)節(jié)轉(zhuǎn)速,也可以通過調(diào)節(jié)PWM來實(shí)現(xiàn)電機(jī)的調(diào)速。小車采用L298N雙路電機(jī)驅(qū)動(dòng)板來驅(qū)動(dòng)直流電機(jī)。
在兩運(yùn)動(dòng)中的小車之間建立通訊方式,藍(lán)牙串口模塊(HC05)是基于SPP協(xié)議,能在藍(lán)牙設(shè)備之間創(chuàng)建串口進(jìn)行數(shù)據(jù)傳輸?shù)囊环N設(shè)備。藍(lán)牙串口的目的是針對(duì)如何在兩個(gè)不同通信設(shè)備上保證一條完整的通信路徑,從而實(shí)現(xiàn)雙車協(xié)作并完成任務(wù)[6]。
軟件部分主要實(shí)現(xiàn)通過視覺反饋及編碼器控制小車行進(jìn),攝像頭識(shí)別數(shù)字和規(guī)劃小車路線按指示的數(shù)字將藥送到固定的病房。
程序設(shè)計(jì)主要從是否檢測(cè)到要求送藥的病房號(hào)為第一個(gè)開關(guān),當(dāng)檢測(cè)到目標(biāo)病房號(hào)后去檢測(cè)第二個(gè)開關(guān)是否檢測(cè)到放置藥品,檢測(cè)到放置藥品就開始規(guī)劃路線送藥,送藥過程檢測(cè)第三個(gè)開關(guān)是否到達(dá)送藥終點(diǎn),如果到達(dá)的是十字路口,就采用攝像頭識(shí)別房間號(hào),智能送藥小車規(guī)劃路線;如果到達(dá)終點(diǎn),就判斷是否取走藥品,待取走藥品,開始返程。
圖5 程序流程圖
基于上述的地圖規(guī)劃情況,分別讓送藥小車去完成對(duì)近端、中端、遠(yuǎn)端病房的送藥任務(wù),其實(shí)際測(cè)試結(jié)果如表1所示。
表1 測(cè)試結(jié)果
本設(shè)計(jì)制作的智能送藥小車,模擬完成了醫(yī)院病房藥品的送達(dá)作業(yè)。智能小車可依據(jù)程序設(shè)定以及機(jī)器學(xué)習(xí)的數(shù)字病房號(hào)信息,實(shí)現(xiàn)了病房號(hào)的數(shù)字識(shí)別、循跡、雙機(jī)交互送藥的功能。此設(shè)計(jì)在一定程度上減少了病人與醫(yī)護(hù)人員的接觸幾率,也緩解了醫(yī)護(hù)人員勞動(dòng)量大的問題。